bulk-load 装载HDFS数据到HBase
2023-09-27 14:26:55 时间
bulk-load的作用是用mapreduce的方式将hdfs上的文件装载到hbase中,对于海量数据装载入hbase非常有用,参考http://hbase.apache.org/docs/r0.89.20100621/bulk-loads.html:
hbase提供了现成的程序将hdfs上的文件导入hbase,即bulk-load方式。它包括两个步骤(也可以一次完成):
1 将文件包装成hfile,hadoop jar /path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
比如:
执行
将会启动mapreduce程序在hdfs上生成t8这张表,它的rowkey分别为1 3 5 7,对应的value为2 4 6 8
注意,源文件默认以"\t"为分割符,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割
2 在上一步中,如果设置了输出目录,如
那么t8表还暂时不会生成,只是将hfile输出到tmp文件夹下,我们可以查看tmp:
然后执行hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable将这个输出目录中的hfile转移到对应的region中,这一步因为只是mv,所以相当快。如:
hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8
然后
此时己经生成了表t8
注意,如果数据特别大,而表中原来就有region,那么会执行切分工作,查找数据对应的region并装载
程序使用中注意:
1 因为是执行hadoop程序,不会自动查找hbase的config路径,也就找不到hbase的环境变量。因此需要将hbase-site.xml加入到hadoop-conf变量中
2 还需要将hbase/lib中的jar包放入classpath中
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中,因为在那一步时甚至不会读取hbase-site.xml,否则会连不上zookeeper
hbase提供了现成的程序将hdfs上的文件导入hbase,即bulk-load方式。它包括两个步骤(也可以一次完成):
1 将文件包装成hfile,hadoop jar /path/to/hbase.jar importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
比如:
- hadoop dfs -cat test/1
- 1 2
- 3 4
- 5 6
- 7 8
执行
- hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test
将会启动mapreduce程序在hdfs上生成t8这张表,它的rowkey分别为1 3 5 7,对应的value为2 4 6 8
注意,源文件默认以"\t"为分割符,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割
2 在上一步中,如果设置了输出目录,如
- hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test
那么t8表还暂时不会生成,只是将hfile输出到tmp文件夹下,我们可以查看tmp:
- hadoop dfs -du tmp
- Found 3 items
- 0 hdfs://namenode:9000/user/test/tmp/_SUCCESS
- 65254 hdfs://namenode:9000/user/test/tmp/_logs
- 462 hdfs://namenode:9000/user/test/tmp/f1
然后执行hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable将这个输出目录中的hfile转移到对应的region中,这一步因为只是mv,所以相当快。如:
hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8
然后
- hadoop dfs -du /hbase/t8/c408963c084d328490cc2f809ade9428
- Found 4 items
- 124 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.oldlogs
- 692 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.regioninfo
- 0 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/.tmp
- 462 hdfs://namenode:9000/hbase/t8/c408963c084d328490cc2f809ade9428/f1
此时己经生成了表t8
注意,如果数据特别大,而表中原来就有region,那么会执行切分工作,查找数据对应的region并装载
程序使用中注意:
1 因为是执行hadoop程序,不会自动查找hbase的config路径,也就找不到hbase的环境变量。因此需要将hbase-site.xml加入到hadoop-conf变量中
2 还需要将hbase/lib中的jar包放入classpath中
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中,因为在那一步时甚至不会读取hbase-site.xml,否则会连不上zookeeper
相关文章
- 【解决】hive与hbase表结合级联查询的问题
- Spark 读取 Hbase 优化 --手动划分 region 提升并行数
- 流式大数据计算实践(5)----HBase使用&SpringBoot集成
- HBase学习笔记——概念及原理
- 【大数据】HBase启动
- 【大数据】HBase环境
- 《HBase权威指南》一1.1 海量数据的黎明
- HBase(一)HBase入门简介
- Apache NiFi之Kafka流数据到HBase
- Scala操作Hbase空指针异常java.lang.NullPointerException处理
- HBase源码实战:BufferedMutator
- HBase BulkLoad批量写入数据实战
- Hbase之Spark通过BlukLoad的方式批量加载数据到HBase中
- 应用Flume+HBase采集和存储日志数据
- 用Spark查询HBase中的表数据
- Hbase的SQL接口之Phoenix使用心得
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
- 大数据查询——HBase读写设计与实践--转
- 用hive外部表访问hbase数据
- 【HBase】HBase系列之HBase集成Phoenix及简单使用
- windows环境下一键搭建大数据开发环境,Java+hadoop+hbase+elasticsearch+apache-tomcat,对上海出租车历史数据进行了分析并做了轨迹数据可视化展现
- Kettle 整合大数据平台(Hadoop、Hive、HBase)
- Hbase的集群安装