2

データ (int と string の 2 つの列を持つ単純なファイル) をインポートしようとしています。テーブルは次のようになります。

hive> describe test;
id      int
name    string

インポートしようとすると:

hive> load data inpath '/user/test.txt' overwrite into table test;
Loading data to table default.test
rmr: org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop, access=ALL, inode="/user/hive/warehouse/test":hive:hadoop:drwxrwxr-x
Failed with exception org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop, access=WRITE, inode="/user/hive/warehouse/test":hive:hadoop:drwxrwxr-x
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

ユーザー hadoop はすべての権限を持っているようですが、データを読み込めませんが、テーブルを作成できました。どうしたの?

4

3 に答える 3

4

Hive は、そのメタデータに Metastore を使用します。すべてのテーブル定義はその中に作成されますが、実際のデータはhdfsに保存されます。現在、ハイブのアクセス許可とhdfs のアクセス許可はまったく別のものです。それらは無関係です。いくつかの回避策があります。

  1. 権限をまったく無効にする (hdfs hdfs の場合)
  2. ストレージ ベースのhttps://cwiki.apache.org/confluence/display/Hive/HCatalog+Authorizationを使用します (この場合、hdfs にデータベース ディレクトリを所有していないと、テーブルを作成できません)。
  3. ハイブユーザーの下ですべてのジョブを送信します ( sudo -u hive hive )
  4. データベースを作成します。

    create database hadoop;

正しい権限でhdfsに必要なディレクトリを作成します

hdfs dfs -mkdir /user/hive/warehouse/hadoop.db; 
hdfs dfs -chown hadoop:hive /user/hive/warehouse/hadoop.db
hdfs dfs -chmod g+w /user/hive/warehouse/hadoop.db

もちろん、 と を有効にする必要がhive.metastore.client.setugi=trueありhive.metastore.server.setugi=trueます。これらのパラメーターは、現在のシェル ユーザーの下でハイブにジョブを実行するように指示します (ハイブはディレクトリを作成できないため、これらのパラメーターは既に有効になっているようです)。

于 2012-10-08T18:55:28.273 に答える
2

この問題は構文が原因です。

テーブルを生成するために指定された形式は、入力ファイル形式に似ている必要があります。

于 2013-12-26T10:13:58.743 に答える