복붙노트

[HADOOP] java.lang.RuntimeException : org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient를 인스턴스화 할 수 없습니다.

HADOOP

java.lang.RuntimeException : org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient를 인스턴스화 할 수 없습니다.

나는 Hadoop 2.7.1과 apache-hive-1.2.1 버전을 우분투 14.0에 설치했다.

우분투 14.0 터미널에 하이브 명령을 쓸 때 아래 예외가 발생합니다.

 $ hive

    Logging initialized using configuration in jar:file:/usr/local/hive/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
    Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:520)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:86)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104)
        at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005)
        at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024)
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503)
        ... 8 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:426)
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1521)
        ... 14 more
    Caused by: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
    NestedThrowables:
    java.lang.reflect.InvocationTargetException
        at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:587)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:788)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:333)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:202)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:520)
        at javax.jdo.JDOHelper$16.run(JDOHelper.java:1965)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.jdo.JDOHelper.invoke(JDOHelper.java:1960)
        at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1166)
        at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
        at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:701)
        at org.apache.hadoop.hive.metastore.ObjectStore.getPMF(ObjectStore.java:365)
        at org.apache.hadoop.hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.java:394)
        at org.apache.hadoop.hive.metastore.ObjectStore.initialize(ObjectStore.java:291)
        at org.apache.hadoop.hive.metastore.ObjectStore.setConf(ObjectStore.java:258)
        at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:76)
        at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:136)
        at org.apache.hadoop.hive.metastore.RawStoreProxy.<init>(RawStoreProxy.java:57)
        at org.apache.hadoop.hive.metastore.RawStoreProxy.getProxy(RawStoreProxy.java:66)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.newRawStore(HiveMetaStore.java:593)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:571)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:624)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:461)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:66)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5762)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:199)
        at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:74)
        ... 19 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:426)
        at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:631)
        at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:325)
        at org.datanucleus.store.AbstractStoreManager.registerConnectionFactory(AbstractStoreManager.java:282)
        at org.datanucleus.store.AbstractStoreManager.<init>(AbstractStoreManager.java:240)
        at org.datanucleus.store.rdbms.RDBMSStoreManager.<init>(RDBMSStoreManager.java:286)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:426)
        at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:631)
        at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:301)
        at org.datanucleus.NucleusContext.createStoreManagerForProperties(NucleusContext.java:1187)
        at org.datanucleus.NucleusContext.initialise(NucleusContext.java:356)
        at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:775)
        ... 48 more
    Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error : The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:259)
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.initialiseDataSources(ConnectionFactoryImpl.java:131)
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.<init>(ConnectionFactoryImpl.java:85)
        ... 66 more
    Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
        at org.datanucleus.store.rdbms.connectionpool.AbstractConnectionPoolFactory.loadDriver(AbstractConnectionPoolFactory.java:58)
        at org.datanucleus.store.rdbms.connectionpool.BoneCPConnectionPoolFactory.createConnectionPool(BoneCPConnectionPoolFactory.java:54)
        at org.datanucleus.store.rdbms.ConnectionFactoryImpl.generateDataSources(ConnectionFactoryImpl.java:238)
        ... 68 more

위의 오류를 피하기 위해 hive-site.xml을 다음과 같이 만들었습니다.

 <configuration>

      <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/home/local/hive-metastore-dir/warehouse</value>

      </property>

    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>user</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>password</value>
    </property>

    <configuration>

또한 ~ / .bashrc 파일에 환경 변수를 제공했습니다. 여전히 오류가 지속됩니다.

#HIVE home directory configuration
export HIVE_HOME=/usr/local/hive/apache-hive-1.2.1-bin
export PATH="$PATH:$HIVE_HOME/bin"

