Hadoop 3.1.3偽分布式環境安裝Hive 3.1.2的異常總結


  背景:hadoop版本為3.1.3, 且以偽分布式形式安裝,hive版本為3.1.2,hive為hadoop的一個客戶端。

1. 安裝簡要步驟

(1) 官網下載apache-hive-3.1.2-bin.tar.gz,並解壓縮

(2) 進入conf配置文件夾,將hive-env.sh.template重命名為hive-env.sh,並在其中增加如下配置

a. hadoop安裝目錄:export HADOOP_HOME=/home/ws/module/hadoop

b. hive配置目錄:export HIVE_CONF_DIR=/home/ws/module/hive/conf

c. hive依賴包:export HIVE_AUX_JARS_PATH=/home/ws/module/hive/lib

(3) 將hive-default.xml.template重命名為hive-site.xml

1) 如果想使用默認的derby數據庫,可以修改如下地方:

a. 將配置文件中如下文本中for和transactional的非法字符刪除或替換

Ensures commands with OVERWRITE (such as INSERT OVERWRITE) acquire Exclusive locks fortransactional tables. This ensures that inserts (w/o overwrite) running concurrently are not hidden by the INSERT OVERWRITE.

防止報異常:Hive throws: WstxParsingException: Illegal character entity: expansion character (code 0x8)

b. 將配置文件中所有的${system:java.io.tmpdir}/${system:user.name}修改為絕對路徑如/tmp/scratchdir,同理將${system:java.io.tmpdir}/${hive.session.id}_resources中的${system:java.io.tmpdir}也替換為一個絕對路徑,否則會報異常:Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D**

c. 在javax.jdo.option.ConnectionURL屬性中增加derby的路徑,如下所示:

jdbc:derby:/home/ws/module/hive/metastore_db;databaseName=metastore_db;create=true

d. 配置好之后需要創建metada schema: schematool -initSchema -dbType derby

e. 然后執行hive即可對hive命令行進行測試

2) 因為derby數據庫默認同時只允許一個用戶連接,因此通常hive會使用mysql數據庫,具體配置如下:

a. 由於需要鏈接mysql,因此需要將mysql的jar包(博主采用mysql-connector-java-5.1.47.jar)放置在hive安裝目錄的lib文件夾下

b. 可以不使用默認的hive-site.xml,而是直接在hive-site.xml只需要錄入需要的屬性配置信息:

<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </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>root</value>
    <description>Username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>111</value>
    <description>password to use against metastore database</description>
  </property>

  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>

        <property>
                <name>datanucleus.readOnlyDatastore</name>
                <value>false</value>
        </property>
        <property>
                <name>datanucleus.fixedDatastore</name>
                <value>false</value>
        </property>
        <property>
                <name>datanucleus.autoCreateSchema</name>
                <value>true</value>
        </property>
        <property>
                <name>datanucleus.schema.autoCreateAll</name>
                <value>true</value>
        </property>
        <property>
                <name>datanucleus.autoCreateTables</name>
                <value>true</value>
        </property>
<property>
                <name>datanucleus.autoCreateColumns</name>
                <value>true</value>
        </property>
        <property>
                <name>hive.metastore.local</name>
                <value>true</value>
        </property>
        <!-- 顯示表的列名 -->
        <property>
                <name>hive.cli.print.header</name>
                <value>true</value>
        </property>
        <!-- 顯示數據庫名稱 -->
        <property>
                <name>hive.cli.print.current.db</name>
                <value>true</value>
        </property>
</configuration>
View Code

c. 創建metada schema: schematool -initSchema -dbType mysql

d. 然后執行hive即可對hive命令行進行測試

2. 異常匯總

(1) 部分遇到的異常,已在如上安裝步驟中列出

(2) 異常FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

解決方案:需要創建metada schema:schematool -initSchema -dbType derby/mysql

(3) 關於guava的異常:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

解決方案:hive 3.1.2中默認的guava包為guava-19.0.jar,在https://mvnrepository.com/artifact/com.google.guava/guava下載比較新的guava包替換即可,博主使用的是guava-27.0-jre.jar

3. 參考

(1) https://askubuntu.com/questions/1073035/failed-hiveexception-java-lang-runtimeexception-unable-to-instantiate-org-apac

(2) https://stackoverflow.com/questions/52783323/hive-throws-wstxparsingexception-illegal-character-entity-expansion-character

(3) hive3.1.2安裝 

如有問題,留言聯系!

 

 


免責聲明!

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



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