我们可以有很多方式可以把数据导入到hbase当中,比如说用map-reduce,使用TableOutputFormat这个类,但是这种方式不是最优的方式。

  Bulk的方式直接生成HFiles,写入到文件系统当中,这种方式的效率很高。

  一般的步骤有两步

  (1)使用ImportTsv或者import工具或者自己写程序用hive/pig生成HFiles

  (2)用completebulkload把HFiles加载到hdfs上

  ImportTsv能把用Tab分隔的数据很方便的导入到hbase当中,但还有很多数据不是用Tab分隔的 下面我们介绍如何使用hive来导入数据到hbase当中。

  

  

  1.准备输入内容
  a.创建一个tables.ddl文件

  

-- pagecounts data comes from http://dumps.wikimedia.org/other/
pagecounts-raw/
-- documented http://www.mediawiki.org/wiki/Analytics/Wikistats
-- define an external table over raw pagecounts data
CREATE TABLE IF NOT EXISTS pagecounts (projectcode STRING, pagename
STRING, pageviews STRING, bytes STRING)
ROW FORMAT
DELIMITED FIELDS TERMINATED BY ' '
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/tmp/wikistats';
-- create a view, building a custom hbase rowkey
CREATE VIEW IF NOT EXISTS pgc (rowkey, pageviews, bytes) AS
SELECT concat_ws('/',
projectcode,
concat_ws('/',
pagename,
regexp_extract(INPUT__FILE__NAME, 'pagecounts-(\\d{8}-\\d{6})\
\..*$))),
pageviews, bytes
FROM pagecounts;
-- create a table to hold the input split partitions
CREATE EXTERNAL TABLE IF NOT EXISTS hbase_splits(partition STRING)
ROW FORMAT
SERDE 'org.apache.hadoop.hive.serde2.binarysortable.
BinarySortableSerDe'
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.
HiveNullValueSequenceFileOutputFormat'
LOCATION '/tmp/hbase_splits_out';
-- create a location to store the resulting HFiles
CREATE TABLE hbase_hfiles(rowkey STRING, pageviews STRING, bytes STRING)
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
TBLPROPERTIES('hfile.family.path' = '/tmp/hbase_hfiles/w');

  b.创建HFils分隔文件,例子:sample.hql

  

-- prepate range partitioning of hfiles
.jar;
;
CREATE TEMPORARY FUNCTION row_seq AS 'org.apache.hadoop.hive.contrib.udf.
UDFRowSequence';
-- input file contains ~4mm records. Sample it so as to produce 5 input
splits.
INSERT OVERWRITE TABLE hbase_splits
SELECT rowkey FROM
(SELECT rowkey, row_seq() AS seq FROM pgc
TABLESAMPLE(BUCKET  OUT  ON rowkey) s
ORDER BY rowkey
LIMIT ) x
)
ORDER BY rowkey
LIMIT ;
-- after this is finished, combined the splits file:
dfs -cp /tmp/hbase_splits_out/* /tmp/hbase_splits;

  

  c.创建hfiles.hql

  

-security.jar;
.jar;
;
SET hive.mapred.partitioner=org.apache.hadoop.mapred.lib.
TotalOrderPartitioner;
SET total.order.partitioner.path=/tmp/hbase_splits;
-- generate hfiles using the splits ranges
INSERT OVERWRITE TABLE hbase_hfiles
SELECT * FROM pgc
CLUSTER BY rowkey;

  

  2.导入数据

  注意:/$Path_to_Input_Files_on_Hive_Client是hive客户端的数据存储目录

  

mkdir /$Path_to_Input_Files_on_Hive_Client/wikistats
wget http:/
pagecounts.gz
hadoop fs -mkdir /$Path_to_Input_Files_on_Hive_Client/wikistats
hadoop fs .
gz /$Path_to_Input_Files_on_Hive_Client/wikistats/ 

  3.创建必要的表

  注意:$HCATALOG_USER是HCatalog服务的用户(默认是hcat)

$HCATALOG_USER-f /$Path_to_Input_Files_on_Hive_Client/tables.ddl

  执行之后,我们会看到如下的提示:

  

OK
Time taken: 1.886 seconds
OK
Time taken: 0.654 seconds
OK
Time taken: 0.047 seconds
OK
Time taken: 0.115 seconds

  

  4.确认表已经正确创建

  执行以下语句

  

$HIVE_USER;"

  

  执行之后,我们会看到如下的提示:

  

...
OK
aa Main_Page
aa Special:ListUsers
aa Special:Listusers  

  再执行

  

$HIVE_USER;"

  执行之后,我们会看到如下的提示:

  

...
OK
aa
aa
aa
...

  

  5.生成HFiles分隔文件

  

$HIVE_USER-f /$Path_to_Input_Files_on_Hive_Client/sample.hql
hadoop fs -ls /$Path_to_Input_Files_on_Hive_Client/hbase_splits

  

  为了确认,执行以下命令

hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-streaming-1.2.0.1.
.jar .
jar -input /tmp/hbase_splits -output /tmp/hbase_splits_txt -inputformat
SequenceFileAsTextInputFormat

  执行之后,我们会看到如下的提示:

  

...
INFO streaming.StreamJob: Output: /tmp/hbase_splits_txt

  再执行这一句

  

hadoop fs -cat /tmp/hbase_splits_txt/*

  执行之后,我们会看到类似这样的结果

  

   2e  2f 4d   6e 5f     2f         2d
      (null)
   2f     2f         2d
(null)
   2f   5f 4d     2f         2d
    (null)
   2f    6c  3a    5f     2e 4a   2f
      2d        (null)

  

  7.生成HFiles

HADOOP_CLASSPATH-security.jar hive -f /$Path_to_Input_Files_on_Hive_Client/hfiles.hql

  

  以上内容是hdp的用户手册中推荐的方式,然后我顺便也从网上把最后的一步的命令格式给找出来了

  

hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable

  

Hbase 学习(十一)使用hive往hbase当中导入数据的更多相关文章

  1. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  2. sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据

    1.安装sqoop 请参考http://www.cnblogs.com/Richardzhu/p/3322635.html 增加了SQOOP_HOME相关环境变量:source ~/.bashrc  ...

  3. Hbase 学习笔记(一) Hbase的物理模型 Hbase为每个值维护了一个多级索引,即<key, column family, column name, timestamp>

      比如第一个region 代表 0-100 第二个region 代表 101 -200的 分的越多越不好管理,但同时方便了并行化处理,并发度越高,处理的越快.mapreduce就是按照rowkey的 ...

  4. hive 创建表和导入数据实例

    //创建数据库create datebase hive;//创建表create table t_emp(id int,name string,age int,dept_name string,like ...

  5. hive 从Excel中导入数据

    拿到Excel表后将数据保留,其他的乱七八糟都删掉,然后另存为txt格式的文本,用nodepad++将文本转换为UTF-8编码,此处命名为cityprovince.txt 将cityprovince. ...

  6. HBase学习系列

    转自:http://www.aboutyun.com/thread-8391-1-1.html 问题导读: 1.hbase是什么? 2.hbase原理是什么? 3.hbase使用中会遇到什么问题? 4 ...

  7. Hive over HBase和Hive over HDFS性能比较分析

    http://superlxw1234.iteye.com/blog/2008274 环境配置: hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node) hbase ...

  8. 【转】Hive over HBase和Hive over HDFS性能比较分析

    转载:http://lxw1234.com/archives/2015/04/101.htm 环境配置: hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node) h ...

  9. 集成Hive和HBase

    1. MapReduce 用MapReduce将数据从本地文件系统导入到HBase的表中, 比如从HBase中读取一些原始数据后使用MapReduce做数据分析. 结合计算型框架进行计算统计查看HBa ...

随机推荐

  1. 安装 Vbundle 的笔记

    Vbundle 挺好用的,能够很方便管理Vim的一些插件.虽然Vbundle的安装方法看的很简单,但是它的配置却让我弄了很久,现在记录如下,方便后面安装时再出现相同的问题: 我按照这里的官方提示的安装 ...

  2. CentOS7静态IP设置

    [root@localhost network-scripts]# pwd /etc/sysconfig/network-scripts [root@localhost network-scripts ...

  3. java.lang.SecurityException:Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged

    转自:http://www.cnblogs.com/orientsun/archive/2012/11/04/2753270.html Error: java.lang.SecurityExcepti ...

  4. 行为类模式(七):观察者(Observer)

    定义 定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新. UML 优点 观察者和被观察者之间是松耦合的,分别可以各自独立改变. Subject在发送 ...

  5. 【嵌入式】bootloader,linux,filesystem的烧写

    平台: 深圳市优龙科技有限公司的FS2410(基于ARM9) 准备: 1.用串口(UART1,J8)线与PC机相连,这个是用来传输数据和显示信息的 2.连接USB数据下载线(usb device),注 ...

  6. webpack的css处理

    webpack打包处理css的时候需要两个loader: style-loader 和css-loader 安装: npm install style-loader css-loader --save ...

  7. Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  8. 关于Android开发的一些个人总结(2016.04)

    引言 本文主要目标是整理下我在2016年第一季度针对Android学习的内容,不会深入细节,只是简单聊聊框架以及学习的方法. 我的Android之路 因为之前对Android有一个简单的接触,研究生期 ...

  9. eclipse Maven 使用记录 ------ 建立app项目

    maven 项目构建工具 , 如今已逐渐取代ant的笨拙配置方式 ,使项目管理更加简单,规范,结构更加清晰,这里记录跟eclipse集成的一些步骤  1.从apache maven项目下下载maven ...

  10. 从事务隔离级别谈到Hibernate乐观锁,悲观锁

    数据库的事务,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单 ...