hbase0.96数据导入以及Kettle操作hbase问题

版本:

cdh5.0.0+hadoop2.3.0+hbase0.96.1.1+Spoon5.0.1

一、HBase数据导入

HBase数据导入使用org.apache.hadoop.hbase.mapreduce.ImportTsv 的两种方式,一种是直接导入,一种是转换为HFile,然后再次导入。

1. HDFS数据为(部分):

[[email protected] data]# hadoop fs -ls /input
Found 1 items
-rwxrwxrwx   1 hdfs supergroup   13245467 2014-05-01 17:09 /input/hbase-data.csv
[[email protected] data]# hadoop fs -cat /input/* | head -n 3
1,1.52101,13.64,4.49,1.1,71.78,0.06,8.75,0,0,1
2,1.51761,13.89,3.6,1.36,72.73,0.48,7.83,0,0,1
3,1.51618,13.53,3.55,1.54,72.99,0.39,7.78,0,0,1

2. 使用直接导入的方式

a. 建立hbase-employees-1表,使用hbase shell,进入shell模式,使用命令:create ‘hbase-employees-1‘,‘col‘ ,建立表;

b. 进入hbase安装目录,如果使用cdh默认安装,一般在目录/usr/lib/hbase/bin中,运行:

./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,col:x1,col:x2,col:x3,col:x4,col:x5,col:x6,col:x7,col:x8,col:x9,col:y hbase-employees-1 hdfs://node33:8020/input/hbase-data.csv

日志如下:

2014-05-02 13:15:07,716 INFO  [main] mapreduce.JobSubmitter: Submitting tokens for job: job_1398958404577_0018
2014-05-02 13:15:08,674 INFO  [main] impl.YarnClientImpl: Submitted application application_1398958404577_0018
2014-05-02 13:15:09,101 INFO  [main] mapreduce.Job: The url to track the job: http://node33:8088/proxy/application_1398958404577_0018/
2014-05-02 13:15:09,103 INFO  [main] mapreduce.Job: Running job: job_1398958404577_0018
2014-05-02 13:15:34,169 INFO  [main] mapreduce.Job: Job job_1398958404577_0018 running in uber mode : false
2014-05-02 13:15:34,207 INFO  [main] mapreduce.Job:  map 0% reduce 0%
2014-05-02 13:16:32,789 INFO  [main] mapreduce.Job:  map 1% reduce 0%
2014-05-02 13:16:53,477 INFO  [main] mapreduce.Job:  map 5% reduce 0%
2014-05-02 13:16:56,701 INFO  [main] mapreduce.Job:  map 9% reduce 0%
2014-05-02 13:16:59,928 INFO  [main] mapreduce.Job:  map 13% reduce 0%
2014-05-02 13:17:02,970 INFO  [main] mapreduce.Job:  map 16% reduce 0%
2014-05-02 13:17:07,260 INFO  [main] mapreduce.Job:  map 22% reduce 0%
2014-05-02 13:17:10,472 INFO  [main] mapreduce.Job:  map 29% reduce 0%
2014-05-02 13:17:12,879 INFO  [main] mapreduce.Job:  map 36% reduce 0%
2014-05-02 13:17:16,555 INFO  [main] mapreduce.Job:  map 45% reduce 0%
2014-05-02 13:17:43,452 INFO  [main] mapreduce.Job:  map 48% reduce 0%
2014-05-02 13:17:45,629 INFO  [main] mapreduce.Job:  map 63% reduce 0%
2014-05-02 13:17:52,845 INFO  [main] mapreduce.Job:  map 79% reduce 0%
2014-05-02 13:17:55,862 INFO  [main] mapreduce.Job:  map 91% reduce 0%
2014-05-02 13:18:01,000 INFO  [main] mapreduce.Job:  map 100% reduce 0%
2014-05-02 13:18:14,644 INFO  [main] mapreduce.Job: Job job_1398958404577_0018 completed successfully
2014-05-02 13:18:17,123 INFO  [main] mapreduce.Job: Counters: 31
	File System Counters
		FILE: Number of bytes read=0
		FILE: Number of bytes written=115531
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=13245571
		HDFS: Number of bytes written=0
		HDFS: Number of read operations=2
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=0
	Job Counters
		Launched map tasks=1
		Data-local map tasks=1
		Total time spent by all maps in occupied slots (ms)=146367
		Total time spent by all reduces in occupied slots (ms)=0
		Total time spent by all map tasks (ms)=146367
		Total vcore-seconds taken by all map tasks=146367
		Total megabyte-seconds taken by all map tasks=149879808
	Map-Reduce Framework
		Map input records=203500
		Map output records=203500
		Input split bytes=104
		Spilled Records=0
		Failed Shuffles=0
		Merged Map outputs=0
		GC time elapsed (ms)=8595
		CPU time spent (ms)=11290
		Physical memory (bytes) snapshot=99639296
		Virtual memory (bytes) snapshot=647782400
		Total committed heap usage (bytes)=26517504
	ImportTsv
		Bad Lines=0
	File Input Format Counters
		Bytes Read=13245467
	File Output Format Counters
		Bytes Written=0

