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'