`
wbj0110
  • 浏览: 1549614 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Hive如何加载和导入HBase的数据

阅读更多
  • 当我们用HBase 存储实时数据的时候, 如果要做一些数据分析方面的操作, 就比较困难了, 要写MapReduce Job。 Hive 主要是用来做数据分析的数据仓库,支持标准SQL 查询, 做数据分析很是方便,于是便很自然地想到用Hive来载入HBase的数据做分析, 但是很奇怪地是, 上网查了一下, 只看到以下两种情况:

    1. 如何用Hive 往HBase里面插入大量的数据。

    2. Hive 与HBase集成, 直接从Hive里面连HBase的数据库进行查询。参考链接: https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

    选项1是我们需求的逆操作, 直接忽略, 选项2,  虽然没有做专门的Benchmark, 但总感觉直接对HBase进行查询操作不怎么靠谱, 如果我们要频繁做很多类型的数据分析, 那HBase的压力一定会倍增。

    难道没有把HBase里面的数据直接导入到Hive当中的工具或者方法吗?

    找了一会, 似乎没找到, 那么只好自己想一个解决方案了。

    思路:

    利用选项2,  先打通Hive对HBase指定表的全表访问, 再建立一个新的空表, 把查询出来的数据全部导入到新表当中, 以后的所有数据分析操作在新表中完成。

    说干就干, 让我们试一个简单的例子。

    首先在HBase里面建一个表, 名为 student, 包含 id 和 name 两个column.

    1.hbase shell
    2. 
    3.create 'student', 'id', 'name'
     

    向表中插入两行数据

    1.put 'student', 'row1', 'id:val', '1'
    2.put 'student', 'row1', 'name:val', 'Tony'
    3.put 'student', 'row2', 'id:val', '2'
    4.put 'student', 'row2', 'name:val', 'Mike'
     

    注意:在插入数据的时候一定要指定column (如id:val, name:val) 直接使用column family (如 id, name) 去存数据会导致后面Hive 建表的时候有问题。

    扫描此表, 确定数据已经插入

    1.scan 'student'
    2.ROW                               COLUMN+CELL                                                                                    
    3.row1                             column=id:val, timestamp=1384939342989, value=1                                                
    4.row1                             column=name:val, timestamp=1384939365511, value=Tony                                           
    5.row2                             column=id:val, timestamp=1384939351444, value=2                                                
    6.row2                             column=name:val, timestamp=1384939379245, value=Mike
     

     

    建立Hive 对HBase的访问

    参考: https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

    这里我们使用的是Pivotal 公司的Pivotal Hadoop, 

    1.hive --auxpath /usr/lib/gphd/hive/lib/hive-hbase-handler-0.11.0-gphd-2.1.1.0.jar,/usr/lib/gphd/hbase/hbase.jar,/usr/lib/gphd/zookeeper/zookeeper.jar,/usr/lib/gphd/hbase/lib/guava-11.0.2.jar -hiveconf hbase.zookeeper.quorum=centos62-3,centos62-4,centos62-5
     

    解释一下参数:

    后面三个jar 包主要是Hive 访问时需要用到的, hhbase.zookeeper.quorum=centos62-3,centos62-4,centos62-5 是指hbase使用的是这三个zookeeper, 这样就不用指定hbase master了。

    这个命令运行完以后会打开Hive 的输入终端。

    从Hive建立可以访问HBase的外部表

    1.CREATE EXTERNAL TABLE student(key string, id int, name string)
    2.STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    3.WITH SERDEPROPERTIES ("hbase.columns.mapping" "id:val,name:val")
    4.TBLPROPERTIES("hbase.table.name" "student");
     

    扫描student表, 确认访问成功:

    1.hive&gtselect * from student;
    2.OK
    3.row1    1    Tony
    4.row2    2    Mike
     

    但是此时这个表实际上是一个虚拟表, 实际的数据还在HBase中。 下面需要在Hive中另建一个结构一样的空表, 再把数据导出来。

    Hive中建立一个新的空表

    1.CREATE TABLE new_student (
    2.key string,
    3.id INT,
    4.name STRING)
    5.ROW FORMAT DELIMITED
    6.FIELDS TERMINATED BY '\t'
    7.STORED AS TEXTFILE;
     

    将数据从HBase中导入到新的Hive表中

    1.hive> INSERT OVERWRITE TABLE new_student SELECT * FROM student;
     

    确认新表中数据正确:

    1.hive&gtselect * from new_student;
    2.OK
    3.row1    1    Tony
    4.row2    2    Mike
     

    至此大功告成!

    以后所有复杂的数据查询和数据分析都可以在new_student表中完成。

     

分享到:
评论

相关推荐

    hive和hbase整合

    配置,测试,导入数据详细操作,CREATE TABLE hive_hbase_table(key int, value string,name string) hadoop jar /usr/lib/hbase/hbase-0.90.4-cdh3u3.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY, catgyname...

    Hive数据导入HBase的方法.docx

    HIVE建表时可以指定映射关系直接读取HBASE的数据,相当于有了一个HBASE向HIVE的通道。那HIVE向HBASE有通道吗?本文主要讲述了Hive库数据如何入到HBASE中。

    java解决hive快速导数据到Hbase代码

    基于hadoop的,java实现hive快速导数据到Hbase解决方案。

    mapreduce方式入库hbase hive hdfs

    mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载

    建立Hive和Hbase的映射关系,通过Spark将Hive表中数据导入ClickHouse

    建立Hive和Hbase的映射关系,通过Spark将Hive表中数据导入ClickHouse对应的jar包

    hbase导出csv,文本,html文件

    通过条件查询hbase数据导出csv,文本,html等文件,实现方式:将hbase关联hive,然后将hive数据导入真实表,在将真实表数据导入sql数据库

    使用spark对网站用户行为分析

    4.使用Sqoop将数据从Hive导入MySQL 5.使用Sqoop将数据从MySQL导入HBase 6.使用HBase Java API把数据从本地导入到HBase中 7.使用R对MySQL中的数据进行可视化分析 内含三份报告和数据集,报告中有源码,是用spark做的

    大数据综合大作业和数据集

    1.对文本文件形式的原始数据集进行预处理 ...4.使用Sqoop 将数据从Hive导入MySQL 5.使用Sqoop将数据从MySQL导入HBase 6.使用HBase Java API把数据从本地导入到HBase中 7.使用R对MySQL中的数据进行可视化分析

    spark大作业.zip

    使用Spark框架进行网站用户购物分析 ...4、使用Sqoop将数据从Hive导入MySQL 5、使用Sqoop将数据从MySQL导入HBase 6、使用HBase Java API把数据从本地导入到HBase中 7、使用R对MySQL中的数据进行可视化分析

    大数据云计算技术系列 Hadoop之Hbase从入门到精通(共243页).pdf

    一、 HBase技术介绍 ...此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

    分布式数据库课程设计+基于Hbase的滴滴出行数据分析+Hive+Hadoop+Mysql+Sqoop+可视化

    将爬取到的滴滴出行相关数据整理后上传存储到Hbase中,然后导入到Hive中并进行数据分析,将数据分析后的结果通过Sqoop导入到Mysql中,最后对数据进行可视化。

    hadoop-docker-nn-一键构造大数据平台

    一键构造大数据平台。使用 docker 完成hadoop hbase hive集群部署,hbase+hive 数据同步,启用 snappy 格式;可单机版部署,也可 k8s 部署。... 通过hive创建hbase表,在hbase中增加数据,查看hbase数据。

    hbase导入话单数据mapreduce函数实现执行过程实例(博客附件)

    这是一篇博客的附件。 博客地址:http://blog.csdn.net/luckymelina/article/details/22889383

    基于Hadoop豆瓣电影数据分析实验报告

    注意:豆瓣网站的数据形式为文本文件(必须将导入到hive中做处理)。也可以为CSV文件,例如下图: 针对本次实验,我们需要用到Hadoop集群作为模拟大数据的分析软件,集群环境必须要包括,hdfs,hbase,hive,flume...

    23-Sqoop数据导入导出1

    2. 练习使用Sqoop将数据从Mysql中导入到HBase中 3. 练习使用Sqoop将数据在Mysql与Hive之间的导入导出 4. Sqoop上的操作举例

    大数据简历,内含有数据项目的简历,大数据 简历

    2.采用Kstream框架对数据进行初步数据清洗与变换,使用Java API将数据导入HBase 3.使用Hive集成Hbase,对数据进行ETL,进一步清洗处理数据 4.协助使用Hive提取特征值,运用Spark ML构建模型 5.参与模型检验与随机...

    HBase数据库检索性能优化策略

    Pig和Hive为HBase提供了高层语言支持,使其可以进行数据统计(可实现多表join等),Sqoop则为其提供RDBMS数据导入功能。HBase不能支持where条件、Orderby查询,只支持按照主键Rowkey和主键的range来查询,但是可以...

    元数据管理Atlas预研_v0.1.docx

    本文主要以atlas0.8.4为例,适配hadoop2.8.5,hive1.2.1,hbase1.3.1,安装集成。以及导入hive元数据,hbaes元数据其中遇到的一些问题和解决办法,包括hive列血缘关系生成。

    Hadoop豆瓣电影分析可视化源码

    针对本次实验,我们需要用到Hadoop集群作为模拟大数据的分析软件,集群环境必须要包括,hdfs,hbase,hive,flume,sqoop等插件,最后结合分析出来的数据进行可视化展示,需要用到Python(爬取数据集,可视化展示)...

Global site tag (gtag.js) - Google Analytics