查看hbase表数据大小:

bash-4.1$ hadoop fs -count /hbase/data/default/hbase-employees-1
           6            4           60100796 /hbase/data/default/hbase-employees-1

大约57.3M数据,原始数据是12.3M的。耗时方面:从任务提交到任务结束耗时3分6秒。

3. 使用HFile方式:

a. 转换为HFile并新建hbase-employee表:

./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.bulk.output=hdfs://node33:8020/output/hbase_bulk -Dimporttsv.columns=HBASE_ROW_KEY,col:x1,col:x2,col:x3,col:x4,col:x5,col:x6,col:x7,col:x8,col:x9,col:y hbase-employees hdfs://node33:8020/input/hbase-data.csv

这样运行后,可以查看HFile的大小:

hadoop fs -count /output/hbase_bulk

同时数据库中已经新建了hbase-employees表,但是表中没有数据。

b. 插入数据到表中

这里也有两种方式,但是这两种方式操作前都需要把相应目录的权限放开。简单来说可以这样:

bash-4.1$ hadoop fs -chmod -R 777 /output
bash-4.1$ hadoop fs -chmod -R 777 /hbase

(1)使用hbase的命令:

/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://node33:8020/output/hbase_bulk hbase-employees

ps:这个我没有试,官网说可以这样。
(2)使用hadoop jar方式:

hadoop jar /usr/lib/hbase/lib/hbase-server-0.96.1.1-cdh5.0.0.jar completebulkload hdfs://node33:8020/output/hbase_bulk hbase-employees

不过做这个前需要把hbase的相关包拷贝到hadoop的lib目录下,可以拷贝到/usr/lib/hadoop-mapreduce目录下,jar包如下:

-rw-r--r--. 1 root root  818519 May  2 10:35 hbase-client.jar
-rw-r--r--. 1 root root  360422 May  2 10:36 hbase-common.jar
-rw-r--r--. 1 root root   66898 May  2 10:36 hbase-hadoop2-compat.jar
-rw-r--r--. 1 root root    4071 May  2 10:36 hbase-it.jar
-rw-r--r--. 1 root root   87533 May  2 10:36 hbase-prefix-tree.jar
-rw-r--r--. 1 root root 3142247 May  2 10:36 hbase-protocol.jar
-rw-r--r--. 1 root root 3110607 May  2 10:36 hbase-server.jar
-rw-r--r--. 1 root root    4499 May  2 10:37 hbase-shell-0.96.1.1-cdh5.0.0.jar
-rw-r--r--. 1 root root 2270053 May  2 10:37 hbase-thrift-0.96.1.1-cdh5.0.0.jar

这种方式的log,如下:

