原文來自: 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