Hbase 学习(十一)使用hive往hbase当中导入数据
我们可以有很多方式可以把数据导入到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当中导入数据的更多相关文章
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
1.安装sqoop 请参考http://www.cnblogs.com/Richardzhu/p/3322635.html 增加了SQOOP_HOME相关环境变量:source ~/.bashrc ...
- Hbase 学习笔记(一) Hbase的物理模型 Hbase为每个值维护了一个多级索引,即<key, column family, column name, timestamp>
比如第一个region 代表 0-100 第二个region 代表 101 -200的 分的越多越不好管理,但同时方便了并行化处理,并发度越高,处理的越快.mapreduce就是按照rowkey的 ...
- hive 创建表和导入数据实例
//创建数据库create datebase hive;//创建表create table t_emp(id int,name string,age int,dept_name string,like ...
- hive 从Excel中导入数据
拿到Excel表后将数据保留,其他的乱七八糟都删掉,然后另存为txt格式的文本,用nodepad++将文本转换为UTF-8编码,此处命名为cityprovince.txt 将cityprovince. ...
- HBase学习系列
转自:http://www.aboutyun.com/thread-8391-1-1.html 问题导读: 1.hbase是什么? 2.hbase原理是什么? 3.hbase使用中会遇到什么问题? 4 ...
- 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 ...
- 【转】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 ...
- 集成Hive和HBase
1. MapReduce 用MapReduce将数据从本地文件系统导入到HBase的表中, 比如从HBase中读取一些原始数据后使用MapReduce做数据分析. 结合计算型框架进行计算统计查看HBa ...
随机推荐
- 怎么在eclipse中查到这个类用的是哪个jar的类和Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
找到了一个办法,你先按F3,然后点击Change Attached Source..按钮,在弹出的框里有个路径,我的路径是D:/SNFWorkSpace/JAR/~importu9.jar,然后你去引 ...
- 支付接口中常用的加密解密以及验签rsa,md5,sha
一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...
- 高性能mysql读书笔记(一):Schema与数据类型优化
4.5 加快ALTER TABLE 操作的速度 原理: MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题. MySQL 执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧 ...
- 高效开发iOS系列 -- 那些不为人知的KVC
我的简书地址:http://www.jianshu.com/p/a6a0abac1c4a valueForKeyPath 本篇来解说一下那些不为人知,也常常被忽略掉,而且非常有用的KVC干货小技巧 获 ...
- Sql Server删除数据表中重复记录 三种方法
本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...
- Atitit 软件体系的进化,是否需要一个处理中心
Atitit 软件体系的进化,是否需要一个处理中心 1.1. 进化树上是没有主干的..1 1.2. ,软件进化的行为1::主要就是给新的应用编写新的程序.1 1.3. ,软件进化的行为2::软件的维护 ...
- 基于Xilinx Zynq Z7045 SoC的CNN的视觉识别应用
基于Xilinx Zynq Z7045 SoC的CNN的视觉识别应用 由 judyzhong 于 星期三, 08/16/2017 - 14:56 发表 作者:stark 近些年来随着科学技术的不断进步 ...
- ElasticSearch + xpack 使用
ElasticSearch 是一个高可用开源全文检索和分析组件.提供存储服务,搜索服务,大数据准实时分析等.一般用于提供一些提供复杂搜索的应.我们为什么要选择 ElasticSearch ?因为它是一 ...
- 如何在 Linux 上设置密码策略
https://linux.cn/article-2518-1.html 用户帐号管理是系统管理员最重要的工作之一.而密码安全是系统安全中最受关注的一块.在本教程中,我将为大家介绍如何在 Linux ...
- 秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现
Reference: http://blog.ruaby.com/?p=256 并发事务处理带来的问题? 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从 ...