ireportに接続しているときに、たとえばハイブシェルでテーブルを表示すると、次のエラーが発生します。
メタデータのエラー:java.lang.RuntimeException:org.apache.hadoop.hive.metastore.HiveMetaStoreClientをインスタンス化できません失敗:実行エラー、org.apache.hadoop.hive.ql.exec.DDLTaskからコード1を返します
メタデータデータベース用のJDBCドライバーを含むjarファイルをHiveのlibディレクトリにコピーしましたか?
たとえば、MySQLを使用してメタデータデータベースを保持している場合は、コピーする必要があります
mysql-connector-java-5.1.22-bin.jar
に$HIVE_HOME/lib
。
これにより、同じエラーが修正されました。
1つの可能性は、Hadoopが実行されていないことです。ローカルで単純な1ノードのHadoopクラスターを実行しているときに、これと同じ問題が発生しました。コンピューターを起動するたびに、ハイブがノードに接続する前に、Hadoopノードを手動で起動する必要があります。
$ HADOOP_HOME / bin/stop-all.shを実行してみてください
出力に停止するノードがないことが示されている場合は、Hadoopが起動していなかったことを意味します。この場合は、次のコマンドを実行します。
$ HADOOP_HOME / bin / start-all.sh
そしてハイブすればあなたは行ってもいいはずです。
(これはデフォルトのderbyデータベースを使用していました。どうやらmysqlを使用している場合は、いくつかのコネクタ構成からこのエラーを取得することもできます(他の回答を参照))。
編集:実際に私が発見したもう1つのことは、Hiveを起動するたびにHiveがmetastore_dbディレクトリを作成する必要があることですが、Hiveが実行されたパスに作成されます。ハイブを実行するディレクトリに書き込み権限がない場合、上記のエラーが発生する可能性があります。これを修正するために、hive-site.xmlに設定して、このディレクトリを相対ではなく絶対にすることができる構成があります。
ここを参照してください:
エラーメッセージはHiveで素晴らしいです。credsをconf/hive-site.xmlに追加したとき、既存のユーザー名/パスワード要素に気づかなかったので、自分のcredsを追加したとき、それらは使用されず、上記と同じわかりにくいメッセージが表示されました。
metatoolコマンドを実行すると、スタックトレースが実行され、これが取得されます。これは、私の場合、本当の原因を示しています。これが他の誰かに役立つことを願っています:
mfellows@matt.mit /usr/local/hive-0.11.0-bin $ bin/metatool -listFSRoot
Initializing HiveMetaTool..
13/06/05 21:44:43 INFO metastore.ObjectStore: ObjectStore, initialize called
13/06/05 21:44:43 ERROR DataNucleus.Plugin: Bundle "org.eclipse.jdt.core" requires "org.eclipse.core.resources" but it cannot be resolved.
13/06/05 21:44:43 ERROR DataNucleus.Plugin: Bundle "org.eclipse.jdt.core" requires "org.eclipse.core.runtime" but it cannot be resolved.
13/06/05 21:44:43 ERROR DataNucleus.Plugin: Bundle "org.eclipse.jdt.core" requires "org.eclipse.text" but it cannot be resolved.
13/06/05 21:44:43 INFO DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored
13/06/05 21:44:43 INFO DataNucleus.Persistence: Property javax.jdo.option.NonTransactionalRead unknown - will be ignored
13/06/05 21:44:43 INFO DataNucleus.Persistence: ================= Persistence Configuration ===============
13/06/05 21:44:43 INFO DataNucleus.Persistence: DataNucleus Persistence Factory - Vendor: "DataNucleus" Version: "2.0.3"
13/06/05 21:44:43 INFO DataNucleus.Persistence: DataNucleus Persistence Factory initialised for datastore URL="jdbc:mysql://localhost/hive_metastore" driver="com.mysql.jdbc.Driver" userName="APP"
13/06/05 21:44:43 INFO DataNucleus.Persistence: ===========================================================
13/06/05 21:44:44 ERROR Datastore.Schema: Failed initialising database.
Access denied for user 'APP'@'localhost' (using password: YES)
org.datanucleus.exceptions.NucleusDataStoreException: Access denied for user 'APP'@'localhost' (using password: YES)
at org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getConnection(ConnectionFactoryImpl.java:536)
org.apache.hadoop.hive.metastore.HiveMetaStoreClientをインスタンス化できません
一般に、これはHiveメタストアサービスが正しく開始されていないことを示しています。ただし、貼り付けるエラーメッセージには、問題の正確な原因を特定するための十分な情報が含まれていません。
実際、他の著者によって投稿された回答はそれぞれ特定の側面に関連しているため、このエラーにつながる可能性のある理由はかなりたくさんあります。
私の提案は次のとおりです。hive --service metastore
コマンドを実行して、より詳細で的を絞ったエラーメッセージを取得し、それに応じて問題に対処します。/tmp/user_name/hive.logログファイル も参照できます。
ハイブコンソールが適切に終了しないと、通常、この例外が発生すると言われました。修正:
jpsコマンドを実行し、「RunJar」プロセスを探して、kill-9コマンドを使用して強制終了します。
JDBCドライバーに関して上記の回答をありがとうございます。したがって、HiveメタストアにOracleを使用しています。
$ cp $ ORACLE_HOME / jdbc / lib / ojdbc6.jar $ HIVE_HOME / lib / ojdbc6.jar