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
Spark读Hbase优化 --手动划分region提高并行数的更多相关文章
- Spark读HBase写MySQL
1 Spark读HBase Spark读HBase黑名单数据,过滤出当日新增userid,并与mysql黑名单表内userid去重后,写入mysql. def main(args: Array[Str ...
- HBase Shell手动移动Region
在生产环境中很有可能有那么几个Region比较大,但是都运行在同一个Regionserver中. 这个时候就需要手动将region移动到负载低的Regionserver中. 步骤: 1.找到要移动的r ...
- IDEA中Spark读Hbase中的数据
import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.io.ImmutableBytesWr ...
- IDEA中 Spark 读Hbase 报错处理:
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] // :: ERROR RecoverableZooKeepe ...
- Spark 读 Hbase
package com.grady import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.c ...
- HBase最佳实践-读性能优化策略
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- spark sql读hbase
项目背景 spark sql读hbase据说官网如今在写,但还没稳定,所以我基于hbase-rdd这个项目进行了一个封装,当中会区分是否为2进制,假设是就在配置文件里指定为#b,如long#b,还实用 ...
- hbase优化之region合并和压缩
HBASE操作:(一般先合并region然后再压缩) 一 .Region合并: merge_region 'regionname1','regionname2' ,'true' --true代表 ...
- spark读HFile对hbase表数据进行分析
要求:计算hasgj表,计算每天新增mac数量. 因为spark直接扫描hbase表,对hbase集群访问量太大,给集群造成压力,这里考虑用spark读取HFile进行数据分析. 1.建立hasgj表 ...
随机推荐
- [Swift]LeetCode144. 二叉树的前序遍历 | Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...
- [Swift]LeetCode1024. 视频拼接 | Video Stitching
You are given a series of video clips from a sporting event that lasted T seconds. These video clip ...
- MySQL数据库导入或者同步大量数据时数据丢失解决方案
相信大家都经常遇到这样的情况,我们在编码的过程中经常需要在调试代码的时候切换到本地的数据库上做修改调试,如果当测试数据库的数据在几十万或者上百万数据的时候,我们无论是通过恢复备份/导入SQL的方式来把 ...
- 使用C# (.NET Core) 实现抽象工厂设计模式 (Abstract Pattern)
本文的概念性内容来自深入浅出设计模式一书. 上一篇文章讲了简单工厂和工厂方法设计模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 文 ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
- Markdown 文档生成工具
之前用了很多Markdown 文档生成工具,发现有几个挺好用的,现在整理出来,方便大家快速学习. loppo: 非常简单的静态站点生成器 idoc:简单的文档生成工具 gitbook:大名鼎鼎的文档协 ...
- scrapy pipelines导出各种格式
scrapy在使用pipelines的时候,我们经常导出csv,json.jsonlines等等格式.每次都需要写一个类去导出,很麻烦. 这里我整理一个pipeline文件,支持多种格式的. # -* ...
- Linux基础知识第三讲,拷贝文件跟移动文件命令
目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...
- kubernetes进阶之七:Service
1.概述 Service也是Kubernetes里的最核心的资源对象之一,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”,之前我们所说的Pod.RC等资源 ...
- 痞子衡嵌入式:微控制器CPU性能测试基准(EEMBC-CoreMark)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是微控制器CPU性能测试基准CoreMark. 在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone.MIPS.Co ...