版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HADOOP大数据课程童小军2013年3月Hive数据仓库暴风公司数据仓库案例集群接收日志超过1.2TB/天3500+任务/日任务数据吞吐10TB+/天,离线小时数据分析数据挖掘和用户精分推荐系统用户按地域收入年龄性别收入层次划分广告系统数据系统的进化-一代数据系统的进化-二代数据系统的进化-三代暴风Hadoop集群架构流程Scribenginx+php使用的Hadoop生态圈Hadoop1.0.3基础计算框架
Hive离线数据分析95%任务
Pig离线数据分析HBase部分数据的存储Mahout数据挖掘暴风指数暴风指数暴风指数DataWarehousingatFacebook
WebServersScribeServersFilersHiveonHadoopClusterOracleRACFederatedMySQLWhatisHive
构建于hadoop的hdfs和mapred之上,用于管理和查询结构化/非结构化数据的数据仓库。使用HQL作为查询接口使用HDFS作为底层存储使用MapRed作为执行层WhatisHive
InstallationandConfiguration
安装和配置hadoop集群下载hive安装包解压至安装目录配置HADOOP_HOME和JAVA_HOME变量修改存储元数据的数据库(derby、mysql、oracle)
InstallationandConfiguration
hive的元数据存储hive默认使用内存数据库derby存储元数据,使用时不需要修改任何配置,缺点:hiveserver重启后所有的元数据都会丢失hive还执行mysql、oracle等任何支持JDBC连接方式的数据库来存储元数据,需要修改相应的配置项
InstallationandConfiguration
hive的元数据存储
DDLandDMLOperations
hive建表语法格式
DDLandDMLOperations
hive建表语法格式
external外部表,类似于mysql的csv引擎
partitionedby指定分区字段clusteredbysortedby可以对表和分区对某个列进行分桶操作,也可以利用sortedby对某个字段进行排序rowformat指定数据行中字段间的分隔符和数据行分隔符storedas指定数据文件格式:textfilesequencercfileinputformat(自定义的inputformat类)location指定数据文件存放的hdfs目录
DDLandDMLOperations
hive建表语句
CREATETABLEpage_view(viewTimeINT,useridBIGINT,page_urlSTRING,referrer_urlSTRING,ipSTRINGCOMMENT'IPAddressoftheUser')COMMENT'Thisisthepageviewtable'PARTITIONEDBY(dtSTRING,countrySTRING)CLUSTEREDBY(userid)SORTEDBY(viewTime)INTO32BUCKETSROWFORMATDELIMITEDFIELDSTERMINATEDBY'\001'COLLECTIONITEMSTERMINATEDBY'\002'MAPKEYSTERMINATEDBY'\003'STOREDASSEQUENCEFILE;
DDLandDMLOperations
删除表droptable[IFEXISTS]table_name删除内部表时会删除元数据和表数据文件删除外部表(external)时只删除元数据
DDLandDMLOperations
修改表增加分区
ALTERTABLEpage_viewADDPARTITION(dt='2008-08-08',country='us')location'/path/to/us/part080808'PARTITION(dt='2008-08-09',country='us')location'/path/to/us/part080809';修改表删除分区
ALTERTABLEpage_viewDROPPARTITION(dt='2008-08-08',country='us');修改表重命名表
ALTERTABLEtable_nameRENAMETOnew_table_name修改表修改字段
ALTERTABLEtest_changeCHANGEaa1STRINGAFTERb;
DDLandDMLOperations
加载数据
LOADDATAINPATH'/user/myname/kv2.txt'OVERWRITEINTOTABLEinvitesPARTITION(ds='2008-08-15');加载(本地、hdfs)文件到指定的表分区FROMsrc
INSERTOVERWRITETABLEdest1SELECTsrc.*WHEREsrc.key<100
INSERTOVERWRITETABLEdest2SELECTsrc.key,src.valueWHEREsrc.key>=100andsrc.key<200从指定表中选取数据插入到其他表中HQLusecase
select语法结构
SELECT[ALL|DISTINCT]select_expr,select_expr,...
FROMtable_reference
[WHEREwhere_condition]
[GROUPBYcol_list]
[CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]]
[LIMITnumber]
HQLusecase
select案例
SELECTpv.pageid,u.ageFROMpage_viewpJOINuseruON(pv.userid=u.userid)JOINnewuserxon(u.age=x.age);
HiveExtension
User-definedFunctionUDF作用于单个数据行,输出一个数据,如字符处理函数UDAF作用于多个数据行,输出一个数据,如count,sum函数UDTF作用于单个数据行,输出多个数据行支持用户使用java自定义开发UDF函数Hivestreaming
支持用户在hiveQL语句中嵌入自定义的streaming处理脚本
使用UDFaddjar/tmp/helloUDF.jar;createtemporaryfunctionhelloworldas'com.hrj.hive.udf.HelloUDF';selecthelloworld(t.col1)fromtlimit10;droptemporaryfunctionhelloworld;HiveOptimization
使用分区Hive中的每个分区都对应hdfs上的一个目录,分区列也不是表中的一个实际的字段,而是一个或者多个伪列,在表的数据文件中实际上并不保存分区列的信息与数据。Partition关键字中排在前面的为主分区(只有一个),后面的为副分区静态分区:静态分区在加载数据和使用时都需要在sql语句中指定
案例:(stat_date='20120625',province='hunan')动态分区:使用动态分区需要设置hive.exec.dynamic.partition参数值为true,默认值为false,在默认情况下,hive会假设主分区时静态分区,副分区使用动态分区;如果想都使用动态分区,需要设置set
hive.exec.dynamic.partition.mode=nostrick,默认为strick
案例:(stat_date='20120625',province)HiveOptimization
排序优化
Order
by
实现全局排序,一个reduce实现,效率低Sort
by
实现部分有序,单个reduce输出的结果是有序的,效率高,通常和DISTRIBUTE
BY关键字一起使用(DISTRIBUTE
BY关键字
可以指定map
到
reduce端的分发key)CLUSTER
BY
col1
等价于DISTRIBUTE
BY
col1
SORT
BY
col1合并小文件文件数目过多,会给
HDFS
带来压力,并且会影响处理效率,可以通过合并
Map
和
Reduce
的结果文件来消除这样的影响hive.merge.mapfiles
=
true是否和并
Map
输出文件,默认为
Truehive.merge.mapredfiles
=
false是否合并
Reduce
输出文件,默认为
Falsehive.merge.size.per.task
=
256*1000*1000合并文件的大小HiveOptimization
groupby优化
Map端聚合,首先在map端进行初步聚合,最后在reduce端得出最终结果,相关参数:hive.map.aggr
=
true是否在
Map
端进行聚合,默认为
True
hive.groupby.mapaggr.checkinterval
=
100000在
Map
端进行聚合操作的条目数目数据倾斜聚合优化,设置参数hive.groupby.skewindata
=
true,当选项设定为
true,生成的查询计划会有两个
MR
Job。第一个
MR
Job
中,Map
的输出结果集合会随机分布到
Reduce
中,每个
Reduce
做部分聚合操作,并输出结果,这样处理的结果是相同的
Group
By
Key
有可能被分发到不同的
Reduce
中,从而达到负载均衡的目的;第二个
MR
Job
再根据预处理的数据结果按照
Group
By
Key
分布到
Reduce
中(这个过程可以保证相同的
Group
By
Key
被分布到同一个
Reduce
中),最后完成最终的聚合操作。HiveOptimization
join优化
Join查找操作的基本原则:应该将条目少的表/子查询放在
Join
操作符的左边。原因是在
Join
操作的
Reduce
阶段,位于
Join
操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内存溢出错误的几率。Join查找操作中如果存在多个join,且所有参与join的表中其参与join的key都相同,则会将所有的join合并到一个mapred程序中。案例:SELECT
a.val,
b.val,
c.val
FROM
a
JOIN
b
ON
(a.key
=
b.key1)
JOIN
c
ON
(c.key
=
b.key1)
在一个mapre程序中执行joinSELECT
a.val,
b.val,
c.val
FROM
a
JOIN
b
ON
(a.key
=
b.key1)
JOIN
c
ON
(c.key
=
b.key2)
在两个mapred程序中执行joinMap
join的关键在于join操作中的某个表的数据量很小,案例:SELECT
/*+
MAPJOIN(b)
*/
a.key,
a.value
FROM
a
join
b
on
a.key
=
b.key
HiveOptimization
join优化
Mapjoin
的限制是无法执行a
FULL/RIGHT
OUTER
JOIN
b,和map
join相关的hive参数:erval
hive.mapjoin.size.key
hive.mapjoin.cache.numrows由于join操作是在where操作之前执行,所以当你在执行join时,where条件并不能起到减少join数据的作用;案例:SELECT
a.val,
b.val
FROM
a
LEFT
OUTER
JOIN
b
ON
(a.key=b.key)
WHERE
a.ds='2009-07-07'
AND
b.ds='2009-07-07'最好修改为:SELECT
a.val,
b.val
FROM
a
LEFT
OUTER
JOIN
b
ON
(a.key=b.key
AND
b.ds='2009-07-07'
AND
a.ds='2009-07-07')在join操作的每一个mapred程序中,hive都会把出现在join语句中相对靠后的表的数据stream化,相对靠前的变的数据缓存在内存中。当然,也可以手动指定stream化的表:SELECT
/*+
STREAMTABLE(a)
*/
a.val,
b.val,
c.val
FROM
a
JOIN
b
ON
(a.key
=
b.key1)
JOIN
c
ON
(c.key
=
b.key1)HiveOptimization
实现(not)in通过left
outer
join进行查询(假设B表中包含另外的一个字段
key1
select
a.key
from
a
left
outer
join
b
on
a.key=b.key
where
b.key1
is
null通过left
semi
join
实现
inSELECT
a.key,
a.val
FROM
a
LEFT
SEMI
JOIN
b
on
(a.key
=
b.key)Left
semi
join
的限制:join条件中右边的表只能出现在join条件中。Hql使用自定义的mapred脚本注意事项:在使用自定义的mapred脚本时,关键字MAP
REDUCE
是语句SELECT
TRANSFORM
(
...
)的语法转换,并不意味着使用MAP关键字时会强制产生一个新的map过程,使用REDUCE关键字时会产生一个red过程。自定义的mapred脚本可以是hql语句完成更为复杂的功能,但是性能比hql语句差了一些,应该尽量避免使用,如有可能,使用UDTF函数来替换自定义的mapred脚本HiveOptimization
join优化
Mapjoin
的限制是无法执行a
FULL/RIGHT
OUTER
JOIN
b,和map
join相关的hive参数:erval
hive.mapjoin.size.key
hive.mapjoin.cache.numrows由于join操作是在where操作之前执行,所以当你在执行join时,where条件并不能起到减少join数据的作用;案例:SELECT
a.val,
b.val
FROM
a
LEFT
OUTER
JOIN
b
ON
(a.key=b.key)
WHERE
a.ds='2009-07-07'
AND
b.ds='2009-07-07'最好修改为:SELECT
a.val,
b.val
FROM
a
LEFT
OUTER
JOIN
b
ON
(a.key=b.key
AND
b.ds='2009-07-07'
AND
a.ds='2009-07-07')在join操作的每一个mapred程序中,hive都会把出现在join语句中相对靠后的表的数据stream化,相对靠前的变的数据缓存在内存中。当然,也可以手动指定stream化的表:SELECT
/*+
STREAMTABLE(a)
*/
a.val,
b.val,
c.val
FROM
a
JOIN
b
ON
(a.key
=
b.key1)
JOIN
c
ON
(c.key
=
b.key1)创建LZO压缩表CREATEEXTERNALTABLEfoo(columnAstring,columnBstring)PARTITIONEDBY(datestring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY"\t"STOREDASINPUTFORMAT"com.hadoop.mapred.DeprecatedLzoTextInputFormat"OUTPUTFORMAT"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"LOCATION'/data/dw/uid/';HiveLzo文件加载流程压缩lzopuid.txt上传hadoopfs-putuid.txt.lzo/data/dw/uid/创建索引hadoopjar/path/to/your/hadoop-lzo.jarpression.lzo.DistributedLzoIndexer/data/dw/uid/uid.txt.lzo生成1000widshadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-mapper'seq100000'-numReduceTasks0-input/user/hadoop/PiEstimator_TMP_3_141592654/in/-output/opt/ids/生成r.pl代码#!/usr/bin/perl-X$i=0;while($i<=10000){
$i++;
print`</dev/urandomtr-dc_A-Z-a-z-0-9|head-c10`."\n\r";}hadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-mapper'cat'-reducer'seq10000'-numReduceTasks10-input/data/-output/data/test3/1.seq10>texthadoopfs-puttest/data/texthadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-mapper'cat'-reducer'seq10000'-numReduceTasks10-input/data/text-output/data/test3/CREATEEXTERNALTABLEtest3(textstring)LOCATION'/data/test3/'Hivevssql
优化策略使用Partition减少扫描数量使用Map端Join配置Reduce数量xml,json提取适用脚本提取,而非使用函数使用INSERTINTOLOCALDIRECTORY‘/home/me/pv_age_sum.dir’,而非适用HiveServer。使用LZO压缩存储数据适用外部表,而非内部表press.output=false,true适用队列管理任务执行生成100亿车牌号hadoopjarhadoop-examples-1.0.3.jarpi10010000生成100个文件hadoopjarcontrib/streaming/hadoop-streaming-1.0.3.jar-numReduceTasks0-filerand.pl-mapperrand.pl-input/user/root/PiEstimator_TMP_3_141592654/in-output/opt/chepai/chepaicreateEXTERNALtablechepai(idbigint)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'collectionitemsterminatedby"\n"storedastextfilelocation'/opt/chepai/';Hive高可用措施健全监控体系使用负载均衡配置队列调度配置重启机制定时清理日志配置队列运行set=ETLselect*fromuid;-D=ETL运维和工具介绍-Cacti
Page
48Hadoop集群汇总监控GangliaHAProxy+Hive网络拓扑QueriesHAProxyHAProxyHiveHiveHiveHiveHadoopHAProxy+Hive高可用集群phpHiveAdmin界面
材料材料:.tw/cloud//downloads/sqoop/查询界面:任务调度/oozie///azkaban/screenshots.php数据交换/p/datax/wiki/DataX%E4%BA%A7%E5%93%81%E8%AF%B4%E6%98%8E//zhuyeqing/ComETL//cdh/3/sqoop/SqoopUserGuide.htmlhadoopwindows版本.tw/cloud/wiki/Hadoop4WinIntroductiontoPigPig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫PigLatin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。PigSystemexecutionplanPigCompilerClusterparsedprogramParserusercross-joboptimizerPigLatinprogramMap-RMRCompilerjoinoutputfilterXf()YIntroductiontoPigPig的主要操作load操作:加载数据foreach操作:循环指定数据集中的所有数据filter操作:根据过滤条件筛选数据,通常和foreach配合使用group操作:分组操作,和sql中的groupby功能一致union操作:联合操作,和sql中的union功能一致join操作:join操作,和sql中的join功能一致store操作:将制定数据集存储至指定目录
IntroductiontoPigPig操作实例Users=LOAD‘users.in’AS(name,age);Fltrd=FILTERUsersbyage>=18andage<=25;
Pages=LOAD‘pages.in’AS(user,url);Jnd=JOINFltrdBYname,PagesBYuser;Grpd=GROUPJndbyurl;Smmd=FOREACHGrpdGENERATEgroup,COUNT(Jnd)ASclicks;Srtd=ORDERSmmdBYclicks;Top100=LIMITSrtd100;STORETop100INTO‘top100sites.out’;BI其他解决方案R+HadoopSqoop最佳实践第六次技术聚会分享HDFS到DBsqoopexport--connectjdbc:oracle:thin:@XXX:1521:XXX--usernameXXXX--passwordXXXXX--export-dir/user/flume/part-r-00000-m1--tableNS_SLLOG_CLIENT_SUM_OS--update-keyACTIVITYTIME,CLIENT_VER,OS--update-modeallowinsert--input-fields-terminated-by'\t'--outdirjobs--package-namecom.uusee.sqoop日志收集——flumeNG1)它是FlumeOG的重构版本,apache来开发管理。2)它变的很简单,Master、zookeeper、collector和WebUI没有了3)简化成了1、source(avro:很简单使用;exec:使用shell命令)2、sink(hdfs、file)3、channel(Memory、disk)FlumeNG——架构图FlumeNG——数据获取1)RPC1、在flume中,Avro客户端使用AVRORPC机制可以发送一个给定的文件
Avro
源:2、$bin/flume-ngavro-client-Hlocalhost-p
41414
-F/usr/logs/log.103、上面的命令将发送的/usr/logs/log.10的内容到
flume源监听端2)Executingcommands1、还有一个exec执行一个给定的命令获得输出的源。一个单一的输出,即“line”。回车('\R')或换行符('\N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重点措施目标对专业的认知六大模块基本知识的认知
- 商场商户管理培训
- 2024年陕西省中考化学真题(A卷)【附答案】
- 宠物打扫培训课件
- 中风的自我治疗方案
- 《纹绣分为哪几种》课件
- 《全文获取途径》课件
- 办公室软件培训活动
- 保安管理规定
- 华为AI盘古大模型研究报告:研究框架
- 多能互补规划
- 天一大联考●皖豫名校联盟2024-2025学年高三上学期10月月考试卷语文答案
- GB/T 44291-2024农村产权流转交易 网络交易平台服务规范
- 全国农业技术推广服务中心公开招聘应届毕业生补充(北京)高频难、易错点500题模拟试题附带答案详解
- 公司研发项目审核管理制度
- 山东省名校考试联盟2024-2025学年高一上学期10月联考数学试卷
- 开展中医诊疗模式创新工作方案
- 《抖音运营》课件-1.短视频与抖音认知基础
- 第一课我的服饰巧搭配(课件)鄂教版劳动六年级上册
- 2024年全国职业院校技能大赛高职组(动物疫病检疫检验赛项)考试题库(含答案)
- DB11 1025-2013 自然排烟系统设计、施工及验收规范
评论
0/150
提交评论