elasticsearch入門系列">elasticsearch入門系列
1047
2022-05-30
大家好,我是不溫卜火,是一名計算機學院大數據專業(yè)大二的學生,昵稱來源于成語—不溫不火,本意是希望自己性情溫和。作為一名互聯網行業(yè)的小白,博主寫博客一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有csdn這一個平臺,博客主頁:https://buwenbuhuo.blog.csdn.net/
此篇為大家?guī)淼氖荋Base與Hive的集成。
目錄
一. 兩者對比
1. Hive
2. HBase
二. HBase與Hive集成使用
1. 編譯jar包
2. 環(huán)境準備
3. 測試案例1
4. 測試案例2
標注: 此處為反爬蟲標記:讀者可自行忽略
1
2
原文地址:https://buwenbuhuo.blog.csdn.net/
一. 兩者對比
1. Hive
(1) 數據倉庫
Hive的本質其實就相當于將HDFS中已經存儲的文件在Mysql中做了一個雙射關系,以方便使用HQL去管理查詢。
(2) 用于數據分析、清洗
Hive適用于離線的數據分析和清洗,延遲較高。
(3) 基于HDFS、MapReduce
Hive存儲的數據依舊在DataNode上,編寫的HQL語句終將是轉換為MapReduce代碼執(zhí)行。
2. HBase
(1) 數據庫
是一種面向列存儲的非關系型數據庫。
(2) 用于存儲結構化和非結構化的數據
適用于單表非關系型數據的存儲,不適合做關聯查詢,類似JOIN等操作。
(3) 基于HDFS
數據持久化存儲的體現形式是Hfile,存放于DataNode中,被ResionServer以region的形式進行管理。
(4) 延遲較低,接入在線業(yè)務使用
面對大量的企業(yè)數據,HBase可以直線單表大量數據的存儲,同時提供了高效的數據訪問速度。
二. HBase與Hive集成使用
1. 編譯jar包
由于HBase與Hive的集成的這兩個版本中無法兼容。所以,我們重新編譯:hive-hbase-handler-1.2.2.jar!!好氣!!
步驟
:
1. 新建一個Java項目名稱為hive-hbase-handler
2. 找到源碼包所需要編譯的部分,copy到項目內
3. 添加依賴(此包為hbase和hive的lib包里的所有文檔的整合,如有需要可私聊博主)
4. 打包jar包
5.替換原Jar包
2. 環(huán)境準備
1.因為我們后續(xù)可能會在操作Hive的同時對HBase也會產生影響,所以Hive需要持有操作HBase的Jar,那么接下來拷貝Hive所依賴的Jar包(或者使用軟連接的形式)。
[bigdata@hadoop002 module]$ sudo vim /etc/profile export HBASE_HOME=/opt/module/hbase export HIVE_HOME=/opt/module/hive // 立即生效 [bigdata@hadoop002 module]$ source /etc/profile
1
2
3
4
5
6
7
軟連接
[bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-common-1.3.1.jar $HIVE_HOME/lib/hbase-common-1.3.1.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-server-1.3.1.jar $HIVE_HOME/lib/hbase-server-1.3.1.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-client-1.3.1.jar $HIVE_HOME/lib/hbase-client-1.3.1.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-protocol-1.3.1.jar $HIVE_HOME/lib/hbase-protocol-1.3.1.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-it-1.3.1.jar $HIVE_HOME/lib/hbase-it-1.3.1.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar [bigdata@hadoop002 lib]$ ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.3.1.jar
1
2
3
4
5
6
7
8
9
2. 在hive-site.xml中修改zookeeper的屬性
[bigdata@hadoop002 conf]$ sudo vim hive-site.xml // 添加如下內容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3. 測試案例1
目標:建立Hive表,關聯HBase表,插入數據到Hive表的同時能夠影響HBase表。
前提準備
// 啟動所需要的服務 [bigdata@hadoop002 module]$ start-dfs.sh [bigdata@hadoop003 module]$ start-yarn.sh [bigdata@hadoop002 zookeeper-3.4.10]$ bin/start-allzk.sh [bigdata@hadoop002 hbase]$ bin/start-hbase.sh
1
2
3
4
5
6
7
1. 在Hive中創(chuàng)建表同時關聯HBase
// 需要另開窗口 [bigdata@hadoop002 hive]$ bin/hive CREATE TABLE hive_hbase_emp_table( 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_emp_table");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
提示:完成之后,可以分別進入Hive和HBase查看,都生成了對應的表
這是需要查看下Hbase里是否有表建立
[bigdata@hadoop002 hbase]$ bin/hbase shell // 查看表格 hbase(main):001:0> list
1
2
3
4
2. 在Hive中創(chuàng)建臨時中間表,用于load文件中的數據
提示:不能將數據直接load進Hive所關聯HBase的那張表中
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';
1
2
3
4
5
6
7
8
9
10
11
3. 向Hive中間表中l(wèi)oad數據
上傳數據
hive> hive> load data local inpath '/opt/module/datas/emp.txt' into table emp;
1
4. 通過insert命令將中間表中的數據導入到Hive關聯HBase的那張表中
hive> insert into table hive_hbase_emp_table select * from emp;
1
5. 查看Hive以及關聯的HBase表中是否已經成功的同步插入了數據
Hive
:
hive> select * from hive_hbase_emp_table;
1
HBase
:
hbase> scan ‘hbase_emp_table’
1
4. 測試案例2
目標:在HBase中已經存儲了某一張表hbase_emp_table,然后在Hive中創(chuàng)建一個外部表來關聯HBase中的hbase_emp_table這張表,使之可以借助Hive來分析HBase這張表中的數據。(前提要先完成案例1)
1. 在Hive中創(chuàng)建外部表
CREATE EXTERNAL TABLE relevance_hbase_emp( 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_emp_table");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2. 關聯后就可以使用Hive函數進行一些分析操作了
// 可快速查看內容,第一次比較慢 hive (default)> select * from relevance_hbase_emp;
1
2
本次的分享就到這里了,
好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力。
如果我的博客對你有幫助、如果你喜歡我的博客內容,請“” “評論”“”一鍵三連哦!聽說的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。
碼字不易,大家的支持就是我堅持下去的動力。后不要忘了關注我哦!
Hadoop HBase Hive
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。