设为首页 加入收藏

TOP

Hbase1.2.5   hadoop2.7.3   importsv实例
2019-03-12 01:50:02 】 浏览:23
Tags:Hbase1.2.5   hadoop2.7.3 importsv 实例

测试环境:

hbase 1.2.5

hadoop2.7.3


数据导入有如下几种方式:
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  -Dimporttsv.separator="," 
-Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tb1-001 /simple.csv
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

simple.csv内容如下:

1,"Tony"
2,"Ivy"
3,"Tom"
4,"Spark"
5,"Storm"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

eg:

创建文件
[root@hadoop1 datamove]# cat simple.csv
1,"Tony"
2,"Ivy"
3,"Tom"
4,"Spark"
5,"Storm"


上传文件
[root@hadoop1 datamove]# hdfs dfs -put simple.csv /liguodong
[root@hadoop1 datamove]# hdfs dfs -ls /liguodong
Found 5 items
-rw-r--r--   3 root supergroup         45 2015-07-06 11:13 /liguodong/simple.csv

创建表
hbase(main):001:0> create 'hbase-tb1-001','cf'
0 row(s) in 3.1120 seconds

=> Hbase::Table - hbase-tb1-001


执行mapreduce
[root@hadoop1 datamove]# hbase  org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.separator="," 
-Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tb1-001 /liguodong/simple.csv


查看是否成功导入
hbase(main):003:0> scan 'hbase-tb1-001'
ROW                  COLUMN+CELL
 1                   column=cf:, timestamp=1436152834178, value="Tony"
 2                   column=cf:, timestamp=1436152834178, value="Ivy"
 3                   column=cf:, timestamp=1436152834178, value="Tom"
 4                   column=cf:, timestamp=1436152834178, value="Spark"
 5                   column=cf:, timestamp=1436152834178, value="Storm"
5 row(s) in 0.1490 seconds
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

利用completebulkload将数据导入到HBase

这里很坑!超级坑!网上说什么hbase的相关包要倒来倒去,我直接把hbase的所有jar包全扔到$HADOOP_HOME/etc/hadoop/common/lib下。

HBase支持bulkload的入库方式,它是利用hbase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。配和mapreduce完成,高效便捷,而且不占用region资源,增添负载,在大数据量写入时,能极大的提高写入效率,并降低对HBase节点的写入压力。
通过使用先生成HFile,然后再BulkLoad到HBase的方式来替代之前直接调用HTableOutputFormat的方法有如下的好处:
1、消除了对HBase集群的插入压力
2、提高了Job的运行速度,降低了Job的执行时间

利用completebulkload将数据导入到HBase
1、先通过lmportTsv生成HFile
命令:

hbase [类] [分隔符] [输出存储路径] [行键,列族] [表] [导入原始数据文件]
bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.bulk.output=/hfile_tmp 
-Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tbl-003 /simple.csv
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2、通过completebulkload将数据导入表hbase-tbl-003
命令:

hadoop jar lib/hbase-server-1.2.5.jar completebulkload
 /hfile_tmp hbase-tbl-002
  • 1
  • 2
  • 1
  • 2

eg:

[root@hadoop1 datamove]# hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," 
-Dimporttsv.bulk.output=/liguodong/hfile_tmp -Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tbl-003 /liguodong/simple.csv

以上的指令,它会主动创建表hbase-tbl-003和文件夹hfile_tmp。
[root@hadoop1 datamove]# hdfs dfs -ls /liguodong
drwxr-xr-x   - root supergroup          0 2015-07-06 11:54 /liguodong/hfile_tmp

[root@hadoop1 datamove]# hdfs dfs -ls -R  /liguodong/hfile_tmp
-rw-r--r--   3 root supergroup          0 2015-07-06 11:54 /liguodong/hfile_tmp/_SUCCESS
drwxr-xr-x   - root supergroup          0 2015-07-06 11:54 /liguodong/hfile_tmp/cf
-rw-r--r--   3 root supergroup       1196 2015-07-06 11:54 /liguodong/hfile_tmp/cf/e20e3fe899de47a88ca476e05da2c9d7

hbase(main):008:0> scan 'hbase-tbl-003'
ROW                  COLUMN+CELL
0 row(s) in 0.0310 seconds


将数据导入表hbase-tbl-003
[root@hadoop1 datamove]# hadoop jar /opt/cloudera/parcels/CDH/lib/hbase/hbase-server-1.2.5.jar completebulkload 
/liguodong/hfile_tmp hbase-tbl-003
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21


利用Import将数据导入到HBase

1、HBase export工具导出的数据的格式是sequence file。
比如,在执行完命令bin/hbase org.apache.Hadoop.hbase.mapreduce.Export hbase-tbl-002 /test-output后,hbase会启动一个MapReduce作业,作业完成后会在hdfs上面会生成sequence file格式的数据文件。
2、对于这类Sequence file格式的数据文件,HBase是可以通过Import工具直接将它导入到HBase的表里面的。
执行命令:
bin/hbase org.apache.hadoop.hbase.mapreduce.Import hbase-tbl-004 /test-output
随后hbase会启动一个MapReduce作业,然后表test会成功入数据。

导出到hdfs
[root@hadoop1 lib]# hbase org.apache.hadoop.hbase.mapreduce.Export hbase-tb1-001 /liguodong/test-output


创建新表
hbase(main):010:0> create 'hbase-tb1-004','cf'
0 row(s) in 0.4290 seconds

=> Hbase::Table - hbase-tb1-004

导入到hbase
[root@hadoop1 lib]# hbase org.apache.hadoop.hbase.mapreduce.Import hbase-tb1-004 /liguodong/test-output


验证
hbase(main):011:0> scan 'hbase-tb1-004'
ROW                  COLUMN+CELL
 1                   column=cf:, timestamp=1436152834178, value="Tony"
 2                   column=cf:, timestamp=1436152834178, value="Ivy"
 3                   column=cf:, timestamp=1436152834178, value="Tom"
 4                   column=cf:, timestamp=1436152834178, value="Spark"
 5                   column=cf:, timestamp=1436152834178, value="Storm"
5 row(s) in 0.0580 seconds

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hbase   snapshot 下一篇Hbase   snapshot

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }