Hive安裝及hive-site.xml不生效的踩坑
一、Hive安裝及配置
1,把apache-hive-2.3.6-bin.tar.gz上傳到linux的/software目錄下
清華大學資源包:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
2,解壓apache-hive-2.3.6-bin.tar.gz到/module/目錄下面:tar -zxvf apache-hive-2.3.6-bin.tar.gz -C /module/
3,修改apache-hive-2.3.6-bin.tar.gz的名稱為hive-2.3.6 :mv apache-hive-2.3.6-bin/ hive-2.3.6
4,修改/module/hive/conf目錄下的hive-env.sh.template名稱為hive-env.sh:mv hive-env.sh.template hive-env.sh
5,配置hive-env.sh檔案:vi hive-env.sh
配置HADOOP_HOME路徑:export HADOOP_HOME=/module/hadoop-2.7.2
配置HIVE_CONF_DIR路徑:export HIVE_CONF_DIR=/module/hive/conf
二、Hadoop叢集配置
1,必須啟動HDFS和YARN:sbin/start-dfs.sh ,sbin/start-yarn.sh
2,進入hadoop-2.7.2 目錄,建立/tmp和/user/hive/warehouse兩個目錄並修改他們的同組許可權可寫
bin/hadoop fs -mkdir /tmp ,bin/hadoop fs -mkdir -p /user/hive/warehouse
改許可權:bin/hadoop fs -chmod g+w /tmp , bin/hadoop fs -chmod g+w /user/hive/warehouse
建立目錄修改許可權,這兩個檔案看不見?三、修改Hive環境變數,之後source一下
#HIVE_HOME
export HIVE_HOME=/module/hive-2.3.6
export PATH=$PATH:$HIVE_HOME/bin
hive環境變數三、Hive元資料配置到MySql
一、驅動拷貝
1.在/software/mysql-libs目錄下解壓mysql-connector-java-5.1.27.tar.gz驅動包:
tar -zxvf mysql-connector-java-5.1.27.tar.gz
官網包:https://dev.mysql.com/downloads/file/?id=476197
2.拷貝/software/mysql-libs/mysql-connector-java-5.1.27目錄下的mysql-connector-java-5.1.27-bin.jar到/module/hive-2.3.6/lib/ :
cp mysql-connector-java-5.1.27-bin.jar /module/hive-2.3.6/lib/
二、配置Metastore到MySql
1.在/module/hive/conf目錄下建立一個hive-site.xml :vi hive-site.xml
2.根據官方文件配置引數,拷貝資料到hive-site.xml檔案中
2020421:mysql連線資訊後增加 &useSSL=false ,不然hive 的任何命令會報ssl錯誤
https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>000000</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>
配置檔案修改3.關閉元資料檢查:hive-site.xml 裡面增加一個配置:不加這個使用Hive的時候會連線超時,並且找不到元資料
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
4,進入到Hive的conf目錄下(為什麼別人是進bin?我進入bin執行的是derby的初始化,會失敗),此條已廢棄,存在問題,詳細資訊見下面解釋。
4,更新: 在使用了上面的conf目錄進行元資料初始化的之後,存在一個問題:即,必須在conf目錄下進入Hive才會得到mysql的元資料,在別的目錄下進Hive會是預設的derby元資料,而且會超時報錯。也就是說實際上並沒有做到真正的使用mysql儲存元資料,困擾了一晚上,最後找的了下面的解決方式。
原因:是因為hive依賴hadoop(hive-env.sh裡設定有hadoop的路徑),但是hadoop的環境變數卻沒有讀到hive-site.xml
解決方式:
參考文件:
https://blog.csdn.net/lsr40/article/details/78026125(hive-site.xml修改之後不生效與一些beeline,hiveserver2的報錯)
重要重要重要
1,hadoop的配置檔案hadoop-env.sh中(其實就是hadoop的根目錄下的etc/hadoop裡面的那些配置檔案裡)
找到export HADOOP_CLASSPATH這行,修改值為
export HADOOP_CLASSPATH=$HIVE_HOME/conf:$HADOOP_CLASSPATH(HIVE_HOME必須配置環境變數,或者寫死)
修改Hadoop的配置檔案2,之後再回到Hive的bin目錄下進行元資料初始化,這樣無論在哪個目錄下進入Hive,使用的都會是mysql。(bin目錄下進行的初始化才是真的使用了mysql元資料)
配置元資料型別為mysql:schematool -dbType mysql -initSchema
注:如果建立失敗,看看site 檔案裡(node1:3306/hive?createDatabaseIfNotExist=true),那個Hive的資料庫是不是已經在Mysql 建立了,刪掉再重新初始化即可。
出現這個就是對的,出現derby是不對的5.配置完畢後,如果啟動hive異常,可以重新啟動虛擬機器。(重啟後,別忘了啟動hadoop叢集)