bulk-load装载hdfs数据到hbase小结
2015-06-01 16:58
447 查看
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> 比如: Java代码 hadoop dfs -cat test/1 1 2 3 4 5 6 7 8 hadoop dfs -cat test/1 1 2 3 4 5 6 7 8 执行 Java代码 hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test hadoop jar ~/hbase/hbase-0.90.2.jar importtsv-Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test 将会启动mapreduce程序在hdfs上生成t8这张表,它的rowkey分别为1 35 7,对应的value为2 4 6 8 注意,源文件默认以"\t"为分割符,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割 2 在上一步中,如果设置了输出目录,如 Java代码 hadoop jar ~/hbase/hbase-0.90.2.jar importtsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8 test hadoop jar ~/hbase/hbase-0.90.2.jarimporttsv -Dimporttsv.bulk.output=tmp -Dimporttsv.columns=HBASE_ROW_KEY,f1 t8test 那么t8表还暂时不会生成,只是将hfile输出到tmp文件夹下,我们可以查看tmp: Java代码 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 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.jarcompletebulkload /user/todd/myoutput mytable将这个输出目录中的hfile转移到对应的region中,这一步因为只是mv,所以相当快。如: hadoop jar ~/hbase/hbase-0.90.2.jar completebulkload tmp t8 然后 Java代码 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 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 |
关注超人学院微信二维码:
关注超人学院java免费学习交流群:
相关文章推荐
- hdfs笔记
- HDFS HA切换后missing block问题分析
- centOS6.5安装hadoop2.7后,再安装hbase1.1.0.1,完全分布式部署
- Hadoop(一)之Hadoop安装的坑爹经历
- HDFS读写过程解析
- 一、Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
- 二、Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)
- flume-ng+Kafka+Storm+HDFS 实时系统组
- HDFS读取文件步骤
- HDFS体系结构详解
- HDFS 简单介绍
- HDFS
- 如何检测HDFS的均衡状态?
- hdfs 如何列出目录下的所有文件
- eclipse与Hadoop集群连接
- HDFS ACL 权限管理
- hdfs上传文件的源码分析
- 更改HDFS权限
- 通过NFSv3挂载HDFS到本地目录
- hadoop中map和reduce的数量设置问题