Hadoop集群_第14期副刊_Hive性能优化_V1.0.pdfVIP

Hadoop集群_第14期副刊_Hive性能优化_V1.0.pdf

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
创建时间:2012/3/29 修改时间:2012/3/29 修改次数:0 Hadoop 集群(第14 期副刊) ——Hive 性能优化 1、性能低下根源 Hive 性能优化时,把HiveQL 当做Map/Reduce 程序来读,即从Map/Reduce 的运行角 度来考虑优化性能,从更底层思考如何优化运算性能,而不仅仅局限于逻辑代码的替换层面。 RAC (Real Application Cluster )真正应用集群就像一辆机动灵活的小货车,响应快, Hadoop 就像吞吐量巨大的轮船,启动开销大,如果每次只做小数量的输入输出,利用率将 会很低。所以用好Hadoop 的首要任务是增大每次任务所搭载的数据量。 Hadoop 的核心能力是pariton 和sort,因而这也是优化的根本。 观察Hadoop 处理数据的过程,有几个显著的特征:  数据的大规模并不是负载重点,造成运行压力过大是因为运行数据的倾斜。  jobs 数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关 联多次汇总,产生十几个jobs ,将会须要30 分钟以上的时间且大部分时间被用于 作业分配,初始化和数据输出。Map/Reduce 作业初始化的时间是比较耗费时间资 源的一个部分。  在使用sum,count,max ,min 等函数时,Hadoop Map 端对表中数据的汇总去重, 能有效的解决数据倾斜问题。  count (distinct )效率较低,因为容易产生数据倾斜问题,如果是多count (distinct ) 效率更低。  数据倾斜是导致效率大幅降低的主要原因,可以采用多一次Map/Reduce 的方法, 避免倾斜。 结论:避实就虚,用job 数的增加,输入量的增加,占用更多存储空间,充分利用空闲 CPU 等各种方法,分解数据倾斜造成的负担。 2 、从配置角度优化 Hive 系统内部已针对不同的查询预设定了优化方法,用户可以通过调整配置进行控制, 以下举例介绍部分优化的策略以及优化控制选项。 2.1 列裁剪 Hive 在读数据的时候,可以只读取查询中所需要用到的列,而忽略其它列。 例如,若有以下查询: Select a,b From Q Where e<10; 在实施此项查询中,Q 表有 5 列(a,b ,c,d,e ),Hive 只读取查询逻辑中真实需要 的3 列a、b 、e,而忽略列c,d ;这样做节省了读取开销,中间表存储开销和数据整合开销。 河北工业大学——软件工程与理论实验室 整理:虾皮 1 创建时间:2012/3/29 修改时间:2012/3/29 修改次数:0 列裁剪所对应的参数项为:hive.optimize.cp=true (默认值为真) 2.2 分区裁剪 可以在查询的过程中减少不必要的分区。 例如,若有以下查询: Select * From (Select a1,Count(1) From T Group By a1) subq Where subq.prtn=100; Select * From T1 Join (Select * From T2) subq On (T1.a1=subq.a2) Where subq.prtn=100; 此查询语句若将“subq.prtn=100 ”条件放入子查询中更为高效,可以减少读入的分区 数目。 Hive 自动执行这种裁剪优化。 分区参数为:hive.optimize.pruner=true (默认值为真) 2.3 Join 操作 在编写带有join 操作的代码语句时,应该将条目少的表/子查询放在Join 操作符的左边。 因为在Reduce 阶段,位于Join 操作符左边的表的内容会被加载进内存,载入条目较少的表 可以有效减少OOM (out of memory )即内存溢出。所以对于同一个key 来说,对应的value 值小的放前,大的放后,这便是“小表放前

文档评论(0)

东山书苑 + 关注
实名认证
文档贡献者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档