【轉】 hive安裝配置及遇到的問題解決


 

  原文來自: http://blog.csdn.net/songchunhong/article/details/51423823

 

 

1.下載Hive安裝包apache-hive-1.2.1-bin.tar.gz

2.解壓安裝包,並移動到要安裝的路徑下

sudo tar -zxvf apache-hive-1.2.1-bin.tar.gz

sudo mv -r hive1.2.1 /usr/local/

3.配置hive環境變量

 vi /etc/profile 添加環境變量值
  export HIVE_HOME=/home/likehua/hive/hive-0.12.0
 export PATH = $HIVE_HOME/bin:$PATH
 source /etc/profile 使修改的環境變量立即生效

4.進入解壓后的hive目錄,進入conf

cp hive-env.sh.template hive-env.sh

cp hive-default.xml.template hive-site.xml

hive的配置:

配置hive-env.sh文件:

(1)添加hadoop_home路徑:將export HADOOP_HOME前面的‘#’號去掉,
並讓它指向您所安裝Hadoop的目錄 (就是切換到這個目錄下有hadoop的conf,lib,bin 等文件夾的目錄),(mine:HADOOP_HOME=/usr/local/hadoop)

其實在安裝hive時需要指定HADOOP_HOME的原理基本上與在安裝Hadoop時需要指定JAVA_HOME的原理是相類似的。Hadoop需要Java作支撐,而hive

需要hadoop作為支撐。

(2)將export HIVE_CONF_DIR=/usr/local/hive1.2.1/conf,並且把‘#’號去掉
(3)將export HIVE_AUX_JARS_PATH=/usr/local/hive1.2.1/lib,並且把‘#’號去掉

保存,用source /hive-env.sh(生效文件)

在修改之前,要相應的創建目錄,以便與配置文件中的路徑相對應,否則在運行hive時會報錯的。

mkdir -p /usr/local/hive1.2.1/warehouse
mkdir -p /usr/local/hive1.2.1/tmp
mkdir -p /usr/local/hive1.2.1/log

進入hive安裝目錄下的conf文件夾下,配置hive-site.xml文件

其中有三處需要修改:

搜索“/hive.metastore.warehouse.dir”

<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/local/hive1.2.1/warehouse</value>
</property>
這個是設定數據目錄
-------------------------------------

<property>
<name>hive.exec.scratchdir</name>
<value>/usr/local/hive1.2.1/tmp</value>
</property>
這個是設定臨時文件目錄
--------------------------------------
注://這個在筆者的文件中沒有,可以自己添加
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive1.2.1/log</value>
</property>
這個是用於存放hive相關日志的目錄,修改的這些目錄都是上一步中創建的文件夾目錄
其余的不用修改。

到此,hive-site.xml文件修改完成。

然后在conf文件夾下,cp hive-log4j.properties.template  hive-log4j.proprties

打開hive-log4j.proprties文件,sudo gedit hive-log4j.proprties

尋找hive.log.dir=
這個是當hive運行時,相應的日志文檔存儲到什么地方

(mine:hive.log.dir=/usr/local/hive1.2.1/log/${user.name})

hive.log.file=hive.log
這個是hive日志文件的名字是什么
默認的就可以,只要您能認出是日志就好

只有一個比較重要的需要修改一下,否則會報錯。

log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
如果沒有修改的話會出現:

WARNING: org.apache.hadoop.metrics.EventCounter is deprecated.
please use org.apache.hadoop.log.metrics.EventCounter  in all the  log4j.properties files.
(只要按照警告提示修改即可)。

至此,hive-log4j.proprties文件修改完成。

這是在derby模式下的hive的配置,完成。

在hive目錄下的bin目錄下,執行hive可以開啟hive。

hadoop@schpc:/usr/local/hive1.2.1$ bin/hive

結果顯示(如下錯誤):

16/05/17 10:48:15 WARN conf.HiveConf: HiveConf of name hive.exec.scratdir does not exist
Logging initialized using configuration in file:/usr/local/hive1.2.1/conf/hive-log4j.properties
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: java.NET.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
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:497)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.IllegalArgumentException: java.Net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.fs.Path.initialize(Path.java:206)
at org.apache.hadoop.fs.Path.<init>(Path.java:172)
at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:563)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:508)
... 8 more
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at java.net.URI.checkPath(URI.java:1823)
at java.net.URI.<init>(URI.java:745)
at org.apache.hadoop.fs.Path.initialize(Path.java:203)
... 11 more

錯誤原因, ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.hadoop.fs.Path.initialize(Path.java:206)路徑問題,只要把此處的相對路徑改成

絕對路徑就可以了。百度system:java.io.tmpdir,網頁上顯示Linux下面的路徑為/tmp/,因此把hive-site.xml文件里面的兩個system:java.io.tmpdir分別更改為/tmp/

hive配置相關錯誤解決方法。http://blog.csdn.net/jim110/article/details/44907745

再次運行bin/hive,運行成功。

hadoop@schpc:/usr/local/hive1.2.1$ bin/hive
16/05/17 11:02:05 WARN conf.HiveConf: HiveConf of name hive.exec.scratdir does not exist

Logging initialized using configuration in file:/usr/local/hive1.2.1/conf/hive-log4j.properties
hive> 

在hive中建表后,使用show tables;命令結果顯示如下錯誤:

經網上搜索查詢得知:貌似hive.log的路徑中不能出現":"。然后我把system后面的冒號改成了.號,結果耗時不行。

