Hive的基本应用
| 實驗 目的 要求 | ? 目的:
? | ||||||||||||
| ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? | ?
? ? ? ? |
?
練習內容
任務一:Hive DDL的使用;
1、使用命令“hive”啟動hive,進入Hive控制臺;
2、創建內部表;
3、創建外部表;
4、創建分區表
5、使用hive DDL命令進行一些簡單的操作;
任務二:Hive DML的使用;
1、創建文本并寫入數據;
2、進行DML操作;
3、創建hdfs用于存放文件的位置,并查看是否創建成功;
4、上傳數據文件至hdfs;
5、查看上傳的文件內容;
6、對上傳的數據文件進行基本操作;
7、將查詢結果插入hive表中;
8、導出hive的表數據;
9、查看導出的數據;
?
任務三:Hive內置函數的基本操作;
1、獲取所有函數;
2、查看指定函數的使用方法;
3、進行表操作;
4、查看concat的使用方法;
5、連接ename,job字段;
任務四:Hive UDF開發;
1、創建maven工程項目Hive;
1.1、創建項目;
?
1.2、修改pom.xml文件,添加指定依賴;
2、Hive UDF開發;
2.1、編寫HelloUDF.Java文件;
2.2、導出項目為jar包;
2.3、上傳jar包至集群中;
3、編輯jar包上傳至服務器,并將自定義函數UDF添加到Hive中;
4、查看自定義函數中是否有以上傳的;
5、使用自定義函數進行查詢操作;
?
任務五:調優策略;
1、并行執行及JVM重用;
2、推測執行,合并小文件;
?
出現的問題與解決方案
排錯一:
錯誤:裝載hdfs至hive失敗
排錯思路:
- 查看指定目錄是否正確;
- 查看指定文件是否正確;
- 查看命令應用是否正確;
原因分析:之前在上傳數據文件至hdfs時,系統默認刪除了源文件
解決方案:重新編寫數據文件再次上傳;
排錯二:
錯誤:運行自定義函數失敗;
排錯思路:
- 檢查jar包是否合適;
- 檢查環境是否合適;
- 檢自定義函數是否正確
原因分析:開發環境開發自定義函數時在jdk1.8環境,而Hadoop集群環境中使用的是jdk1.7環境,jar包jdk版本過高;
解決方案:更改maven項開發環境為jdk1.7版本,重新打包項目為jar包上傳至hdfs中使用;
?
知識拓展
1. Hive介紹
Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供類SQL查詢功能。
Hive是SQL解析引擎,它將SQL語句轉譯成M/R Job然后在Hadoop執行。
?
2. Hive架構
??? 用戶接口,包括 CLI,JDBC/ODBC,WebUI
??? 元數據存儲,通常是存儲在關系數據庫如 mysql, derby 中
??? 解釋器、編譯器、優化器、執行器
??? Hadoop:用 HDFS 進行存儲,利用 MapReduce 進行計算
Ps:hive的元數據并不存放在hdfs上,而是存儲在數據庫中(metastore),目前只支持 mysql、derby。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
元數據就是描述數據的數據,而Hive的數據存儲在Hadoop HDFS
數據還是原來的文本數據,但是現在有了個目錄規劃。
?
3. Hive與Hadoop的關系
Hive利用HDFS存儲數據,利用MapReduce查詢數據。
?
4. Hive安裝部署
Hive只是一個工具,不需要集群配置。
export HIVE_HOME=/usr/local/hive-2.0.1
export PATH=PATH:
HIVE_HOME/bin
配置MySql,如果不進行配置,默認使用derby數據庫,但是不好用,在哪個地方執行./hive命令,哪兒就會創建一個metastore_db
MySQL安裝到其中某一個節點上即可。
?
5. Hive的thrift服務
可以安裝在某一個節點,并發布成標準服務,在其他節點使用beeline方法。
啟動方式,(假如是在master上):
啟動為前臺服務:bin/hiveserver2
啟動為后臺:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
?
連接方法:
hive/bin/beeline 回車,進入beeline的命令界面
輸入命令連接hiveserver2
beeline> !connect jdbc:hive2://master:10000
beeline> !connect jdbc:hive2://localhost:10000
(master是hiveserver2所啟動的那臺主機名,端口默認是10000)
總結
- 上一篇: HBASE_API的应用
- 下一篇: Docker的使用(五:Docker中的