2014-05-02 13:39:27,916 INFO  [main] mapreduce.JobSubmitter: Submitting tokens for job: job_1398958404577_0020
2014-05-02 13:39:28,408 INFO  [main] impl.YarnClientImpl: Submitted application application_1398958404577_0020
2014-05-02 13:39:28,552 INFO  [main] mapreduce.Job: The url to track the job: http://node33:8088/proxy/application_1398958404577_0020/
2014-05-02 13:39:28,553 INFO  [main] mapreduce.Job: Running job: job_1398958404577_0020
2014-05-02 13:39:44,376 INFO  [main] mapreduce.Job: Job job_1398958404577_0020 running in uber mode : false
2014-05-02 13:39:44,402 INFO  [main] mapreduce.Job:  map 0% reduce 0%
2014-05-02 13:40:24,580 INFO  [main] mapreduce.Job:  map 67% reduce 0%
2014-05-02 13:40:38,125 INFO  [main] mapreduce.Job:  map 100% reduce 0%
2014-05-02 13:41:09,295 INFO  [main] mapreduce.Job:  map 100% reduce 67%
2014-05-02 13:41:17,905 INFO  [main] mapreduce.Job:  map 100% reduce 77%
2014-05-02 13:41:20,928 INFO  [main] mapreduce.Job:  map 100% reduce 90%
2014-05-02 13:41:23,948 INFO  [main] mapreduce.Job:  map 100% reduce 100%
2014-05-02 13:41:29,514 INFO  [main] mapreduce.Job: Job job_1398958404577_0020 completed successfully
2014-05-02 13:41:31,530 INFO  [main] mapreduce.Job: Counters: 50
	File System Counters
		FILE: Number of bytes read=48950370
		FILE: Number of bytes written=98519119
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=13245571
		HDFS: Number of bytes written=73861410
		HDFS: Number of read operations=8
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=3
	Job Counters
		Launched map tasks=1
		Launched reduce tasks=1
		Data-local map tasks=1
		Total time spent by all maps in occupied slots (ms)=51857
		Total time spent by all reduces in occupied slots (ms)=42035
		Total time spent by all map tasks (ms)=51857
		Total time spent by all reduce tasks (ms)=42035
		Total vcore-seconds taken by all map tasks=51857
		Total vcore-seconds taken by all reduce tasks=42035
		Total megabyte-seconds taken by all map tasks=53101568
		Total megabyte-seconds taken by all reduce tasks=43043840
	Map-Reduce Framework
		Map input records=203500
		Map output records=203500
		Map output bytes=48339864
		Map output materialized bytes=48950370
		Input split bytes=104
		Combine input records=203500
		Combine output records=203500
		Reduce input groups=203500
		Reduce shuffle bytes=48950370
		Reduce input records=203500
		Reduce output records=2035000
		Spilled Records=407000
		Shuffled Maps =1
		Failed Shuffles=0
		Merged Map outputs=1
		GC time elapsed (ms)=1573
		CPU time spent (ms)=26250
		Physical memory (bytes) snapshot=341180416
		Virtual memory (bytes) snapshot=1296404480
		Total committed heap usage (bytes)=152965120
	ImportTsv
		Bad Lines=0
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters
		Bytes Read=13245467
	File Output Format Counters
		Bytes Written=73861410

这个是转为HFile的job,插入数据到HBase表中2秒不到就完成了。

查看HBase中数据大小:

bash-4.1$ hadoop fs -count /hbase/data/default/hbase-employees
           5            3           73861752 /hbase/data/default/hbase-employees

一共大概70.4M数据,原始数据是12.3M,耗时为:2分2秒。

总结:HBase的数据导入都会把数据扩大,一般大概为5倍左右,同时使用HFile的方式,在时间上会有优势,但是数据会比较大。ps:这个仅仅是一次测试总结而已,实际情况可能不同。(为什么HBase的数据被扩大了?参考前篇,Hive的数据如果是直接导入,一般是不会扩大数据占用空间的,而且使用orc方式的时候还可以达到很好的压缩比,但是HBase却是扩大的,这是为什么?)

二、Kettle操作Hbase0.96

1. HBase Output组件,可以参考http://wiki.pentaho.com/display/BAD/Loading+Data+into+HBase 。

2. HBase Input组件,可以参考http://wiki.pentaho.com/display/BAD/Extracting+Data+from+HBase+to+Load+an+RDBMS

参考这两个操作步骤,都是可以得到正确结果的。这里只是说说遇到的问题。

(1)zookeeper和hbase-site.xml文件两者选择一个配置即可,配置两个可能有问题。

(2)mapping配置的是HBase表中Family的名称。

(3)如果遇到下面的问题:

java.lang.IllegalArgumentException: offset (0) + length (8) exceed the capacity of the array: 1
	at org.apache.hadoop.hbase.util.Bytes.explainWrongLengthOrOffset(Bytes.java:602)
	at org.apache.hadoop.hbase.util.Bytes.toLong(Bytes.java:580)
	at org.apache.hadoop.hbase.util.Bytes.toLong(Bytes.java:553)
	at org.pentaho.hbase.shim.common.CommonHBaseBytesUtil.toLong(CommonHBaseBytesUtil.java:87)
	at org.pentaho.hbase.shim.api.HBaseValueMeta.decodeKeyValue(HBaseValueMeta.java:567)
	at org.pentaho.di.trans.steps.hbaseinput.HBaseInputData.getOutputRow(HBaseInputData.java:464)
	at org.pentaho.di.trans.steps.hbaseinput.HBaseInput.processRow(HBaseInput.java:281)
	at org.pentaho.di.trans.step.RunThread.run(RunThread.java:60)
	at java.lang.Thread.run(Thread.java:724)

或者

Unknown type for column

	at org.pentaho.hbase.shim.api.HBaseValueMeta.decodeColumnValue(HBaseValueMeta.java:769)
	at org.pentaho.di.trans.steps.hbaseinput.HBaseInputData.getOutputRow(HBaseInputData.java:495)
	at org.pentaho.di.trans.steps.hbaseinput.HBaseInput.processRow(HBaseInput.java:281)
	at org.pentaho.di.trans.step.RunThread.run(RunThread.java:60)
	at java.lang.Thread.run(Thread.java:724)

