`

解决使用 HBase Bulk Loading 工具出现超过32个hfile的问题,针对一个region的family

阅读更多
导入指标时遇到 importtsv.bulk.output 目录输出的hfile文件个数超过32个时,需要分为多步操作,

第一步: 先把超过的文件个数(bulk.output的目录下的hfile文件个数保持在32之内)移到别的目录下。

第二步: 执行 hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles output wordcount 把output目录下的hfile文件导入到 "wordcount" hbase表中.

第三步: 把之前移到别的目录下的文件重新移入至 output (bulk.output 该目录仍然不能超过32个hfile, 如果多个,请反复操作该步) 目录, 执行之前 第二步 直到所有文件导入至 "wordcount" hbase表

@黄坤 通过执行 completebulkload 工具的错误日志输出:

----------------------------------------

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.hbase.mapreduce.Driver.main(Driver.java:55)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.io.IOException: Trying to load more than 32 hfiles to one family of one region
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.doBulkLoad(LoadIncrementalHFiles.java:377)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.run(LoadIncrementalHFiles.java:960)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.main(LoadIncrementalHFiles.java:967)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
        at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
        at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:152)
        ... 11 more
------------------------------------------

追踪源码发现如下代码 : this.maxFilesPerRegionPerFamily = conf.getInt("hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily", 32);

通过在执行加载数据时添加如下参数: ” -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=64 (64匹配 bulk.output输出目录下 hfile的文件个数) “ 即可一次导入数据至hbase,无需多次操作

例如执行命令:

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=64 output wordcount

or

sudo -u hbase hadoop jar $HBASE_HOME/hbase-server-1.0.0-cdh5.4.0.jar completebulkload -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=64 output wordcount


测试重现思路:

根据之前的描述,我们更改 "panda"集群的hbase RegionServer 的 hbase.hregion.max.filesize 的值 或在执行 importtvs 生成hfile工具是设定  -Dhbase.hregion.max.filesize=20971520 参数即可. 具体测试验证步骤:

第一步:设置 hbase.hregion.max.filesize 该值由10G 更改为 20MB.

第二步:准备导入hbase的文件大小是 2G (目的执行 importtvs 产生超过 32个hfile ) ( 计算方式: 20MB * 32 ( completebulkload 工具默认的hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily值是32) )


执行 importtvs 命令运行时设置 hbase.hregion.max.filesize 的文件大小,只需添加 -Dhbase.hregion.max.filesize=20971520 (20971520 == 20MB) 参数值即可 也可以通过设置集群中RegionServer 的 hbase.hregion.max.filesize 的值 ,

执行importtvs命令后生成多少个文件通过 读入文件的大小(File Input Format Counters / Bytes Read)/hbase.hregion.max.filesize 设定的值 = 得到hfile文件输出的个数.

hadoop jar $HBASE_HOME/hbase-server-1.0.0-cdh5.4.0.jar importtsv -Dimporttsv.bulk.output=output1 -Dhbase.hregion.max.filesize=20971520 -Dimporttsv.columns=HBASE_ROW_KEY,f:data wordcountexample 2013-09-25.csv
分享到:
评论

相关推荐

    How-to: Use HBase Bulk Loading, and Why

    为了解决这个问题,HBase提供了批量加载(Bulk Loading)机制,它允许我们将数据预先转换成HFile格式,然后一次性地快速加载到表中,极大地提高了数据导入速度。 批量加载的基本流程如下: 1. **生成SequenceFile*...

    MR程序Bulkload数据到hbase

    4. **HFile移动**:使用HBase的`importtsv`命令或自定义工具,将HDFS上的HFile移动到HBase的`-ROOT-`和`.META.`表的region服务器上,或者直接将HFile路径添加到HBase的表中。 5. **数据加载**:一旦HFile被正确地...

    hbase用于查询客户端工具

    6. **HBase Console**:这是HBase提供的一个简单的Web界面,用于查看表的信息、region分布和集群状态。它不支持复杂的查询,但对于快速检查和监控HBase实例非常有用。 7. **HBase MapReduce**:MapReduce是Hadoop...

    HBase的图形化管理工具/Hbase的GUI工具

    由于网上下的不支持最新的hadoop,hbase 版本自己稍微修改了下,支持最新版本HBase的图形化管理工具,目前修改改为hadoop-2.7.1版本,hbase-1.1.2版本,依赖可以自己切换,源代码已经包括再里边了,如想修改直接修改...

    HBASERegion数量增多问题描述及解决方案.docx

    【HBASERegion数量增多问题描述及解决方案】 在HBase分布式数据库中,Region是表数据的基本存储单元,它将表的数据按照ROWKEY的范围进行分割。随着数据的增长,一个Region会分裂成两个,以此来确保数据的均衡分布。...

    hbase客户端连接工具winutils-2.2.0.zip

    5. **配置HBase配置文件**:创建一个名为`hbase-site.xml`的配置文件,包含HBase集群的地址(如`hbase.zookeeper.quorum`)和其他必要的参数,例如`hbase.master`和`hbase.rootdir`。 6. **编写Java代码**:使用...

    Hbase 可视化客户端工具(非phoenix连接)

    同时,它可能会实时显示HBase集群的状态,包括节点健康状况、内存使用情况、表和Region分布等,帮助管理员及时发现并解决问题。 对于数据分析,该工具可能还提供了高级查询功能,如过滤、聚合、排序等,甚至支持...

    hbase+ycsb工具

    `ycsb-hbase12-binding-0.14.0`是YCSB针对HBase的一个绑定包,版本号0.14.0。这个版本的绑定包允许用户将YCSB的工作负载直接应用于HBase,进行性能测试。其中,“12”可能指的是HBase的某个特定版本,如0.98.x或1.2....

    Hbase1.x可视化客户端工具

    HBase,作为Apache Hadoop生态系统中的一个分布式列式数据库,为大数据存储提供了高效、可扩展的解决方案。在HBase 1.x版本中,为了便于用户更直观地管理和操作HBase表,开发了一系列的可视化客户端工具。这些工具...

    hbase安装,节点添加,移除,常见问题解决

    为了更好地管理和监控HBase集群,推荐使用HBase自带的Web UI或者第三方工具如Ambari、Cloudera Manager等。同时,定期进行健康检查,监控日志,以及对集群性能进行调优都是运维过程中的重要环节。 总之,HBase的...

    java解决hive快速导数据到Hbase代码

    5. **执行MapReduce作业**:编写一个MapReduce作业,该作业使用HFileOutputFormat作为输出格式,将上一步骤中写入HDFS的数据转化为HBase可读的HFile格式。 6. **加载HFiles**:最后,通过HBase的Admin API或者HBase...

    支持最新版本HBase的图形化管理工具/Hbase的GUI工具

    在大数据领域,HBase作为一款高可靠性、高性能、分布式的列式存储系统,被广泛用于处理海量数据。...对于需要管理和维护HBase的团队来说,这样的工具无疑是一个宝贵的资源,可以显著提高工作效率,减少出错的可能性。

    Hbase几种入库方式

    多线程入库是指同时使用多个线程将数据写入到 Hbase 中。这种方式的优点是可以提高写入速度,缺点是需要编写多线程程序,增加了程序的复杂度。 小结 Hbase 入库方式的选择取决于具体的业务需求和数据规模。预先...

    hbase 数据库

    2. **下载HBase**:访问Apache官方网站下载HBase的对应版本,如“hbase-1.2.1”,这通常是一个tar.gz或zip格式的压缩包。 3. **解压与配置**:将下载的压缩包解压到期望的目录,然后配置环境变量。在`~/.bashrc`或`...

    HbaseTemplate 操作hbase

    在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...

    基于注解的hbase orm小工具,目前比较简单

    本篇文章将详细介绍一个基于注解的HBase ORM小工具,帮助你更好地理解和应用。 **ORM简介** ORM,全称Object-Relational Mapping,是将关系数据库的数据映射到对象模型的一种技术。它简化了数据库与程序之间的交互...

    hadoop mr file2hfile2hbase

    3. **Bulk Load**:使用HBase的`importtsv`工具或者自定义程序,将HFile批量导入到已创建的表中。这一步通常比单个Put操作快得多,因为它利用了HBase的RegionServer内部机制直接写入HFile,避免了网络传输的开销。 ...

    hbase0.94java源代码

    HBase是Apache Hadoop生态系统中的一个分布式、高性能、版本化、列族式数据库,它主要设计用于处理海量数据。在0.94版本中,HBase已经相当成熟,提供了稳定性和性能上的优化。这个源代码包是针对Java开发者的宝贵...

Global site tag (gtag.js) - Google Analytics