关于hbase、spark、hive使用时的优化问题

一、Hbase的优化

1、JVM优化:

1)如:HBase RegionServer 的 Java 配置选项

-XX:+UseParNewGC (设置年轻代为并行收集)-XX:+UseConcMarkSweepGC(使用CMS内存收集) -XX:CMSInitiatingOccupancyFraction=70(使用cms作为垃圾回收使用70%后开始CMS收集) -XX:+CMSParallelRemarkEnabled(降低标记停顿) -XX:+UseCompressedOops (压缩指针,解决内存占用)

2)另外设置合理的zookeeper.session.timeout,默认3分钟(GC回收时间如果超过这个值,zk认为宕机regionserver下线)

2、读写性能优化:

1)HTable.setAutoFlushTo(false)关闭自动刷新,避免一个put就执行更新。开启缓存、客户端达到阈值批量提交给RS。

2)对于日志数据可以临时关闭WAL增加性能。

3)建议少的列族(最优不超过3)原因1 多个列族意味着多个memstore,内存使用大效率低。原因2 假设列族1 数据量大,列族2数据量很少,region分裂时两个都会分裂,造成列族2分裂到不同的多个region上造成查询效率低。

4)设置Bloomfilter提升读写性能定位在那个hfile上r;

5)设置hbase压缩。

6)设置hbase.regionserver.handler.count处理RPC线程数,默认10,不是越大越好(OOM)

7)在离线批量读取请求时设置禁用缓存,scan.setBlockCache(false)

8)region拆分:rowkey设d计预分区,保证散列,读写压力均衡

二、Spark优化

1、预估好资源使用情况,通过submmit时的配置参数申请资源。根据core根据资源设置合理的并行度

2、注意数据倾斜,在shuffle阶段,如distinct,groupbykey,join,repartition等,看是在那个stage,那个task。抽样数据,确定是什么key导致,可以通过hive预处理聚合,或者过滤这些key,单独计算;或者预处理采用两步聚合,比如key前加个随机数,聚合一次,去掉随机数再聚合;

3、另外大表join小表情况采用mapjoin(broadcast+map),

4、算子的使用,了解执行原理,比如reducebykey对比groupbykey的效果,repartion对比Coalesce,以及map和mappartition等等,对于可复用的RDD使用cache,persist或者checkpoint等缓存,以及尽量减少shuffle。

三、hive优化

1、排序:orderby,sortby等几种类型排序的选择(详细见发布的另外一篇文章)

2、存储类型优化:详细见:快速理解Hive的数据存储格式及mapreduce底层原理

3、根据数据量设置合理的map、reduce数量

4、其他:如查询的过滤条件必须加入分区筛选, join操作对于大表关联小表时采用map join,对于普通量级别的数据采用即席查询的mpp引擎(presto,impala等等)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介 HBase是高可靠性,高性能,面向列,可伸缩的分布式存储系统,利用HBase技术可在廉价PC Serve...
    九世的猫阅读 6,729评论 1 6
  • 【什么是大数据、大数据技术】 大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法在合理时间内通过传统的应...
    kimibob阅读 7,756评论 0 51
  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 9,431评论 3 17
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,192评论 2 89
  • github链接 针对Hive的优化主要有以下几个方面: map reduce file format shuff...
    zoyanhui阅读 11,457评论 2 33

友情链接更多精彩内容