`
lc_koven
  • 浏览: 349435 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

bulk-load装载hdfs数据到hbase小结

阅读更多
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>
比如:
	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
分享到:
评论
15 楼 asd51731 2013-04-13  
asd51731 写道
请问一下,我在生成hfile时没有遇到问题,但是当load hfile到hbase的时候就过不去,会不会是您说的注意中的第三点啊,我在添加上再测试还是一样,我的hadoop有四台机器,一个master三个slave,同时master充当hmaster,没有zookeeper,三个slave充当regionserver都有zookeeper,zookeeper是用hbase自带的

我运行提示如下错误
ERROR mapreduce.LoadIncrementalHFiles: Encountered unrecoverable error from region server
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=10, exceptions:
Sat Apr 13 10:02:27 CST 2013, org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$3@34b23d12, java.net.SocketTimeoutException: Call to slave01/192.168.1.11:60020 failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/192.168.1.10:60938 remote=slave01/192.168.1.11:60020]

Sat Apr 13 10:12:12 CST 2013, org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$3@34b23d12, java.net.SocketTimeoutException: Call to slave01/192.168.1.11:60020 failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/192.168.1.10:60974 remote=slave01/192.168.1.11:60020]

        at org.apache.hadoop.hbase.client.ServerCallable.withRetries(ServerCallable.java:183)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.tryAtomicRegionLoad(LoadIncrementalHFiles.java:491)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$1.call(LoadIncrementalHFiles.java:279)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$1.call(LoadIncrementalHFiles.java:277)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
whlamost@master:/usr/local/hadoop/bin$ ERROR mapreduce.LoadIncrementalHFiles: Encountered unrecoverable error from region server
ERROR: command not found
14 楼 asd51731 2013-04-13  
请问一下,我在生成hfile时没有遇到问题,但是当load hfile到hbase的时候就过不去,会不会是您说的注意中的第三点啊,我在添加上再测试还是一样,我的hadoop有四台机器,一个master三个slave,同时master充当hmaster,没有zookeeper,三个slave充当regionserver都有zookeeper,zookeeper是用hbase自带的
13 楼 kedaya 2013-01-06  
请问 多个值做key的话,指令应该怎么执行
12 楼 xiaobai1023 2012-10-31  
hello_yunyun 写道
你好,看你的博客上对hadoop有系统的了解,
我这个有问题 不知道楼主有没有遇到过,
我使用sqoop导oracle数据到hbase。
./sqoop import --connect jdbc:oracle:thin:@192.168.8.131:1521:dcsh
--username User_data2 --password yhdtest123qa --query "select * from so_ext t where \$CONDITIONS" -m 4 --hbase-create-table --hbase-table hso --column-family so --hbase-row-key id --split-by id

12/05/28 11:18:20 INFO mapreduce.ImportJobBase: Transferred 0 bytes in 161.2344 seconds (0 bytes/sec)
12/05/28 11:18:20 INFO mapreduce.ImportJobBase: Retrieved 5011540 records.

一切都顺利,登录到hbase中查看,表已经生成了
可是却没有数据
hbase(main):028:0> scan 'hs'
ROW                                           COLUMN+CELL                                                                                                                       
0 row(s) in 0.0260 seconds
提点建议吧 谢谢






试一下,flush 'hs'
11 楼 hello_yunyun 2012-05-28  
你好,看你的博客上对hadoop有系统的了解,
我这个有问题 不知道楼主有没有遇到过,
我使用sqoop导oracle数据到hbase。
./sqoop import --connect jdbc:oracle:thin:@192.168.8.131:1521:dcsh
--username User_data2 --password yhdtest123qa --query "select * from so_ext t where \$CONDITIONS" -m 4 --hbase-create-table --hbase-table hso --column-family so --hbase-row-key id --split-by id

12/05/28 11:18:20 INFO mapreduce.ImportJobBase: Transferred 0 bytes in 161.2344 seconds (0 bytes/sec)
12/05/28 11:18:20 INFO mapreduce.ImportJobBase: Retrieved 5011540 records.

一切都顺利,登录到hbase中查看,表已经生成了
可是却没有数据
hbase(main):028:0> scan 'hs'
ROW                                           COLUMN+CELL                                                                                                                       
0 row(s) in 0.0260 seconds
提点建议吧 谢谢



10 楼 moudaen 2012-02-14  
楼主,我按你的方法没有成功,能否加我Q下,急求帮助指导,谢谢!我的Q:304145723
9 楼 leeyok 2011-10-31  
lc_koven 写道
leeyok 写道
您好呀,我最近才开始看hbase~按照本文的步骤一步步做下去,出现了以下的错误。
11/10/31 09:20:16 INFO mapred.JobClient: Task Id : attempt_201110310819_0002_m_000000_0, Status : FAILED
Error: java.lang.ClassNotFoundException: com.google.common.base.Splitter

有点不理解为什么会缺少google的类呢?
于是我下载了包含Splitter的包,放入$HADOOP_HOME/lib目录中,但是还是不识别。

1 确认你下载的jar包上有这个类
2 确认是每台机器的环境变量里都有这个jar包


1.我下载的是包含com.google.appengine.repackaged.com.google.common.base.Splitter类的jar,这样的话splitter类还可以找到么?还是必须得是com.google.common.base.Splitter呀?
2. 我是在一台机器上伪分布进行的~
8 楼 lc_koven 2011-10-31  
leeyok 写道
您好呀,我最近才开始看hbase~按照本文的步骤一步步做下去,出现了以下的错误。
11/10/31 09:20:16 INFO mapred.JobClient: Task Id : attempt_201110310819_0002_m_000000_0, Status : FAILED
Error: java.lang.ClassNotFoundException: com.google.common.base.Splitter

有点不理解为什么会缺少google的类呢?
于是我下载了包含Splitter的包,放入$HADOOP_HOME/lib目录中,但是还是不识别。

1 确认你下载的jar包上有这个类
2 确认是每台机器的环境变量里都有这个jar包
7 楼 leeyok 2011-10-31  
您好呀,我最近才开始看hbase~按照本文的步骤一步步做下去,出现了以下的错误。
11/10/31 09:20:16 INFO mapred.JobClient: Task Id : attempt_201110310819_0002_m_000000_0, Status : FAILED
Error: java.lang.ClassNotFoundException: com.google.common.base.Splitter

有点不理解为什么会缺少google的类呢?
于是我下载了包含Splitter的包,放入$HADOOP_HOME/lib目录中,但是还是不识别。
6 楼 lc_koven 2011-06-26  
260832291 写道
260832291 写道
lc_koven 写道
260832291 写道
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中, 如何配置?

我的程序现在报错:
Error: org/apache/zookeeper/Watcher
11/06/22 17:45:22 INFO mapred.JobClient: Task Id : attempt_201106171832_0008_m_000001_0, Status : FAILED

是不是第3步zk没配置好??

直接将hbase.zookeeper.quorum信息写入core-site.xml即可。
从你这个错误log看不出更详细的原因


如下是错误log片段:
....
2011-06-24 12:08:52,810 INFO org.apache.hadoop.mapred.JobInProgress: Choosing data-local task task_201106241206_0001_m_000003
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000000_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000001_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,519 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000000_0' to tip task_201106241206_0001_m
_000000, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000001_0' to tip task_201106241206_0001_m
_000001, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Removed completed task 'attempt_201106241206_0001_m_000000_0' from 'tracker_TJSJHL212-220.o
pi.com:TJSJHL212-220/127.0.0.1:39629'
.......


前面还有个错误信息:
FATAL org.apache.hadoop.mapred.TaskTracker: Task: attempt_201106241206_0002_m_000003_0 - Killed : org/apache/zookeeper/Watche
        r

260832291 写道
260832291 写道
lc_koven 写道
260832291 写道
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中, 如何配置?

我的程序现在报错:
Error: org/apache/zookeeper/Watcher
11/06/22 17:45:22 INFO mapred.JobClient: Task Id : attempt_201106171832_0008_m_000001_0, Status : FAILED

是不是第3步zk没配置好??

直接将hbase.zookeeper.quorum信息写入core-site.xml即可。
从你这个错误log看不出更详细的原因


如下是错误log片段:
....
2011-06-24 12:08:52,810 INFO org.apache.hadoop.mapred.JobInProgress: Choosing data-local task task_201106241206_0001_m_000003
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000000_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000001_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,519 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000000_0' to tip task_201106241206_0001_m
_000000, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000001_0' to tip task_201106241206_0001_m
_000001, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Removed completed task 'attempt_201106241206_0001_m_000000_0' from 'tracker_TJSJHL212-220.o
pi.com:TJSJHL212-220/127.0.0.1:39629'
.......


前面还有个错误信息:
FATAL org.apache.hadoop.mapred.TaskTracker: Task: attempt_201106241206_0002_m_000003_0 - Killed : org/apache/zookeeper/Watche
        r



你写的都是INFO,不是出错的关键
5 楼 260832291 2011-06-24  
260832291 写道
lc_koven 写道
260832291 写道
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中, 如何配置?

我的程序现在报错:
Error: org/apache/zookeeper/Watcher
11/06/22 17:45:22 INFO mapred.JobClient: Task Id : attempt_201106171832_0008_m_000001_0, Status : FAILED

是不是第3步zk没配置好??

直接将hbase.zookeeper.quorum信息写入core-site.xml即可。
从你这个错误log看不出更详细的原因


如下是错误log片段:
....
2011-06-24 12:08:52,810 INFO org.apache.hadoop.mapred.JobInProgress: Choosing data-local task task_201106241206_0001_m_000003
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000000_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000001_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,519 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000000_0' to tip task_201106241206_0001_m
_000000, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000001_0' to tip task_201106241206_0001_m
_000001, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Removed completed task 'attempt_201106241206_0001_m_000000_0' from 'tracker_TJSJHL212-220.o
pi.com:TJSJHL212-220/127.0.0.1:39629'
.......


前面还有个错误信息:
FATAL org.apache.hadoop.mapred.TaskTracker: Task: attempt_201106241206_0002_m_000003_0 - Killed : org/apache/zookeeper/Watche
        r
4 楼 260832291 2011-06-24  
lc_koven 写道
260832291 写道
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中, 如何配置?

我的程序现在报错:
Error: org/apache/zookeeper/Watcher
11/06/22 17:45:22 INFO mapred.JobClient: Task Id : attempt_201106171832_0008_m_000001_0, Status : FAILED

是不是第3步zk没配置好??

直接将hbase.zookeeper.quorum信息写入core-site.xml即可。
从你这个错误log看不出更详细的原因


如下是错误log片段:
....
2011-06-24 12:08:52,810 INFO org.apache.hadoop.mapred.JobInProgress: Choosing data-local task task_201106241206_0001_m_000003
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000000_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,516 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201106241206_0001_m_000001_0: Error: org/apache/zookeeper/Watcher
2011-06-24 12:08:55,519 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000000_0' to tip task_201106241206_0001_m
_000000, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Adding task (cleanup)'attempt_201106241206_0001_m_000001_0' to tip task_201106241206_0001_m
_000001, for tracker 'tracker_TJSJHL212-220.opi.com:TJSJHL212-220/127.0.0.1:39629'
2011-06-24 12:08:58,526 INFO org.apache.hadoop.mapred.JobTracker: Removed completed task 'attempt_201106241206_0001_m_000000_0' from 'tracker_TJSJHL212-220.o
pi.com:TJSJHL212-220/127.0.0.1:39629'
.......
3 楼 lc_koven 2011-06-23  
260832291 写道
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中, 如何配置?

我的程序现在报错:
Error: org/apache/zookeeper/Watcher
11/06/22 17:45:22 INFO mapred.JobClient: Task Id : attempt_201106171832_0008_m_000001_0, Status : FAILED

是不是第3步zk没配置好??

直接将hbase.zookeeper.quorum信息写入core-site.xml即可。
从你这个错误log看不出更详细的原因
2 楼 260832291 2011-06-22  
3 执行以上的步骤2时需要将zookeeper的配置写入core-site.xml中, 如何配置?

我的程序现在报错:
Error: org/apache/zookeeper/Watcher
11/06/22 17:45:22 INFO mapred.JobClient: Task Id : attempt_201106171832_0008_m_000001_0, Status : FAILED

是不是第3步zk没配置好??
1 楼 hehe3000 2011-04-22  
写成hfile都是两步了,一步的方式是直接插入hbase了

相关推荐

Global site tag (gtag.js) - Google Analytics