介紹
hive是在Hadoop中非常重要的角色。hive在1.2.0之前可以將編寫的SQL翻譯爲MapReduce程序,在2.0版本後將程序翻譯爲Spark程序。安裝前提
- Hadoop環境(hive不存儲實際的業務數據,數據存儲在HDFS上)
- mysql(此處hive中元數據存儲在mysql)
Hadoop環境
不在贅述,可以參考博文: Hadoop之Hadoop安裝
mysql環境準備
- 此處安裝mysql版本爲5.7
- 允許遠程登錄,不在贅述,可以參考博文: mysql允許root遠程登錄
注意: 如果正式環境,在瞭解真正的風險前,還請不要允許root遠程登錄。 - 創建數據庫
mysql> CREATE DATABASE `hive_db` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
安裝hive
與linux下其他軟件一樣,下載,解壓、配置。
如果不清楚兼容那個版本的Hadoop建議根據CDH提供的版本進行安裝。如果資源足夠使用,使用CDH安裝和管理Hadoop更爲簡易快捷。
CDH官方版本配置
hive配置
hive-site.xml配置
[gugu@master ~]$ vim ~/application/apache-hive-2.3.6-bin/conf/hive-site.xml
添加以下內容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive_db?characterEncoding=UTF-8&useSSL=false</value>
<!-- 指定元數據數據庫jdbc鏈接,注意原來鏈接地址上的&要修改成&否者會提示&後面必須要“;”的錯誤 -->
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<!-- 初始化的時候設置檢查版本,否者有可能初始化錯誤 -->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<!-- 指定元數據數據庫驅動類型 -->
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<!-- 元數據數據庫用戶名 -->
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<!-- 元數據數據庫密碼 -->
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<!-- hive在HDFS存儲路徑 -->
</property>
</configuration>
mysql驅動複製
在hive-site.xml中指定了驅動是mysql,我們需要將mysql的驅動複製到hive的lib下,hive才能連接mysql
[gugu@master ~]$ cp file/mysql-connector-java-5.1.47.jar ~/application/apache-hive-2.3.6-bin/lib/
環境變量添加
[gugu@master ~]$ vim .bash_profile
添加下面內容
# hive
export HIVE_HOME=/home/gugu/application/apache-hive-2.3.6-bin
export PATH=$PATH:$HIVE_HOME/bin
啓動hive
hive的啓動可以包含以下方式
- hive直接以交互式啓動
[gugu@master ~]$ hive
- 將hive啓動爲一個服務
可以在任意一臺機器上使用beeline客戶端連接hive服務,進行交互式查詢
# 啓動元數據服務
[gugu@master ~] nohup hive --service metastore >> /home/gugu/application/apache-hive-2.3.6-bin/log/metastore/metastore.log 2>&1 &
# 啓動hiveserver2
[gugu@master ~] nohup hive --service hiveserver2 >> /home/gugu/application/apache-hive-2.3.6-bin/log/hiveserver/hiveserver.log 2>&1 &
上面命令的介紹
"nohup"可以防止終端的session關閉時,服務退出
“>>” 表示輸出重定向,且以追加的方式,後面的路徑是標準輸出的輸出路徑,
“2>&1” 2表示的是錯誤輸出,&1指標準輸出,合起來就是將錯誤輸出和標準輸出到同一個文件
“&”最後面的指這條命令運行在後臺
linux輸出輸入擴展
設備 | 設備文件名 | 文件描述符 | 類型 |
---|---|---|---|
鍵盤 | /dev/stdin | 0 | 標準輸入 |
顯示器 | /dev/stdout | 1 | 標準輸出 |
顯示器 | /dev/stdout | 2 | 錯誤輸出 |
遇見問題
- 啓動時因爲xml中&轉義報錯
錯誤信息如下:
[Fatal Error] hive-site.xml:10:80: The reference to entity "useSSL" must end with the ';' delimiter.
Exception in thread "main" java.lang.RuntimeException: org.xml.sax.SAXParseException; systemId: file:/home/gugu/application/apache-hive-2.3.6-bin/conf/hive-site.xml; lineNumber: 10; columnNumber: 80; The reference to entity "useSSL" must end with the ';' delimiter.
出現原因:xml中&需要轉義
解決方法:將hive-site.xml中的"&“改成”&"
- 啓動時校驗版本報錯
錯誤如下:
MetaException(message:Version information not found in metastore. )
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:83)
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:92)
at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6896)
at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6891)
at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:7149)
at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:7076)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:239)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
解決方法:
在hive-site.xml中添加
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<!-- 初始化的時候設置檢查版本,否者有可能初始化錯誤 -->
</property>