5

前文: Hadoop / ハイブは初めてです。スタンドアロンの Hadoop をインストールし、現在ハイブを機能させようとしています。メタストアの初期化に関するエラーが発生し続け、解決方法がわかりません。(hadoop 2.7.2 およびハイブ 2.0)

HADOOP_HOME と HIVE_HOME が設定されている

ubuntu15-laptop: ~ $>echo $HADOOP_HOME
/usr/hadoop/hadoop-2.7.2

ubuntu15-laptop: ~ $>echo $HIVE_HOME
/usr/hive

hdfsは機能しています

ubuntu15-laptop: ~ $>hadoop fs -ls /
Found 2 items
drwxrwxr-x   - testuser supergroup          0 2016-04-13 21:37 /tmp
drwxrwxr-x   - testuser supergroup          0 2016-04-13 21:38 /user

ubuntu15-laptop: ~ $>hadoop fs -ls /user
Found 1 items
drwxrwxr-x   - testuser supergroup          0 2016-04-13 21:38 /user/hive

ubuntu15-laptop: ~ $>hadoop fs -ls /user/hive
Found 1 items
drwxrwxr-x   - testuser supergroup          0 2016-04-13 21:38 /user/hive/warehouse

ubuntu15-laptop: ~ $>groups
testuser adm cdrom sudo dip plugdev lpadmin sambashare

ハイブが機能していません。メタストアを初期化する必要があると言います

ubuntu15-laptop: ~ $>hive

Logging initialized using configuration in
jar:file:/usr/hive/lib/hive-common-2.0.0.jar!/hive-log4j2.properties
Exception in thread "main" java.lang.RuntimeException: 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)

だから私はpostgresを使ってそれを初期化しようとします - しかしスキーマツールはダービーを使おうとします

ubuntu15-laptop: ~ $>schematool -initSchema -dbType postgres
Metastore connection URL:  jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver :  org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User:   APP
Starting metastore schema initialization to 2.0.0
Initialization script hive-schema-2.0.0.postgres.sql
Error: Syntax error: Encountered "statement_timeout" at line 1, column 5.
(state=42X01,code=30000)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization
FAILED! Metastore state would be inconsistent !!
*** schemaTool failed ***

だから私はpostgresドライバーなどを使用するようにhive-site.xmlを変更しますが、ドライバーがインストールされていないため失敗します

ubuntu15-laptop: ~ $>cp /usr/hive/conf/hive-site.xml.templ /usr/hive/conf/hive-site.xml
ubuntu15-laptop: ~ $>schematool -initSchema -dbType postgres
Metastore connection URL:  jdbc:postgresql://localhost:5432/hivedb
Metastore Connection Driver :  org.postgresql.Driver
Metastore connection User:   123456
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
*** schemaTool failed ***

それで、最初にダービーを使用しようとします。最初にhive-site.xmlを再び邪魔にならないようにします。デフォルトはダービーです

ubuntu15-laptop: ~ $>mv /usr/hive/conf/hive-site.xml /usr/hive/conf/hive-site.xml.templ

次に、derby で再度初期化を試みますが、「エラー: FUNCTION 'NUCLEUS_ASCII' が既に存在します」というエラーによって既に初期化されているようです。

ubuntu15-laptop: ~ $>schematool -initSchema -dbType derby
Metastore connection URL:  jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver :  org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User:   APP
Starting metastore schema initialization to 2.0.0
Initialization script hive-schema-2.0.0.derby.sql
Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,code=30000)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization
FAILED! Metastore state would be inconsistent !!
*** schemaTool failed ***

私はこれで2日間過ごしました。どんな助けでも大歓迎です。

4

1 に答える 1

12

そう..

これが何が起こったのかです。

ハイブをインストールした後、私が最初にしたことは、metastore_db の作成/初期化を試みたハイブを実行することでしたが、どうやらうまくいきませんでした。その最初の実行で、次のエラーが発生しました。

Exception in thread "main" java.lang.RuntimeException: 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_db ディレクトリが作成されました。

ubuntu15-laptop: ~ $>ls -l |grep meta
drwxrwxr-x 5 testuser testuser 4096 Apr 14 12:44 metastore_db

それで、私が実行しようとしたとき

ubuntu15-laptop: ~ $>schematool -initSchema -dbType derby

メタストアは既に存在していましたが、完全な形ではありませんでした。

答えは次のとおりです。

  1. 初めてハイブを実行する前に、実行します

    schematool -initSchema -dbType derby

  2. すでにハイブを実行してから initSchema を実行しようとして失敗した場合:

    mv metastore_db metastore_db.tmp

  3. 再実行

    schematool -initSchema -dbType derby

  4. ハイブを再度実行する

**注意: ディレクトリを変更すると、上記で作成した metastore_db が見つかりません! これにはまだわからない正当な理由があると確信しています。なぜなら、私は文字通り今日初めてハイブを使用しようとしているからです。ああ、これに関する情報は次のとおりです 。metastore_dbは、Hiveを実行する場所に作成されます

于 2016-04-14T16:54:27.413 に答える