• Spark读Hbase优化 --手动划分region提高并行数


    一. Hbase的region

    我们先简单介绍下Hbase的架构和Hbase的region:

    从物理集群的角度看,Hbase集群中,由一个Hmaster管理多个HRegionServer,其中每个HRegionServer都对应一台物理机器,一台HRegionServer服务器上又可以有多个Hregion(以下简称region)。要读取一个数据的时候,首先要先找到存放这个数据的region。而Spark在读取Hbase的时候,读取的Rdd会根据Hbase的region数量划分stage。所以当region存储设置得比较大导致region比较少,而spark的cpu core又比较多的时候,就会出现无法充分利用spark集群所有cpu core的情况。

    我们再从逻辑表结构的角度看看Hbase表和region的关系。

    • Hbase是通过把数据分配到一定数量的region来达到负载均衡的。一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个regionServer中。在自动split策略中,当一个region达到一定的大小就会自动split成两个region。
    • Region由一个或者多个Store组成,每个store保存一个columns family,每个Strore又由一个memStore和0至多个StoreFile组成。memStore存储在内存中,StoreFile存储在HDFS上
    • region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上,但并不是存储的最小单元。

    二. Spark读取Hbase优化及region手动拆分

    在用spark的时候,spark正是根据hbase有多少个region来划分stage。也就是说region划分得太少会导致spark读取时的并发度太低,浪费性能。但如果region数目太多就会造成读写性能下降,也会增加ZooKeeper的负担。所以设置每个region的大小就很关键了。

    自0.94.0版本以来,split还有三种策略可以选择,不过一般使用默认的分区策略就可以满足需求,我们要修改的是会触发region分区的存储容量大小。

    而在0.94.0版本中,默认的region大小为10G,就是说当存储的数据达到10G的时候,就会触发region分区操作。有时候这个值可能太大,这时候就需要修改配置了。我们可以在HBASE_HOME/conf/hbase-site.xml文件中,增加如下配置:

    <property> 
    <name>hbase.hregion.max.filesize</name> 
    <value>536870912</value>
    </property>
    

    其中的value值就是你要修改的触发region分区的大小,要注意这个值是以bit为单位的,这里是将region文件的大小改为512m。

    修改之后我们就可以手动split region了,手动分区会自动根据这个新的配置值大小,将region已经存储起来的数据进行再次进行拆分。

    我们可以在hbase shell中使用split来进行操作,有以下几种方式可以进行手动拆分。

    split ‘tableName’ 
    split ‘namespace:tableName’ 
    split ‘regionName’ # format: ‘tableName,startKey,id’ 
    split ‘tableName’, ‘splitKey’ 
    split ‘regionName’, ‘splitKey’
    

    这里使用的是split‘namespace:tableName’这种方式。其中tableName自不必多说,就是要拆分的表名,namespace可以在hbase的web界面中查看,一般会是default。

    使用命令之后稍等一会,hbase会根据新的region文件大小去split,最终结果可以在web-ui的"table Details"一栏,点击具体table查看。

    以上~


    推荐阅读:
    Spark DataFrame 的 groupBy vs groupByKey
    spark RDD,reduceByKey vs groupByKey

  • 相关阅读:
    关于jstl taglib的错误 Can not find the tag library descriptor for “http://java.sun.com/jstl/core”
    Hibernate复合主键的注解
    最详细的Log4j使用教程
    Ajax 完整教程 (转)
    Servlet3.0学习总结(一)——使用注解标注Servlet
    掌握Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构
    web.xml文件的作用及基本配置
    Axis 生成客户端client stub文件
    HTML5必须知道的那些事
    XFire创建WebService实例应用
  • 原文地址:https://www.cnblogs.com/listenfwind/p/10122838.html
Copyright © 2020-2023  润新知