Hive 性能测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 慎用order by • 如果实在是需要用到order by ,可以加
上limit n;这样也可以避免同一个reduce 去处理大量的数据
ቤተ መጻሕፍቲ ባይዱ
Hive查询的优化2
• 数据量大的表和数据量小的表做关联的
时候,把数据量小的表放到join前面。
• 原因是在 Join 操作的 Reduce 阶段,位
于 Join 操作符左边的表的内容会被加载 进内存,将条目少的表放在左边,可以 有效减少发生内存溢出错误的几率。
Hive操作Hbase
• select count(1)
from HIVE_CDR_201304 6.5分钟
• 2000万行
Hive的优势
• 分析统计时开发周期短,上手容易,很
方便利用SQL实现复杂查询
更专注于业务实现
• 脚本便于维护,更少的bug,更快的调试,
结论
• Hive执行统计时,大部分非嵌套语句时
更大数据集的测试
• 数据量:0.5TB • 16亿行数据
count(*)
• •
• • • •
MapReduce Jobs Launched: Job 0: Map: 7100 Reduce: 1 HDFS Read: 473470910881 HDFS Write: 11 SUCCESS Total MapReduce CPU Time Spent: 0 msec OK 1613862317
•Join条件能相同尽量相同
Hive查询的优化3
•INSERT OVERWRITE TABLE pv_users • SELECT pv.pageid, u.age FROM page_view p • JOIN user u ON (erid = erid) • JOIN newuser x ON (erid = erid); • •
from hive_test where substr(resptime,0,10) < "20131010" and length(parse_url(url, 'HOST'))>1 ##parse_url(url, 'HOST') 分离出url主干,如 group by mobile, lac , ci, imei ,flowtype ,substr(resptime,0,10), parse_url(url, 'HOST');
• •
• • • •
insert overwrite table test_table1
select mobile, lac , ci, imei ,flowtype ,substr(resptime,0,10), parse_url(url, 'HOST'), sum(up), sum(down)
•
• • •
•
• • • • • • • • • •
13/09/25 16:45:44 WARN streaming.StreamJob: -jobconf option is deprecated, please use -D instead.
packageJobJar: [mapper.sh, reducer.sh, combiner.sh, /tmp/hadoop-root/hadoop-unjar8448429247117545510/] [] /tmp/streamjob6698707843960768352.jar tmpDir=null 13/09/25 16:45:44 WARN snappy.LoadSnappy: Snappy native library is available 13/09/25 16:45:44 INFO util.NativeCodeLoader: Loaded the native-hadoop library 13/09/25 16:45:44 INFO snappy.LoadSnappy: Snappy native library loaded 13/09/25 16:45:44 INFO mapred.FileInputFormat: Total input paths to process : 121 13/09/25 16:45:45 INFO streaming.StreamJob: getLocalDirs(): [/mapred/local] 13/09/25 16:45:45 INFO streaming.StreamJob: Running job: job_201209091642_0039 13/09/25 16:45:45 INFO streaming.StreamJob: To kill this job, run: 13/09/25 16:45:45 INFO streaming.StreamJob: /usr/lib/hadoop-0.20/bin/hadoop job -Dmapred.job.tracker=node11:54311 -kill job_201209091642_0039 13/09/25 16:45:45 INFO streaming.StreamJob: Tracking URL: http://node11:50030/jobdetails.jsp?jobid=job_201209091642_0039
Hive join测试
• • •
select count(distint l.mobile) FROM mobile_list l JOIN hive_test h ON(l.mobile = h.mobile)
• 左侧小表连接 字典表100行 • 执行一次mapreduce 8分钟
Hive 字符串函数测试
Hive查询的优化4
• join时,将where写在on条件里面
•
这样会预先在 join 阶段过滤的,而不是等到join完成之后再在结果数据 中删选过滤
• • • • •
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')
• 执行一次全表扫描mapreduce 8.5分钟
Hive操作Hbase
• • • • • • • • • • • • • • •
create external table HIVE_CDR_201304( key struct <mobile:string, reqtime:string, hash:string>,
Hadoop Streaming 测 试
• map reduce 由awk写成,全表COUNT
(*)1阶段mapreduce 8分钟
• map reduce 由awk写成,全表group
distinct操作,计算分省用户数,上行总 流量,下行总流量,1次mapreduce 总 时长 8.5分钟
• • •
•
•
13/09/25 16:45:46 INFO streaming.StreamJob: map 0% reduce 0%
13/09/25 16:45:58 INFO streaming.StreamJob: map 1% reduce 0%
Hive 建立外部表
• •
create external table hive_test(
Hive性能测试
大数据公司Hive的应 用情况
• 淘宝90%的业务跑在Hive上面 • 暴风影音95%以上都是跑在Hive上面 • Facebook Hive开源作者,大部分分析基
于Hive
测试环境
• 8个节点 * CPU 2.4G 2cores/8G内存
/500G
• 0.83亿行/共24G上网流量详单记录 • hdfs://node11/data/input3/
• • •
Hive count测试
• select count(*) from hive_test
• 执行一次全表扫描mapreduce 5.7分钟
Hive group测试
• INSERT OVERWRITE TABLE
test_group
• select mobile, sum(up),sum(down) • from hive_test • group by mobile; • 执行一次全表扫描mapreduce 6分钟
对于一条语句中有多个 Join 的情况,如果 Join 的 key 相同,这里都用 了erid,不管有多少个表,都会则会合并为一个 Map-Reduce 任务,而 不是 ‘n’ 个 。在做 OUTER JOIN 的时候也是一样 。所以,join的时候 条 件能相同就用相同的; 小表在前的原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边 的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内 存溢出错误的几率。
均只产生一阶段的mapreduce,HiveQL 转换为java mapreduce,性能优于其他 语言编写的mapreduce。 生性能压力的地方,需要合理使用。 HDFS,官方说法,性能差3~4倍。
• Hive 表连接、order by 排序、嵌套是产
• 可以操作Hbase,但性能不如直接放于
Hive查询的优化1
mobile string, lac string, ci string, imei string, flowType string, begintime string, endtime string, resptime string, up string, down string, total string, ratType string, srcip string, dstip string, status string, ua string, apn string, imsi string, sgsn string, ggsn string, conType string, sport string, dport string, flag string, merges string, url string, referer string) row format delimited fields terminated by ',' stored as textfile location '/data/input3/';
> -combiner combiner.sh \ > -file mapper.sh \ > -file reducer.sh \ > -file combiner.sh \ > -input /data/input3/ \ > -output /user/root/tmp_out66/ \ > -jobconf stream.non.zero.exit.is.failure=false
info struct
<lac:string, ci:string, imei:string, flowType:string, resptime:string,up:string,down:string, ratType:string, status:string, apn:string, imsi:string, url:string,flag:string,merges:string, province:string,city:string, srcip:string, dstip:string,sgsn:string, ggsn:string,sport:string, dport:string> ) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cdr:s") tblproperties(""="CDR_201304", "colelction.delim"="|");
Hive 排序测试
• INSERT OVERWRITE TABLE
test_group
• select mobile, sum(up),sum(down) • from hive_test • group by mobile • order by mobile; • 执行二次mapreduce 11分钟
上limit n;这样也可以避免同一个reduce 去处理大量的数据
ቤተ መጻሕፍቲ ባይዱ
Hive查询的优化2
• 数据量大的表和数据量小的表做关联的
时候,把数据量小的表放到join前面。
• 原因是在 Join 操作的 Reduce 阶段,位
于 Join 操作符左边的表的内容会被加载 进内存,将条目少的表放在左边,可以 有效减少发生内存溢出错误的几率。
Hive操作Hbase
• select count(1)
from HIVE_CDR_201304 6.5分钟
• 2000万行
Hive的优势
• 分析统计时开发周期短,上手容易,很
方便利用SQL实现复杂查询
更专注于业务实现
• 脚本便于维护,更少的bug,更快的调试,
结论
• Hive执行统计时,大部分非嵌套语句时
更大数据集的测试
• 数据量:0.5TB • 16亿行数据
count(*)
• •
• • • •
MapReduce Jobs Launched: Job 0: Map: 7100 Reduce: 1 HDFS Read: 473470910881 HDFS Write: 11 SUCCESS Total MapReduce CPU Time Spent: 0 msec OK 1613862317
•Join条件能相同尽量相同
Hive查询的优化3
•INSERT OVERWRITE TABLE pv_users • SELECT pv.pageid, u.age FROM page_view p • JOIN user u ON (erid = erid) • JOIN newuser x ON (erid = erid); • •
from hive_test where substr(resptime,0,10) < "20131010" and length(parse_url(url, 'HOST'))>1 ##parse_url(url, 'HOST') 分离出url主干,如 group by mobile, lac , ci, imei ,flowtype ,substr(resptime,0,10), parse_url(url, 'HOST');
• •
• • • •
insert overwrite table test_table1
select mobile, lac , ci, imei ,flowtype ,substr(resptime,0,10), parse_url(url, 'HOST'), sum(up), sum(down)
•
• • •
•
• • • • • • • • • •
13/09/25 16:45:44 WARN streaming.StreamJob: -jobconf option is deprecated, please use -D instead.
packageJobJar: [mapper.sh, reducer.sh, combiner.sh, /tmp/hadoop-root/hadoop-unjar8448429247117545510/] [] /tmp/streamjob6698707843960768352.jar tmpDir=null 13/09/25 16:45:44 WARN snappy.LoadSnappy: Snappy native library is available 13/09/25 16:45:44 INFO util.NativeCodeLoader: Loaded the native-hadoop library 13/09/25 16:45:44 INFO snappy.LoadSnappy: Snappy native library loaded 13/09/25 16:45:44 INFO mapred.FileInputFormat: Total input paths to process : 121 13/09/25 16:45:45 INFO streaming.StreamJob: getLocalDirs(): [/mapred/local] 13/09/25 16:45:45 INFO streaming.StreamJob: Running job: job_201209091642_0039 13/09/25 16:45:45 INFO streaming.StreamJob: To kill this job, run: 13/09/25 16:45:45 INFO streaming.StreamJob: /usr/lib/hadoop-0.20/bin/hadoop job -Dmapred.job.tracker=node11:54311 -kill job_201209091642_0039 13/09/25 16:45:45 INFO streaming.StreamJob: Tracking URL: http://node11:50030/jobdetails.jsp?jobid=job_201209091642_0039
Hive join测试
• • •
select count(distint l.mobile) FROM mobile_list l JOIN hive_test h ON(l.mobile = h.mobile)
• 左侧小表连接 字典表100行 • 执行一次mapreduce 8分钟
Hive 字符串函数测试
Hive查询的优化4
• join时,将where写在on条件里面
•
这样会预先在 join 阶段过滤的,而不是等到join完成之后再在结果数据 中删选过滤
• • • • •
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')
• 执行一次全表扫描mapreduce 8.5分钟
Hive操作Hbase
• • • • • • • • • • • • • • •
create external table HIVE_CDR_201304( key struct <mobile:string, reqtime:string, hash:string>,
Hadoop Streaming 测 试
• map reduce 由awk写成,全表COUNT
(*)1阶段mapreduce 8分钟
• map reduce 由awk写成,全表group
distinct操作,计算分省用户数,上行总 流量,下行总流量,1次mapreduce 总 时长 8.5分钟
• • •
•
•
13/09/25 16:45:46 INFO streaming.StreamJob: map 0% reduce 0%
13/09/25 16:45:58 INFO streaming.StreamJob: map 1% reduce 0%
Hive 建立外部表
• •
create external table hive_test(
Hive性能测试
大数据公司Hive的应 用情况
• 淘宝90%的业务跑在Hive上面 • 暴风影音95%以上都是跑在Hive上面 • Facebook Hive开源作者,大部分分析基
于Hive
测试环境
• 8个节点 * CPU 2.4G 2cores/8G内存
/500G
• 0.83亿行/共24G上网流量详单记录 • hdfs://node11/data/input3/
• • •
Hive count测试
• select count(*) from hive_test
• 执行一次全表扫描mapreduce 5.7分钟
Hive group测试
• INSERT OVERWRITE TABLE
test_group
• select mobile, sum(up),sum(down) • from hive_test • group by mobile; • 执行一次全表扫描mapreduce 6分钟
对于一条语句中有多个 Join 的情况,如果 Join 的 key 相同,这里都用 了erid,不管有多少个表,都会则会合并为一个 Map-Reduce 任务,而 不是 ‘n’ 个 。在做 OUTER JOIN 的时候也是一样 。所以,join的时候 条 件能相同就用相同的; 小表在前的原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边 的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内 存溢出错误的几率。
均只产生一阶段的mapreduce,HiveQL 转换为java mapreduce,性能优于其他 语言编写的mapreduce。 生性能压力的地方,需要合理使用。 HDFS,官方说法,性能差3~4倍。
• Hive 表连接、order by 排序、嵌套是产
• 可以操作Hbase,但性能不如直接放于
Hive查询的优化1
mobile string, lac string, ci string, imei string, flowType string, begintime string, endtime string, resptime string, up string, down string, total string, ratType string, srcip string, dstip string, status string, ua string, apn string, imsi string, sgsn string, ggsn string, conType string, sport string, dport string, flag string, merges string, url string, referer string) row format delimited fields terminated by ',' stored as textfile location '/data/input3/';
> -combiner combiner.sh \ > -file mapper.sh \ > -file reducer.sh \ > -file combiner.sh \ > -input /data/input3/ \ > -output /user/root/tmp_out66/ \ > -jobconf stream.non.zero.exit.is.failure=false
info struct
<lac:string, ci:string, imei:string, flowType:string, resptime:string,up:string,down:string, ratType:string, status:string, apn:string, imsi:string, url:string,flag:string,merges:string, province:string,city:string, srcip:string, dstip:string,sgsn:string, ggsn:string,sport:string, dport:string> ) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cdr:s") tblproperties(""="CDR_201304", "colelction.delim"="|");
Hive 排序测试
• INSERT OVERWRITE TABLE
test_group
• select mobile, sum(up),sum(down) • from hive_test • group by mobile • order by mobile; • 执行二次mapreduce 11分钟