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> 
比如:

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

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

关注超人学院java免费学习交流群:

时间: 2024-10-13 11:16:03

bulk-load装载hdfs数据到hbase小结的相关文章

【甘道夫】通过bulk load将HDFS上的数据导入HBase

引言 通过bulkload将HDFS上的数据装载进HBase是常用的入门级HBase技能,下面简单记录下关键步骤. bulkload的详细情况请参见官网文档. 过程 第一步:每台机器执行 ln -s $HBASE_HOME/conf/hbase-site.xml $HADOOP_HOME/etc/hadoop/hbase-site.xml 第二步:编辑$HADOOP_HOME/etc/hadoop/hadoop-env.sh,拷贝到所有节点 末尾添加: export HADOOP_CLASSPA

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

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

大数据查询——HBase读写设计与实践

背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的不断增加,在写入和读取过程中面临性能问题,且历史数据仅供业务查询参考,并不影响实际流程,从系统结构上来说,放在业务链条上游比较重.本项目将其置于下游数据处理 Hadoop 分布式平台来实现此需求.下面列一些具体的需求指标: 1.数据量:目前 check 表的累计数据量为 5000w+ 行,11GB:op

Bulk Load-HBase数据导入最佳实践

一.概述 HBase本身提供了非常多种数据导入的方式,通常有两种经常使用方式: 1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 2.还有一种方式就是使用HBase原生Client API 这两种方式因为须要频繁的与数据所存储的RegionServer通信.一次性入库大量数据时,特别占用资源,所以都不是最有效的.了解过HBase底层原理的应该都知道,HBase在HDFS中是以HFile文件结构存储的,一个比較高效便捷的方法就是使

【hbase】——bulk load导入数据时value=\x00\x00\x00\x01问题解析

一.存入数据类型 Hbase里面,rowkey是按照字典序进行排序.存储的value值,当用filter进行数据筛选的时候,所用的比较算法也是字典序的. 1.当存储的value值是float类型的时候,录入数据可以录入,但是读取出来的数据会存在问题会出问题 例如: 存入数据的代码: p = new Put(Bytes.toBytes(“66”)); p.add(Bytes.toBytes("value"),Bytes.toBytes("null"), (Long.v

使用BulkLoad从HDFS批量导入数据到HBase

在向Hbase中写入数据时,常见的写入方法有使用HBase API,Mapreduce批量导入数据,使用这些方式带入数据时,一条数据写入到HBase数据库中的大致流程如图. 数据发出后首先写入到雨鞋日志WAl中,写入到预写日志中之后,随后写入到内存MemStore中,最后在Flush到Hfile中.这样写数据的方式不会导致数据的丢失,并且道正数据的有序性,但是当遇到大量的数据写入时,写入的速度就难以保证.所以,介绍一种性能更高的写入方式BulkLoad. 使用BulkLoad批量写入数据主要分为

hive-hbase-handler方式导入hive表数据到hbase表中

Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler.jar工具类 : hive-hbase-handler.jar在hive的lib包中而不是在hbase的lib中,hive0.6版本以后: 创建hive表的同时创建hbase表,删除 hive表的同时也会删除对应的hbase表. 参见官方文档:https://cwiki.apache.org/confluence/display/Hive/HBaseIntegr

使用sqoop将MySQL数据库中的数据导入Hbase

使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-connector-java-5.1.10.jar 拷贝到 /usr/lib/sqoop/lib/ 下 MySQL导入HBase命令: sqoop import --connect jdbc:mysql://10.10.97.116:3306/rsearch --table researchers --h

Sqoop将mysql数据导入hbase的血与泪

Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天)  版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunshuxueyuan/blogQQ技术交流群:299142667 一. 问题如何产生 庞老师只讲解了mysql和hdfs,mysq与hive的数据互导,因此决定研究一下将mysql数据直接导入hbase,这时出现了一系列问题. 心酸史: 二. 开始具体解决问题 需求:(将以下这张表数据导入mysql)