或者

org.pentaho.di.core.exception.KettleException:
Length of integer column value is not equal to the defined length of a short, int or long

	at org.pentaho.hbase.shim.api.HBaseValueMeta.decodeColumnValue(HBaseValueMeta.java:711)
	at org.pentaho.di.trans.steps.hbaseinput.HBaseInputData.getOutputRow(HBaseInputData.java:495)
	at org.pentaho.di.trans.steps.hbaseinput.HBaseInput.processRow(HBaseInput.java:281)
	at org.pentaho.di.trans.step.RunThread.run(RunThread.java:60)
	at java.lang.Thread.run(Thread.java:724)

则把Mapping的时候的数据格式全部设置为String就可以了,这个是因为,如果HBase表中的数据是以其他方式导入的话,那么其存储是以String格式存储的(但是如果使用kettle的HBase output组件导入数据,那么数据格式可以调整),所以使用其他的数据格式就会报上面的错误。

分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990

hbase0.96数据导入以及Kettle操作hbase问题

时间: 2024-10-05 05:58:36

hbase0.96数据导入以及Kettle操作hbase问题的相关文章

数据导入(一):Hive On HBase

Hive集成HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等.在集成的过程中注意维持HBase jar包的一致性.Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类. 整合hive与hbase的过程如下: 1.将HBASE_HOME下的 hbase-common-0.96.2-hadoop2.jar 和 zookeeper-3.4.5.jar 拷贝(覆盖)到HIVE_HOME/l

新浪微博数据解析与java操作Hbase实例

之前发过一篇开发新浪微博的文章,对于大家比较感兴趣的内容之一便是如何解析新浪微博的JSON. 其实一开始的时候,也遇过一些挫折,比如直接用JsonArray和JsonObject去解析JSON内容的话,是解析不了的. 因为JSON的格式比较固定,像新浪微博返回的JSON内容则是多了一个中括号及statues标签,如下: { "statuses": [ { "created_at": "Tue May 31 17:46:55 +0800 2011"

Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1(转)

From:http://www.itnose.net/detail/6065872.html # 需要软件 Hadoop-2.2.0(目前Apache官网最新的Stable版本) Hbase-0.96.2(这里就用这个版本,跟Hadoop-2.2.0是配套的,不用覆盖jar包什么的) Hive-0.13.1(目前是最新版本) Zookeepr-3.4.6(这里推荐使用 3.4.5) Jdk1.7.0_60(这里推荐使用1.7.0_45) Mysql-5.5.31 # 集群结构图 NN : Nam

_00018 Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1 分布式环境整合,Hadoop-2.X使用HA方式

博文作者:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # Hadoo

java操作Hbase实例

所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apach

【甘道夫】Hadoop2.2.0环境使用Sqoop-1.4.4将Oracle11g数据导入HBase0.96,并自动生成组合行键

目的: 使用Sqoop将Oracle中的数据导入到HBase中,并自动生成组合行键! 环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz Oracle11g jdk1.7 Ubuntu14 Server 这里关于环境吐槽一句: 最新版本的Sqoop1.99.3功能太弱,只支持导入数据到HDFS,没有别的任何选项,太土了!(如有不同意见欢迎讨论给出解决方案) 命令: sqoop import --connect

【甘道夫】使用sqoop-1.4.4.bin__hadoop-2.0.4-alpha将Oracle11g数据导入HBase0.96

环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz Oracle11g jdk1.7 Ubuntu14 Server 这里关于环境吐槽一句: 最新版本的Sqoop1.99.3功能太弱,只支持导入数据到HDFS,没有别的任何选项,太土了!(如有不同意见欢迎讨论给出解决方案) 命令: sqoop import --connect jdbc:oracle:thin:@192.168.0.147:1521:ORCLGB

HBase数据导入的几种操作

数据导入有如下几种方式: 1.利用HBase提供的ImportTsv将csv文件导入到HBase 2.利用HBase提供的completebulkload将数据导入到HBase 3.利用HBase提供的Import将数据导入到HBase 利用ImportTsv将csv文件导入到HBase 命令: 格式:hbase [类] [分隔符] [行键,列族] [表] [导入文件] bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimportt

数据导入HBase最常用的三种方式及实践分析

数据导入HBase最常用的三种方式及实践分析         摘要:要使用Hadoop,需要将现有的各种类型的数据库或数据文件中的数据导入HBase.一般而言,有三种常见方式:使用HBase的API中的Put方法,使用HBase 的bulk load工具和使用定制的MapReduce Job方式.本文均有详细描述. [编者按]要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用H