1. 程式人生 > >HBase與Hive的整合案例一

HBase與Hive的整合案例一

1.Hive與HBase的對比

   Hive

    1)資料倉庫
Hive 的本質其實就相當於將 HDFS 中已經儲存的檔案在 Mysql 中做了一個雙射關係,以方便使用 HQL 去管理查詢

    2)用於資料分析、清洗
Hive 適用於離線的資料分析和清洗,延遲較高

    3)基於 HDFS、MapReduce
Hive 儲存的資料依舊在 DataNode 上,編寫的 HQL 語句終將是轉換為 MapReduce 程式碼執行

   HBase

     1)資料庫
是一種面向列儲存的非關係型資料庫

     2)用於儲存結構化和非結構話的資料
適用於單表非關係型資料的儲存,不適合做關聯查詢,類似 JOIN 等操作

    3)基於 HDFS
資料持久化儲存的體現形式是 Hfile,存放於 DataNode 中,被 ResionServer 以 region 的形式進行管理

    4)延遲較低,接入線上業務使用
面對大量的企業資料,HBase 可以直線單表大量資料的儲存,同時提供了高效的資料訪問速度

2.案例一

   1)案例需求

建立一張Hive 表,關聯到HBase表,插入資料到 Hive 表的同時能夠同步資料到HBase表

   2)建立Hive表的同時關聯到HBase

CREATE TABLE hive_hbase(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = 
":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
tblproperties ("hbase.table.name" = "hbase_hive");

   上邊步驟之後進入Hive和HBase中查看錶hive_hbase和hbase_hive是否建立成功

   3)在Hive中建立臨時表,用於load資料到表中

不能直接load資料到關聯了HBase的那張表中,因為load是不執行Mapreduce的,所以必須通過一張臨時表來實現

CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by '\t';

   4)向Hive的臨時表中load資料

load data local inpath '/opt/package/hive/txt/emp.txt' into table emp;

emp.txt檔案中的資料:

7369	SMITH	CLERK	7902	1980-12-17	800.00		20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-4-2	2975.00		20
7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-5-1	2850.00		30
7782	CLARK	MANAGER	7839	1981-6-9	2450.00		10
7788	SCOTT	ANALYST	7566	1987-4-19	3000.00		20
7839	KING	PRESIDENT		1981-11-17	5000.00		10
7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30
7876	ADAMS	CLERK	7788	1987-5-23	1100.00		20
7900	JAMES	CLERK	7698	1981-12-3	950.00		30
7902	FORD	ANALYST	7566	1981-12-3	3000.00		20
7934	MILLER	CLERK	7782	1982-1-23	1300.00		10

   5)將臨時表中的資料通過insert命令匯入到與HBase關聯的那張表中去(hive_hbase表)

 insert into table hive_hbase select * from emp;

這時候你會發現會執行Mapreduce  

   6)檢視Hive和HBase中的表是否已經同步了資料

select *from hive_hbase;


scan 'hbase_hive'