標籤:hadoop hive
由於Hive依賴於Hadoop,安裝Hive之前必須確認Hadoop可用,關於Hadoop的安裝可以參考叢集分布式 Hadoop安裝詳細步驟,這裡不再敘述。
1.下載Hive安裝包
為:http://www.apache.org/dyn/closer.cgi/hive(或點擊下面連結),選擇一個穩定版本,假設下載的版本為:apache-hive-1.0.1-bin.tar.gz,解壓:
tar -zxvf apache-hive-1.0.1-bin.tar.gz
在apache的下載列表中可以看到hive-1.0.1.src.tar.gz和hive-hive-1.0.1.bin.tar.gz兩個包,名字中帶bin的壓縮包中只包括已經編譯好的的Hive程式,不包括Hive的原始碼。
2.配置環境變數
實際上即使不對作業系統的環境變數進行配置,Hive依然可以使用,但是如果每次都輸入全路徑效率很低,因此推薦對Linux作業系統的環境變數按以下方式進行配置。
修改全域設定檔/etc/profile或者使用者目錄下的私人檔案~/.bashrc,在檔案中加入以下資訊:
export HIVE_HOME=/home/hadoop/apache-hive-1.0.1-binexport PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH
為了讓配置立即生效,而不需要重新啟動系統或者重新登入,運行以下命令:
source /etc/profile 或source ~/.bashrc
3.建立Hive資料檔案目錄
在HDFS中建立用於儲存Hive資料的檔案目錄(/tmp 目錄可能已經存在):
hadoop fs -mkdir /tmphadoop fs -mkdir /user/hive/warehousehadoop fs -chmod 777 /tmphadoop fs -chmod 777 /user/hive/warehouse
以上命令在HDFS中建立了/tmp及/usr/hive/warehouse目錄,其中/tmp主要用於存放一些執行過程中的臨時檔案,/user/hive/warehouse用於存放hive進行管理的資料檔案。
4.修改hive設定檔
這一步不是必須的,如果不配置,Hive將使用預設的設定檔,通過Hive設定檔可以對Hive進行定製及最佳化。最常見的是對“中繼資料存放區層”的配置,預設情況下Hive使用Derby資料庫作為“中繼資料存放區層”。
在Hive中Derby預設使用“單使用者”模式進行啟動,這就意味著同一時間只能有一個使用者使用Hive,這適用於開發程式時做本地測試。
Hive設定檔位於$Hive_Home/conf目錄下面,名為hive-site.xml,這個檔案預設情況下是不存在的,需要進行手動建立,在此目錄下有個hive-default.xml.template的模板檔案,首先需要通過它建立hive-site.xml檔案。
cp hive-default.xml.template hive-site.xml
關於中繼資料庫Dergy的預設配置如下:
<!--JDBC中繼資料倉庫連接字串--> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <!--JDBC中繼資料倉庫驅動類名--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> <description>Driver class name for a JDBC metastore</description> </property> <!--中繼資料倉庫使用者名稱--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>APP</value> <description>Username to use against metastore database</description> </property> <!--中繼資料倉庫密碼--> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>mine</value> <description>password to use against metastore database</description> </property>
從上面的配置中可以看到關於中繼資料庫的配置,由於Hive中已經包含了這個內建的Derby資料庫,因此不需要進行資料庫的安裝,同時在$Hive_Home/lib下還可以看到Derby的資料庫驅動包(derby-xx.x.x.x.jar)。至此已經完成Hive各項工作的安裝,可以通過以下命令測試Hive是否正常運行:
hivehive> SET -v;hive> quit;
出錯處理: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:444)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI:
處理:
在hive-site.xml中建立配置項,iotmp檔案夾是建立的:
<property>
<name>system:java.io.tmpdir</name>
<value>/home/hadoop/hive-1.0.1/iotmp</value>
<description/>
</property>
下面是配置mysql 中繼資料庫,替換Derby
如前所述,Hive在預設情況下是使用內建的Derty資料庫儲存中繼資料,這對程式開發時本地測試沒有任何問題。但如果在生產環境中,由於需要支援多使用者同時進行系統訪問,這可能不能滿足應用需求。通過配置,可以讓Derty運行為“多使用者”模式來滿足多使用者訪問需求。進一步,在實際的生產環境中通常會選用儲存功能更為強大的Mysql資料庫作為“中繼資料存放區層”。Mysql作為最流行的開源關係型資料庫,使用面廣、功能多樣,必要時可以充當臨時的標準資料查詢與分析系統使用,因此得到大量的Hive使用者的青睞。
如果使用Mysql作為“中繼資料存放區層”,首先需要安裝Mysql,可以使用如下命令:
#sudo apt-get install mysql-server
安裝之後再資料庫中建立Hive帳號並設定許可權:
mysql> create user ‘hive‘@‘%‘ identified by ‘hive‘;mysql> grant all privileges on *.* to ‘hive‘@‘%‘ with grant option;mysql> flush privileges;
接下來需要對hive-sive.xml設定檔進行以下修改,以支援mysql:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/metastore_db?createDatabaseIfNotExist=true</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>hive</value> <description>username to use against metastore database</description></property><property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>password to use against metastore database</description></property>
另外,由於Hive沒有預設包含Mysql的JDBC驅動,因此需要將mysql-connector-java-x.x.xx.jar檔案拷貝到$Hive_Home/lib目錄中,否則Hive無法與Mysql進行通訊。至此,基於Mysql作為“中繼資料存放區層”的Hive系統配置完成。(jar包下載需要註冊oracle,需要的可以留言)
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Hadoop Hive安裝,配置mysql中繼資料庫