1. 程式人生 > >Hadoop Hive安裝,配置mysql元資料庫

Hadoop Hive安裝,配置mysql元資料庫

  由於Hive依賴於Hadoop,安裝Hive之前必須確認Hadoop可用,關於Hadoop的安裝可以參考叢集分散式 Hadoop安裝詳細步驟,這裡不再敘述。

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-bin
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH

為了讓配置立即生效,而不需要重新啟動系統或者重新登入,執行以下命令:

source /etc/profile 或
source ~/.bashrc

3.建立Hive資料檔案目錄
在HDFS中建立用於儲存Hive資料的檔案目錄(/tmp 目錄可能已經存在):

hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod
777 /tmp hadoop 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是否正常執行:

hive
hive> 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,需要的可以留言)

參考文獻:《深入理解大資料 大資料處理與程式設計實戰》主編:黃宜華老師(南京大學)