Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler.jar工具类 ;
hive-hbase-handler.jar在hive的lib包中而不是在hbase的lib中,hive0.6版本以后;
创建hive表的同时创建hbase表,删除 hive表的同时也会删除对应的hbase表。
 
使用前提:配置好hive和hbase对应的CDH版本,本案例使用的hive版本是hive-0.12.0-cdh5.0.0,HBase使用的版本是hbase-0.96.1.1-cdh5.0.0
 
添加$HIVE_HOME/conf/hive-env.sh配置属性
export HIVE_AUX_JARS_PATH=/home/hadoop/app/hbase-0.96.1.1-cdh5.0.0/lib

启动hive:推荐使用$HIVE_HOME/bin/hive -hiveconf hbase.zookeeper.quorum=hadoop000 -hiveconf hive.root.logger=DEBUG,console启动,可以看到更加详细的日志信息

案例一:操作简单表单cf

创建hive-hbase表:

CREATE TABLE hive_hbase_table_kv(key string, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_table_kv");
key与:key对应
value与:val对应
hbase_hive_table_kv为hbase的表名
hive_hbase_table_kv为hive表名

创建hive表并导入数据

CREATE TABLE kv (key STRING, value STRING);
LOAD DATA LOCAL INPATH '/home/spark/app/spark-1.0.0-bin-2.3.0-cdh5.0.0/examples/src/main/resources/kv1.txt' OVERWRITE INTO TABLE kv;
INSERT OVERWRITE TABLE hive_hbase_table_kv SELECT key, value FROM kv;

查看hive和hbase发现均创建了表,并且在两边均能查询到数据。

案例二:操作简单表多cf

CREATE TABLE hbase_table_2(key string, value1 string, value2 string, value3 string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,a:b,a:c,d:e"
);

b/c字段属于a列族,e属于d列族。

默认不指定hbase的表名就和hive的表名相同

导入hive表数据:INSERT OVERWRITE TABLE hbase_table_2 SELECT empno, ename, job, deptno  FROM emp;

案例三:操作分区表

CREATE TABLE hbase_table_3(key string, ename string, job string, sal double) partitioned by(pt string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,a:b,a:c,d:e")
TBLPROPERTIES ("hbase.table.name" = "hbase_table_3");

导入hive数据:

INSERT OVERWRITE TABLE hbase_table_3 PARTITION(pt='2013-08-01') SELECT empno, ename, job, sal FROM emp;

注意事项:

与hbase整合的有分区的表在使用hive查询时存在问题: select * from table查询不显示数据,select column from table可以查到数据

为什么select * from xxx 不显示数据?

select * from xxx在普通表中是直接读取HDFS文件,而使用hive-hbase-handler的方式来导入数据的时候,数据是存放在hbase的hdfs上;

在这里是直接从HBase进行查询。查询是成功了,但是hive并不会展示。

 
 

hive-hbase-handler方式导入hive表数据到hbase表中的更多相关文章

  1. oracle复制表数据,复制表结构

    1.不同用户之间的表数据复制 2.同用户表之间的数据复制 3.B.x中个别字段转移到B.y的相同字段 4.只复制表结构 加入了一个永远不可能成立的条件1=2,则此时表示的是只复制表结构,但是不复制表内 ...

  2. ORACLE+PYTHON实战:复制A表数据到B表

    最近在学习python ,看到了pythod的oracle,不仅可以一次fetch多条,也可以一次insert多条,想写一个复制A表数据到B表的程序来看看实际效率能不能提高.写完发现,非常惊艳!效率提 ...

  3. oracle 复制表数据,复制表结构

    1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus:insert into B.new(selec ...

  4. MySQL的奇怪的删表数据文件而表照样能打开

    MySQL的奇怪的删表数据文件而表照样能打开 author:headsen  chen      2017-11-02   17:57:17 现象:删除一个正在运行的mysql数据库的表的数据文件:* ...

  5. sql的存储过程实例--动态根据表数据复制一个表的数据到另一个表

    动态根据表数据复制一个表的数据到另一个表 把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中 如:mac_id=12345678910,则后两位10 对应表为track ...

  6. MySQL用sql复制表数据到新表的方法

    用sqlyog无法直接复制出一个不同表名的表来,只能copy到其他库上同名的表. 在MySQL数据库中,应该如何用sql将表数据复制到新表中呢? 本人通过试验测试成功了,而且相当简单易懂,速度也非常快 ...

  7. Oracle sqlldr 在DOS窗口导入多列数据到数据库表

    sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...

  8. mysql复制表数据,多表数据复制到一张表

    对于mysql 复制表数据可以使用 insert into select 方式 示例: $sql="insert into icarzoo.provider(providerId,provi ...

  9. 使用phpExcel批量上传excel表数据到mysql数据库中

    /*批量上传数据*/ if(isset($_POST['submit']) && $_POST['submit']=='上传文件') { //导入类文件 require_once (& ...

随机推荐

  1. linux下忘记mysql密码的几种找回方法

    今天我们主要是讲一下关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦.方法一(先进入root权限):# /etc/init.d/mysql stop# m ...

  2. 3.3 shell控制流结构

    shell中的控制流包括if then else语句,case语句,for循环,until循环,while循环,break控制,continue控制. 条件测试: 有时判断字符串是否相等或检查文件状态 ...

  3. SQL 基础--> NEW_VALUE 的使用

    --=============================== -- SQL 基础--> NEW_VALUE 的使用 --=============================== 通常 ...

  4. Oracle text组件安装

    1.目标:在数据库中,安装Oracle Text组件: 970473.1 MOS文档ID     2.组件相关视图:查询验证 #查询DB中的组件: #视图:USER_REGISTRY (注册) COM ...

  5. URL的应用

    1.对于Android来说,开发应用都会去访问服务器地址,那么就要连网,需要通过URL. 先new一个URL来获取路径,然后利用HttpURLConnection来连接并打开url,并通过get 请求 ...

  6. linux学习——sed工具

    命令格式: sed [-nefr] [动作] 1.sed可以分析标准输入(STDIN)的数据,然后将数据处理后,再将他输出到标准输出(STDOUT),他有替换.删除.新增.选定特定行等处理功能.sed ...

  7. 关于bfs时间轴

    对于bfs,由于是通过不断将平行位置的元素加入到队列进行的,所以它在一定情况下淡化了与队列外部的  "时间"   联系观念,通过一个数组记录内部的 "时间" 这 ...

  8. 关于递归函数中的return位置

    1.对于求是否有解的问题一般使用bool dfs()  其中return 可以放在递归式后面 2.对于需要更新解的问题一般使用int dfs()  其中return 不能放在递归式后面,必须放在函数最 ...

  9. Nginx基础学习

    参考博客: http://www.2cto.com/os/201212/176520.html http://os.51cto.com/art/201111/304611.htm http://www ...

  10. 前端可视化建模技术概览,包括:GoJS

    我推荐使用的: 库 网址 备注 GoJS https://gojs.net/latest/samples/flowchart.html 推荐使用 相关文章: 前端可视化建模技术概览:http://le ...