2017-03-03 2 views
1

外部としてhdfsデータをロードしようとしていますが、次のエラーが表示されます。外部テーブルを使用して1つのファイルを指す方法

フォルダml-100kには、異なるデータセットを持つ複数のデータセットがあるため、その特定のファイルをロードするだけで済みます。

hive> create external table movie_ratings (movie_id int, user_id int, ratings int, field_4 int) location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/u.data' 
    > ; 
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/u.data is not a directory or unable to create one) 

答えて

1

あなただけのディレクトリに、ファイルを指すテーブルを作成することはできませんが、特定のファイルに場所を変更することができる機能/バグがあります。

create external table movie_ratings (movie_id int, user_id int, ratings int, field_4 int) location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k'; 

alter table movie_ratings set location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/u.data'; 
+0

ファイル名が削除された場合、u.dataのみをロードするにはどうすればよいですか? – user1050619

+0

私はまだ回答を編集していると書いています:-)更新された回答を参照 –

+0

更新された答えをありがとう.. :) – user1050619

0

あなたは、ディレクトリを与える必要があり、特定のファイル上のハイブのテーブルを作成することはできません。 ですから、ml-100k/の下にサブディレクトリを作成し、このようにそれを使用することができます:

create external table movie_ratings (movie_id int, user_id int, ratings int, field_4 int) location 'hdfs://hadoop-master:8020/user/hduser/gutenberg/ml-100k/new_subfilder/' 

なテーブルに挿入すると、新しいを作成しますので、@Duduで言及したバグは、特定のケースを解決するが、一般的な使用のための安全でないかもしれません指定されたファイルを追加することはありません!

+0

なぜこれはバグだと思いますか? –

+0

作成中に受け入れられず、変更中に受け入れられ、理由が私の答えに記載されているためです。 – 54l3d

+0

だから、「作成」には機能が欠けているだけかもしれません。これはバグではありません。特定のファイルを読み取る機能は完全に合理的なようですが。書込み操作に問題がある場合は、挿入だけが設計によってブロックされ、選択はブロックされません。 –

関連する問題