然后,恍然大悟hive/conf下面的配置文件hive-site.xml和hive-log4j.properties都提到了hive中的日志log的存放路徑以及名字。四不四兩個文件中的設置

不一致造成的呢,查詢了一下果真兩個文件中的配置目錄不一致。所以我把兩者的目錄都改成了/tmp/hive/<user.name>(hive-log4j.properties中),/tmp/hive/${user.name}

(hive-site.xml中)保存,重啟hive,然后再次執行show tables,ok得到如下結果:

以上是使用derby模式下的hive已經能夠成功運行,這說明在系統中關於hive配置文件中的參數是正確的,即hive-env.sh和

hive-site.xml這兩個文件中的配置是正確的。

接下來要配置的是以MySQL作為存儲元數據庫的hive的安裝(此中模式下是將hive的metadata存儲在mysql中,mysql的運行環境支撐雙向同步和集群工作環境,這樣的話

,至少兩台數據庫服務器上匯備份hive的元數據),要使用hadoop來創建相應的文件夾路徑,

並設置權限:

bin/hadoop fs -mkdir /user/hadoop/hive/warehouse

bin/hadoop fs -mkdir /user/hadoop/hive/tmp

bin/hadoop fs -mkdir /user/hadoop/hive/log

 

bin/hadoop fs -chmod g+w /user/hadoop/hive/warehouse

bin/hadoop fs -chmod g+w /user/hadoop/hive/tmp

bin/hadoop fs -chmod g+w /user/hadoop/hive/log

繼續配置hive-site.xml

[1]

<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://localhost:9000/user/hadoop/hive/warehouse</value>
(這里就與前面的hadoop fs -mkdir -p /user/hadoop/hive/warehouse相對應)
</property>
其中localhost指的是筆者的NameNode的hostname;

[2]

<property>
<name>hive.exec.scratchdir</name>
<value>hdfs://localhost:9000/user/hadoop/hive/scratchdir</value>
</property>

[3]

//這個沒有變化與derby配置時相同
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value>
</property>
-------------------------------------

[4]

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true</value>
</property>
javax.jdo.option.ConnectionURL
這個參數使用來設置元數據連接字串

注意紅字部分在hive-site.xml中是有的,不用自己添加。

我自己的錯誤:沒有在文件中找到這個屬性,然后就自己添加了結果導致開啟hive一直報錯。最后找到了文件中的該屬性選項然后修改,才啟動成功。

 

Unableto open a test connection to the given database. JDBC url =jdbc:derby:;databaseName=/usr/local/hive121/metastore_db;create=true,username = hive. Terminating connection pool (set lazyInit to true ifyou expect to start your database after your app). OriginalException: ------

java.sql.SQLException:Failed to create database '/usr/local/hive121/metastore_db', see thenext exception for details.

atorg.apache.derby.impl.jdbc.SQLE

 

-------------------------------------

[5]

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
javax.jdo.option.ConnectionDriverName

關於在hive中用java來開發與mysql進行交互時,需要用到一個關於mysql的connector,這個可以將java語言描述的對database進行的操作轉化為mysql可以理解的語句。

connector是一個用java語言描述的jar文件,而這個connector可以在官方網站上下載,經驗正是connector與mysql的版本號不一致也可以運行。

connector要copy到/usr/local/hive1.2.1/lib目錄下

[6]

<property>
<name>javax.jdo.option.ConnectorUserName</name>
<value>hive</value>
</property>
這個javax.jdo.option.ConnectionUserName
是用來設置hive存放元數據的數據庫(這里是mysql數據庫)的用戶名稱的。

[7]

--------------------------------------
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
這個javax.jdo.option.ConnetionPassword是用來設置,
用戶登錄數據庫(上面的數據庫)的時候需要輸入的密碼的.

[8]

<property>
<name>hive.aux.jars.path</name>
<value>file:///usr/local/hive/lib/hive-hbase-handler-0.13.1.jar,file:///usr/local/hive/lib/protobuf-java-2.5.0.jar,file:///us
r/local/hive/lib/hbase-client-0.96.0-hadoop2.jar,file:///usr/local/hive/lib/hbase-common-0.96.0-hadoop2.jar,file:///usr/local
/hive/lib/zookeeper-3.4.5.jar,file:///usr/local/hive/lib/guava-11.0.2.jar</value>
</property>

/相應的jar包要從hbase的lib文件夾下復制到hive的lib文件夾下。

[9]

<property>  
<name>hive.metastore.uris</name>  
<value>thrift://localhost:9083</value>  
</property>  
</configuration>

---------------------------------------- 到此原理介紹完畢

要使用Hadoop來創建相應的文件路徑,
並且要為它們設定權限:
hdfs dfs -mkdir -p  /usr/hive/warehouse
hdfs dfs -mkdir -p /usr/hive/tmp
hdfs dfs -mkdir -p /usr/hive/log
hdfs dfs -chmod g+w /usr/hive/warehouse
hdfs dfs -chmod g+w /usr/hive/tmp
hdfs dfs -chmod g+w /usr/hive/log

[root@db96 ~]# hadoop fs -mkdir -p /hive/scratchdir
[root@db96 ~]# hadoop fs -mkdir /tmp
[root@db96 ~]# hadoop fs -ls /hive
[root@db96 ~]# hadoop fs -chmod -R g+w /hive/
[root@db96 ~]# hadoop fs -chmod -R g+w /tmp

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM