之前的文章帶大家一起從hadoop最開始的搭建,到最終寫一個MapReduce結尾,相信大家也基本瞭解什麼是hadoop。當然了現如今的開發,基本少很少有人寫MapReduce,因為寫起來太麻煩了,又是map,又是reduce,還要寫執行的客戶端。程式猿們太喜歡偷懶了,所以hive就出現了
Hive
Hive是一個資料倉儲基礎工具在Hadoop中用來處理結構化資料。它架構在Hadoop之上,總歸為大資料,並使得查詢和分析方便。並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行.
是的,你沒有看錯,hive就是把sql語句轉換為我們MapReduce任務的,所以做hive開發完全可以不懂程式設計,只需要會寫sql語句就可以了。
貼一張hive的結構圖,大家可以體會以下
注意
Hive不是為線上事務處理而設計。它最適合用於傳統的資料倉儲任務
接下來就帶大家在CenterOS7
上搭建一下Hive環境
Hive安裝有三種模式
嵌入模式:
元熟悉資訊被儲存在Hive自帶的Derby資料庫中
只允許建立一個連線
多用於Demo
本地模式:
後設資料資訊被儲存在MySQL資料庫中
MySQL資料庫與Hive執行在同一臺物理機器上
多用於開發和測試
遠端模式:
Hive與Mysql安裝在不同的作業系統上
在這裡就給搭建演示本地模式安裝,後設資料存在mysql中
第一步
- 準備Hive-2.3.3工具包:點選下載
- 放入linux自己目錄下,通過
tar -zxvf xxxxx
命令解壓,然後通過以下命令建立一個臨時目錄mkdir hive_tmpdir
為後面配置做準備
第二步
- 進入conf目錄,複製
hive-default.xml.template
為hive-site.xml
檔案
cp hive-default.xml.template hive-site.xml
複製程式碼
- 配置
hive-site.xml
檔案
將所有的${system:java.io.tmpdir}
替換為第一步建立的臨時目錄hive_tmpdir
如果後面還接的有類似這樣引用的變數${},可以直接刪除
如:
<property>
<name>hive.exec.local.scratchdir</name>
#<value>${system:java.io.tmpdir}/${system:user.name}</value>
<value>/home/mmcc/hive_tmpdir</value>
</property>
...
複製程式碼
然後將hive.metastore.schema.verification
的值設定為false,取消metastore驗證,
再將datanucleus.schema.autoCreateTables
設定為true,自動在資料庫裡建表。
其次配置我們的mysql資料庫,關於mysql的安裝大家可以自行研究。
依然是在hive-site.xml
中
<property>
<name>javax.jdo.option.ConnectionURL</name> #資料庫連結
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value> #資料庫驅動名
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value> #資料庫賬號
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value> #資料庫密碼
<description>password to use against metastore database</description>
</property>
複製程式碼
配置好hive-site.xml
之後儲存退出。
第三步
- 將mysql的驅動包放入hive的lib目錄下,mysql-5.1.25驅動下載
- 去掉hive裡的sl4j的jar包,可能會和hadoop裡的衝突(保留log4j-api和log4j-core和log4j-web)
第四步
到這裡關於準備配置及一些準備工作就已經完成了,接下來就可以正式進行啟動的流程了。首先關閉hadoop的安全模式,避免出現不必要的錯誤,執行命令hdfs dfsadmin -safemode leave
,然後執行以下命令進行啟動。
#啟動hive的metastore服務
[root@master bin]# ./hive --service metastore &
#初始化後設資料為mysql資料庫(只有第一次需要),這一步完成後,在mysql裡其實就會生成hive表
[root@master bin]# ./schematool -dbType mysql -initSchema #
#接下來可以直接執行hive了
[root@master bin]# ./hive
複製程式碼
然後我們就進入到了hive的命令列模式,就可以做hive的執行操作了。