12、【Hive】使用JDBC方式訪問HIve,啟動客戶端時報錯java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration


  • 背景

    在啟動完成hive服務:hive --service metastore

    啟動hive2服務的過程中:hive --service hiveserver2

    報錯:java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

  • 分析

    我的hive-site.xml配置文件:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!-- jdbc 連接的 URL -->
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://pc001:3306/metastore?allowPublicKeyRetrieval=true&amp;useSSL=false</value>
        </property>
    
    <!-- jdbc 連接的 Driver-->
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
        </property>
    
    <!-- jdbc 連接的 username-->
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
        </property>
    
    <!-- jdbc 連接的 password -->
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>root</value>
        </property>
    
    <!-- Hive 元數據存儲版本的驗證 -->
        <property>
            <name>hive.metastore.schema.verification</name>
            <value>false</value>
        </property>
    
    <!--元數據存儲授權-->
        <property>
            <name>hive.metastore.event.db.notification.api.auth</name>
            <value>false</value>
        </property>
    
    <!-- Hive 默認在 HDFS 的工作目錄 -->
        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive/warehouse</value>
        </property>
    
    <!-- 指定存儲元數據要連接的地址-->
        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://pc001:9083</value>
        </property>
    
    <!-- 指定 hiveserver2 連接的 host -->
        <property>
            <name>hive.server2.thrift.bind.host</name>
            <value>pc001</value>
        </property>
    <!-- 指定 hiveserver2 連接的端口號 -->
        <property>
            <name>hive.server2.thrift.port</name>
            <value>10000</value>
        </property>
    
    </configuration>
    

    按提示顯示,沒有集成Tez。而Hive默認使用的引擎是MR,其配置文件hive-site.xml中的hive.execution.engine屬性值為mr,而不是tez。

    該報錯是一個WARN,60000ms后會自動重試啟動(一般重試后會啟動成功),通過查看網絡端口:netstat -nltp,可以發現自定義的端口是生效的

    但是將報錯日志(/tmp/nuochengz/hive.log)往上面翻,發現:

    2021-09-27T02:25:57,354 INFO [main] server.HiveServer2: HS2 interactive HA not enabled. Starting tez sessions..
    2021-09-27T02:25:57,354 INFO [main] server.HiveServer2: Starting/Reconnecting tez sessions..

    可以發現hive.server2.active.passive.ha.enable的默認值為

    [1] vim $HIVE_HOME/conf/hive-default.xml.template 
    [2] :/ hive.server2.active.passive.ha.enable
    

    所以可以將其值設置為true

    <!-- hiveserver2的高可用參數,開啟此參數可以提高hiveserver2的啟動速度 -->
    <property>
        <name>hive.server2.active.passive.ha.enable</name>
        <value>true</value>
    </property>
    
  • 結論

    報錯解決


免責聲明!

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



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