我们可以有很多方式可以把数据导入到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文件

  

  1. -- pagecounts data comes from http://dumps.wikimedia.org/other/
  2. pagecounts-raw/
  3. -- documented http://www.mediawiki.org/wiki/Analytics/Wikistats
  4. -- define an external table over raw pagecounts data
  5. CREATE TABLE IF NOT EXISTS pagecounts (projectcode STRING, pagename
  6. STRING, pageviews STRING, bytes STRING)
  7. ROW FORMAT
  8. DELIMITED FIELDS TERMINATED BY ' '
  9. LINES TERMINATED BY '\n'
  10. STORED AS TEXTFILE
  11. LOCATION '/tmp/wikistats';
  12. -- create a view, building a custom hbase rowkey
  13. CREATE VIEW IF NOT EXISTS pgc (rowkey, pageviews, bytes) AS
  14. SELECT concat_ws('/',
  15. projectcode,
  16. concat_ws('/',
  17. pagename,
  18. regexp_extract(INPUT__FILE__NAME, 'pagecounts-(\\d{8}-\\d{6})\
  19. \..*$))),
  20. pageviews, bytes
  21. FROM pagecounts;
  22. -- create a table to hold the input split partitions
  23. CREATE EXTERNAL TABLE IF NOT EXISTS hbase_splits(partition STRING)
  24. ROW FORMAT
  25. SERDE 'org.apache.hadoop.hive.serde2.binarysortable.
  26. BinarySortableSerDe'
  27. STORED AS
  28. INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
  29. OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.
  30. HiveNullValueSequenceFileOutputFormat'
  31. LOCATION '/tmp/hbase_splits_out';
  32. -- create a location to store the resulting HFiles
  33. CREATE TABLE hbase_hfiles(rowkey STRING, pageviews STRING, bytes STRING)
  34. STORED AS
  35. INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
  36. OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
  37. TBLPROPERTIES('hfile.family.path' = '/tmp/hbase_hfiles/w');

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

  

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

  

  c.创建hfiles.hql

  

  1. -security.jar;
  2. .jar;
  3. ;
  4. SET hive.mapred.partitioner=org.apache.hadoop.mapred.lib.
  5. TotalOrderPartitioner;
  6. SET total.order.partitioner.path=/tmp/hbase_splits;
  7. -- generate hfiles using the splits ranges
  8. INSERT OVERWRITE TABLE hbase_hfiles
  9. SELECT * FROM pgc
  10. CLUSTER BY rowkey;

  

  2.导入数据

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

  

  1. mkdir /$Path_to_Input_Files_on_Hive_Client/wikistats
  2. wget http:/
  3. pagecounts.gz
  4. hadoop fs -mkdir /$Path_to_Input_Files_on_Hive_Client/wikistats
  5. hadoop fs .
  6. gz /$Path_to_Input_Files_on_Hive_Client/wikistats/

  3.创建必要的表

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

  1. $HCATALOG_USER-f /$Path_to_Input_Files_on_Hive_Client/tables.ddl

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

  

  1. OK
  2. Time taken: 1.886 seconds
  3. OK
  4. Time taken: 0.654 seconds
  5. OK
  6. Time taken: 0.047 seconds
  7. OK
  8. Time taken: 0.115 seconds

  

  4.确认表已经正确创建

  执行以下语句

  

  1. $HIVE_USER;"

  

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

  

  1. ...
  2. OK
  3. aa Main_Page
  4. aa Special:ListUsers
  5. aa Special:Listusers

  再执行

  

  1. $HIVE_USER;"

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

  

  1. ...
  2. OK
  3. aa
  4. aa
  5. aa
  6. ...

  

  5.生成HFiles分隔文件

  

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

  

  为了确认,执行以下命令

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

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

  

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

  再执行这一句

  

  1. hadoop fs -cat /tmp/hbase_splits_txt/*

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

  

  1. 2e 2f 4d 6e 5f 2f 2d
  2. (null)
  3. 2f 2f 2d
  4. (null)
  5. 2f 5f 4d 2f 2d
  6. (null)
  7. 2f 6c 3a 5f 2e 4a 2f
  8. 2d (null)

  

  7.生成HFiles

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

  

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

  

  1. 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. 怎么在eclipse中查到这个类用的是哪个jar的类和Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案

    找到了一个办法,你先按F3,然后点击Change Attached Source..按钮,在弹出的框里有个路径,我的路径是D:/SNFWorkSpace/JAR/~importu9.jar,然后你去引 ...

  2. 支付接口中常用的加密解密以及验签rsa,md5,sha

    一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...

  3. 高性能mysql读书笔记(一):Schema与数据类型优化

    4.5 加快ALTER TABLE 操作的速度 原理: MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题. MySQL 执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧 ...

  4. 高效开发iOS系列 -- 那些不为人知的KVC

    我的简书地址:http://www.jianshu.com/p/a6a0abac1c4a valueForKeyPath 本篇来解说一下那些不为人知,也常常被忽略掉,而且非常有用的KVC干货小技巧 获 ...

  5. Sql Server删除数据表中重复记录 三种方法

    本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...

  6. Atitit 软件体系的进化,是否需要一个处理中心

    Atitit 软件体系的进化,是否需要一个处理中心 1.1. 进化树上是没有主干的..1 1.2. ,软件进化的行为1::主要就是给新的应用编写新的程序.1 1.3. ,软件进化的行为2::软件的维护 ...

  7. 基于Xilinx Zynq Z7045 SoC的CNN的视觉识别应用

    基于Xilinx Zynq Z7045 SoC的CNN的视觉识别应用 由 judyzhong 于 星期三, 08/16/2017 - 14:56 发表 作者:stark 近些年来随着科学技术的不断进步 ...

  8. ElasticSearch + xpack 使用

    ElasticSearch 是一个高可用开源全文检索和分析组件.提供存储服务,搜索服务,大数据准实时分析等.一般用于提供一些提供复杂搜索的应.我们为什么要选择 ElasticSearch ?因为它是一 ...

  9. 如何在 Linux 上设置密码策略

    https://linux.cn/article-2518-1.html 用户帐号管理是系统管理员最重要的工作之一.而密码安全是系统安全中最受关注的一块.在本教程中,我将为大家介绍如何在 Linux ...

  10. 秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现

    Reference:  http://blog.ruaby.com/?p=256 并发事务处理带来的问题? 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从 ...