Hive偽分布模式安裝

來源:互聯網
上載者:User
1、安裝和配置 可以通過下載壓縮包來安裝一個穩定版的Hive,也可以下載源碼進行編譯。 1.1 運行HiveServer2和Beeline 1.2要求 java1.7+,官網推薦1.8 Hadoop2.x 1.3安裝Hive的穩定版 下載當前穩定版 http://mirrors.cnnic.cn/apache/hive/hive-2.1.0/。 解壓縮,並重新命名 tar -zxvf hive-2.1.0-bin.tar.gz mv apache-hive-2.1.0-bin hive-2.1.0 在/etc/profile或者~/.bashrc中設定HIVE_HOME變數的值,使其指向Hive的安裝目錄: export HIVE_HOME=/opt/hive/hive-2.1.0 export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf 使配置立即生效: source /etc/profile 修改Hive配置文檔(不修改則使用預設文件), 兩種安裝方式: 使用Derby資料庫、使用其他資料庫(如mysql): 使用Derby資料庫的安裝方式 Apache Derby是一個完全用java編寫的資料庫,所以可以跨平台,但需要在JVM中運行資料庫,即 將中繼資料存放區在Derby資料庫中, 儲存了如表的模式和分區資訊等中繼資料資訊
也 是Hive預設的安裝方式。 建立hive-env.sh檔案 cp hive-env.sh.template hive-env.sh 在hive-env.sh中添加: # Set HADOOP_HOME to point to a specific hadoop install directory export HADOOP_HOME=/opt/hadoop/hadoop-2.7.2 # Hive Configuration Directory can be controlled by export HIVE_CONF_DIR=/opt/hive/hive-2.1.0/conf 建立hive-site.xml cd /opt/hive/hive-2.1.0/conf cp hive-default.xml.template hive-site.xml 配置 hive-site.xml檔案: 參數hive-metastore.warehourse.dir 指定儲存Hive表中資料的儲存目錄, 指定的是HDFS上的位置,預設值為 /user/hive/warehouse(好像沒有這個參數,我自己加的) 參數hive.exec.scratchdir 指定Hive的資料臨時檔案目錄,預設位置為/tmp/hive-${user.name}。這裡配置為 /tmp/hive 串連資料庫配置說明: 參數javax.jdo.option.ConnectionURL jdbc:derby:;databaseName=metastore_db;create=true 參數javax.jdo.option.ConnectionDriverName指定驅動的類入口名稱:org.apache.derby.jdbc.EmbeddedDriver 參數javax.jdo.option.ConnectionUserName指定資料庫的使用者名稱:APP 參數javax.jdo.option.ConnectionPassword指定資料庫的密碼:mime Derby資料庫驅動在目錄$HIVE_HOME/lib/下,derby-10.10.2.0.jar
<property>    <name>javax.jdo.option.ConnectionURL</name>    <value>jdbc:derby:;databaseName=metastore_db;create=true</value>    <description>     告訴hive如何串連metastore server,預設情況下使用目前的目錄作為屬性值字串中的databaseName部分,這樣會造成使用者每當切換工作目錄下時,Derby就會忘記在前一個目錄下的中繼資料存放區資訊。我們可以使用databaseName=/opt/hive/hive-2.1.0/metastore_db作為絕對路徑,即metastore_db目錄所在路徑,這樣設定可以解決每次開啟一個新的hive會話時,Hive自動刪除工作目錄下的metastore_db目錄的問題。現在我們不管在哪個目錄下工作都可以訪問到所有的中繼資料。    </description>  </property><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 命令列鍵入hive 顯示出錯: Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)) 根據錯誤提示,應該是metastore資料庫沒有初始化的原因造成的。 按照提示執行命令“schematool -initSchema -dbType derby”對metastore進行初始化。 但此時可能仍會報錯誤:Error: FUNCTION ‘NUCLEUS_ASCII’ already exists. (state=X0Y68,code=30000) 這是因為之前已經產生了metastore_db檔案夾。需要將當前工作目錄下的metastore_db檔案夾刪除,rm -r metastore_db 然後重新運行“schematool -initSchema -dbType derby”命令。 之後執行hive,又出現錯: java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D 解決方案: 在hive安裝目錄下建立臨時io的tmp檔案夾: mkdir iotmp 然後,將這個iotmp的絕對路徑替換hive-site.xml檔案中的 ${system:java.io.tmpdir}。 再執行hive,啟動成功。 在Hive建表之前,(在預設配置文檔下)建立 /tmp 和/user/hive/warehouse檔案目錄,並在HDFS中設定它們chmod g+w ( 這一步可以不要,會自動建立 ) $ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp/hive $ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse $ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp/hive $ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse 測試: 建立測試表test:create table test (key string); show tables; 使用mysql資料庫的安裝方式 使用mysql資料庫儲存中繼資料 ,儲存了如表的模式和分區資訊等中繼資料資訊
。 ubuntu採用sudo apt-get install mysql-server安裝 建立資料庫hive : create database hive 建立hive使用者,並授權: grant all on hive.* to hive@'%' identified by 'hive';第一個hive是資料庫,第二個是使用者名稱,第三個是密碼。 強制寫入:flush privileges; 建立hive-env.sh檔案 cp hive-env.sh.template hive-env.sh 在hive-env.sh中添加: # Set HADOOP_HOME to point to a specific hadoop install directory export HADOOP_HOME=/opt/hadoop/hadoop-2.7.2 # Hive Configuration Directory can be controlled by export HIVE_CONF_DIR=/opt/hive/hive-2.1.0/conf 建立hive-site.xml cd /opt/hive/hive-2.1.0/conf cp hive-default.xml.template hive-site.xml 配置 hive-site.xml檔案: 參數hive-metastore.warehourse.dir 指定Hive的資料存放區目錄, 指定的是HDFS上的位置,預設值為 /user/hive/warehouse(好像沒有這個參數,我自己加的) 參數hive.exec.scratchdir 指定Hive的資料臨時檔案目錄,預設位置為/tmp/hive-${user.name}。這裡配置為 /tmp/hive 修改hive-site.xml
<property>    <name>javax.jdo.option.ConnectionURL </name>    <value>jdbc:mysql://localhost:3306/hive</value> </property>  <property>    <name>javax.jdo.option.ConnectionDriverName </name>    <value>com.mysql.jdbc.Driver </value> </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><span style="color:#ff0000;">hive</span></value>  <description>password to use against metastore database</description> </property><property>    <name>hive.hwi.listen.port </name>    <value>9999 </value>    <description>This is the port the Hive Web Interface will listen on </descript ion> </property> <property>    <name>datanucleus.autoCreateSchema </name>    <value>false </value> </property>  <property>    <name>datanucleus.fixedDatastore </name>    <value>true </value> </property> <property>      <name>hive.metastore.local </name>      <value>true </value>      <description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM </description> </property>
運行hive 發生錯誤: Caused by: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)) 然後我執行$HIVE_HOME/bin/schematool -initSchema -dbType derby 又出錯: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to us e near '"APP"."NUCLEUS_ASCII"(C CHAR(1)) RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE ' at line 1 (state=42000,code=1064) 我才發現,原來在初始化時用了derby,這裡應該是mysql 所以就執行$HIVE_HOME/bin/schematool -initSchema -dbType mysql 執行hive,成功。 1.4遇到的問題: (1)Hive metastore database is not initialized. 解決方案:按照提示執行命令“schematool -initSchema -dbType derby”對metastore進行初始化。但此時可能仍會報錯誤:Error: FUNCTION ‘NUCLEUS_ASCII’ already exists. (state=X0Y68,code=30000) 。這是因為之前已經產生了metastore_db檔案夾。需要將當前工作目錄下的metastore_db檔案夾刪除,然後重新運行“schematool -initSchema -dbType derby”命令。 之後hive就可以以本地內嵌derby資料庫為metastore正常啟動了。 (2)Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not foundin the CLASSPATH. 沒有 mysql-connector-java-*.*.*.tar.gz 下載mysql-connector-java-5.1.39.tar.gz http://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz 解壓縮後將mysql-connector-java-5.1.39-bin.jar放到$HIVE_HOME/lib。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.