1. 程式人生 > >hive-site.xml修改之後不生效與一些beeline,hiveserver2的報錯

hive-site.xml修改之後不生效與一些beeline,hiveserver2的報錯

首先,這裡的報錯的hive版本是0.13,版本確實有點舊,大家見怪不怪。

這裡說下幾個在0.13版本下遇到的報錯!

最開始要搭建hive必須先修改hive預設的引數,就是新增hive-site.xml

並且在裡面宣告資料庫的選擇,其實就jdbc的四要素:

<--!132-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop.beifeng.com:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>


<--!138-->
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>


<--!162-->
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
  <description>username to use against metastore database</description>
</property>


<--!168-->
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>123456</value>
  <description>password to use against metastore database</description>

並且要拷貝jdbc驅動包到hive安裝目錄下的lib目錄下
$ cp /opt/software/mysql-connector-java-5.1.34-bin.jar /opt/modules/apache-hive-0.13.1-bin/lib/

接下來就是該版本下是幾個常見的報錯:

報錯一:當你開開心心的修改完配置,但是hive啟動時卻不載入自己修改的hive-site.xml等配置檔案的問題。它總是載入預設的配置檔案,很煩。。。。

這時候可能會有人問,怎麼看出來的,有什麼區別嗎?

解釋:如果你是用預設的配置檔案,hive會連線自帶的derby資料庫,會在hive的根目錄下生成derby.log這個日誌檔案,並且當啟動兩個bin/hive的時候,就會報錯(如果是mysql就不會)

原因:

大概原因是因為hive依賴hadoop,但是hadoop的環境變數卻沒有讀到hive-site.xml

所以解決方法如下:
hadoop的配置檔案hadoop-env.sh中(其實就是hadoop的根目錄下的etc/hadoop裡面的那些配置檔案裡)
找到export HADOOP_CLASSPATH這行,修改值為
export HADOOP_CLASSPATH=$HIVE_HOME/conf:$HADOOP_CLASSPATH

注意:這裡的$HIVE_HOME不是你直接複製上去就可以了,你要自己改成自己hive的路徑,

或者:(以下方法選一種就可以,兩種同時用也行,但是別寫錯了。。。)

1、在/etc/profile這個檔案裡面加上這個變數,跟配置JAVA_HOME,HADOOP_HOME是一樣的

2、直接在hadoop-env.sh這個檔案裡面你宣告JAVA_HOME的地方,也宣告個HIVE_HOME,這樣你就可以使用這個變量了

再注意下:這裡其實有可能會埋下伏筆,在搭建hbase的資料遷移的一個環境的時候。。。出現了另一個問題,其實原因是因為環境變數$HADOOP_CLASSPATH應該是疊加(本文用的是疊加的方式),但是在另一篇文章當中,我一開始用的是覆蓋。所以hbase是沒問題了,反而hive報了錯,文章連結(錯誤我有改正):http://blog.csdn.net/lsr40/article/details/77717432

修改完之後重啟下hadoop的程序

執行bin/hive 檢查mysql裡是否有新建的資料庫,或者檢查是否可以建立多個bin/hive的連線(因為derby只能一個連線)





接下來的這幾個報錯,其實差不多可以歸納為這個版本的BUG,提供修改方式,就不再具體闡述,因為如果用新版本就有很大機率不會遇見這些問題。



報錯:Error: Invalid URL: jdbc:hive2://bigdata-03:10000 (state=08S01,code=0)

解決:

<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>bigdata-03</value>    //把這裡改成你啟動的server2的主機名
  <description>Bind host on which to run the HiveServer2 Thrift interface.
  Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST</description>
</property>


報錯:Error: For input string: "5000L" (state=,code=0)
找到如下行,修改下value

解決:

<property>
  <name>hive.server2.long.polling.timeout</name>
  <value>5000</value>
  <description>Time in milliseconds that HiveServer2 will wait, before responding to asynchronous calls that use long polling</description>
</property>


報錯:Error: Error while compiling statement: FAILED: RuntimeException Cannot make directory: hdfs://bigdata-03:8020/tmp/hive-beifeng/hive_2017-07-26_16-55-43_257_4456975382084132472-3 (state=42000,code=40000)

請使用你hadoop上的使用者來操作beeline,不要搞一些騷操作!!

警告:
在hiveserver2的窗口裡面會有
WARN conf.HiveConf: DEPRECATED: hive.metastore.ds.retry.* no longer has any effect.  Use hive.hmshandler.retry.* instead
這個是說關於hive.metastore.ds.retry.*這些配置已經不起作用,使用hive.hmshandler.retry.*來配置,這也是版本迭代更新的問題,不過警告在測試環境中,一般來說是沒什麼太大關係的,但是真實開發還是要好好關注下是什麼情況。

<property>
  <name>hive.metastore.ds.retry.attempts</name>
  <value>1</value>
  <description>The number of times to retry a metastore call if there were a connection error,當出現數據連線錯誤後,嘗試連線後臺資料儲存的最大次數。 </description>
</property>
<property>
   <name>hive.metastore.ds.retry.interval</name>
   <value>1000</value>
   <description>The number of milliseconds between metastore retry attempts,每次嘗試連線後臺資料儲存的時間間隔,以毫秒為單位。 </description>
</property>
接下來是用開發工具,比如myeclipse等工具,去遠端連線hiveserver2的時候報的錯誤:

在寫hiveserver2的jdbc連線的時候報錯:Exception in thread "main" java.sql.SQLException: Invalid URL: jdbc:hive2://bigdata-03:10000/hadoop

原因:使用的是hiveserver2這個服務,所以導包的時候驅動是org.apache.hive.jdbc.HiveDriver,不要寫成org.apache.hadoop.hive.jdbc.HiveDriver,這個應該是hiveserver1版本的,如果你想寫個程式碼測試下,提供官網:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBCClientSampleCode
報錯:Exception in thread "main" java.sql.SQLException: Could not open connection to jdbc:hive2://bigdata-03:10000/hadoop: java.net.ConnectException: Connection refused: connect

這個錯就是連線拒絕,原因就是hiveserver2沒啟動。。。。

解決:那你就啟動下嘛,$HIVE_HOME/bin/hiveserver2

關於這個hiveserver2怎麼配置,官網也有說(你可以百度中文的部落格):https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-RunningHiveServer2andBeeline


好,就整理到這裡,如果有什麼遺漏的,或者說的不對的,請各路大神指出!!虛心討教~