해결법

  1. ==============================

    1.

    I did below modifications and I am able to start the Hive Shell without any errors:
    

    bashrc 파일 안에 End of File에 아래 환경 변수를 추가합니다 : sudo gedit ~ / .bashrc

    #Java Home directory configuration
    export JAVA_HOME="/usr/lib/jvm/java-9-oracle"
    export PATH="$PATH:$JAVA_HOME/bin"
    
    # Hadoop home directory configuration
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    
    export HIVE_HOME=/usr/lib/hive
    export PATH=$PATH:$HIVE_HOME/bin
    

    Hive의 conf 디렉토리에이 파일 (hive-site.xml)을 생성하고 아래의 세부 사항을 추가해야합니다.

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
    </property>
    
    
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>root</value>
    </property>
    
    <property>
      <name>datanucleus.autoCreateSchema</name>
      <value>true</value>
    </property>
    
    <property>
      <name>datanucleus.fixedDatastore</name>
      <value>true</value>
    </property>
    
    <property>
     <name>datanucleus.autoCreateTables</name>
     <value>True</value>
     </property>
    
    </configuration>
    
        4.1 MySql
        4.2 Hadoop
        4.3 Hive
        4.4 Java
    
    1. Start all services of Hadoop: start-all.sh
    
    2. Enter the jps command to check whether all Hadoop services are up and running: jps
    
    3. Enter the hive command to enter into hive shell: hive
    
  2. ==============================

    2.하이브 메타 스토어 서비스 시작은 나를 위해 일했습니다. 먼저 하이브 메타 스토어 용 데이터베이스를 설정합니다.

    하이브 메타 스토어 서비스 시작은 나를 위해 일했습니다. 먼저 하이브 메타 스토어 용 데이터베이스를 설정합니다.

     $ hive --service metastore 
    

    ` https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_installing_manually_book/content/validate_installation.html

    둘째, 다음 명령을 실행하십시오.

     $ schematool -dbType mysql -initSchema  
     $ schematool -dbType mysql -info
    

    https://cwiki.apache.org/confluence/display/Hive/Hive+Schema+Tool

  3. ==============================

    3.내 경우에는 내가 시도했을 때

    내 경우에는 내가 시도했을 때

    $ hive --service metastore 
    

    알았어.

    메타 스토어에 필요한 테이블이 MySQL에 없습니다. 수동으로 테이블을 만들고 하이브 메타 스토어를 다시 시작하십시오.

    cd $HIVE_HOME/scripts/metastore/upgrade/mysql/ 
    
    < Login into MySQL > 
    
    mysql> drop database IF EXISTS <metastore db name>; 
    mysql> create database <metastore db name>; 
    mysql> use <metastore db name>; 
    mysql> source hive-schema-2.x.x.mysql.sql; 
    

    metastore db name은 hive-site.xml 파일의 connection 속성 태그에 언급 된 데이터베이스 이름과 일치해야합니다.

    hive-schema-2.x.x.mysql.sql 파일은 현재 디렉토리에서 사용 가능한 버전에 따라 다릅니다. 최신 스키마 파일을 많이 가지고 있기 때문에 최신 버전을 사용해보십시오.

    이제 하이브 - 서비스 메타 스토어를 실행 해보십시오. 모든 것이 시원 해지면 터미널에서 하이브를 시작하십시오.

    >hive
    

    위의 답변으로 귀하의 필요가 충족되기를 바랍니다.

  4. ==============================

    4.로컬 모드에서 놀고 있다면 메타 스토어 DB를 삭제하고 다시 복원 할 수 있습니다.

    로컬 모드에서 놀고 있다면 메타 스토어 DB를 삭제하고 다시 복원 할 수 있습니다.

    rm -rf metastore_db/
    $HIVE_HOME/bin/schematool -initSchema -dbType derby
    
  5. ==============================

    5."반사"쓰레기에서 잃어버린 스택 추적 중간에 근본 원인을 찾을 수 있습니다.

    "반사"쓰레기에서 잃어버린 스택 추적 중간에 근본 원인을 찾을 수 있습니다.

    지정된 데이터 스토어 드라이버 ( "com.mysql.jdbc.Driver")가 CLASSPATH에 없습니다. CLASSPATH 사양과 드라이버 이름을 확인하십시오.

  6. ==============================

    6.디버그 모드에서 하이브 실행

    디버그 모드에서 하이브 실행

    하이브 -hiveconf hive.root.logger = DEBUG, 콘솔

    실행 한 다음

    쇼 테이블

    실제 문제를 발견 할 수있다.

  7. ==============================

    7.hadoop 디렉토리에서 MetaStore_db를 제거하고 hadoop namenode -format을 사용하여 hdfs를 포맷 한 다음 start-all.sh를 사용하여 hado를 재시작하십시오.

    hadoop 디렉토리에서 MetaStore_db를 제거하고 hadoop namenode -format을 사용하여 hdfs를 포맷 한 다음 start-all.sh를 사용하여 hado를 재시작하십시오.

  8. ==============================

    8.또한이 문제에 직면했지만 Hadoop을 다시 시작하고 hadoop dfsadmin -safemode 명령을 사용했습니다.

    또한이 문제에 직면했지만 Hadoop을 다시 시작하고 hadoop dfsadmin -safemode 명령을 사용했습니다.

    이제 하이브가 시작될 것 같아.

  9. ==============================

    9.필자는 Hive MetaStore에 MySQL DB를 사용했습니다. 다음 단계를 따르십시오.

    필자는 Hive MetaStore에 MySQL DB를 사용했습니다. 다음 단계를 따르십시오.

    <property>
     <name>javax.jdo.option.ConnectionURL</name> 
     <value>jdbc:mysql://localhost/metastorecreateDatabaseIfNotExist=true&amp;useSSL=false</value>
    </property>
    

    이제 오류가 발생합니다.

  10. ==============================

    10.spark-submit 코드에서 --deploy-mode cluster를 제거하여이 문제를 해결했습니다. 기본적으로 스파크 제출은 다음과 같은 이점이있는 클라이언트 모드를 사용합니다.

    spark-submit 코드에서 --deploy-mode cluster를 제거하여이 문제를 해결했습니다. 기본적으로 스파크 제출은 다음과 같은 이점이있는 클라이언트 모드를 사용합니다.

    1. It opens up Netty HTTP server and distributes all jars to the worker nodes.
    2. Driver program runs on master node , which means dedicated resources to driver process.
    

    클러스터 모드에서 :

     1.  It runs on worker node.
     2. All the jars need to be placed in a common folder of the cluster so that it is accessible to all the worker nodes or in folder of each worker node.
    

    여기서 클러스터의 노드 중 하이브 병이 없기 때문에 하이브 메타 스토어에 액세스 할 수 없습니다.

  11. from https://stackoverflow.com/questions/35449274/java-lang-runtimeexception-unable-to-instantiate-org-apache-hadoop-hive-ql-meta by cc-by-sa and MIT license