2016-08-26 3 views
0

Oozie Hive2アクションでは、圧縮された '.zip'ファイルに存在する '.csv'ファイルからハイブテーブルをロードしようとしています。 Oozie Hiveアクションワークフローを通じて* .zip内のファイルを読み込むために、Hiveアクションは 'archive'タグ要素を提供します。ただ、以下のように「アーカイブ」タグ要素でZipファイルを宣言する必要があり、「アーカイブ」要素で「#」の後oozie - ハイブアクションでのアーカイブファイルの使用

<archive>${ZipfilePath}#unzipFile</archive> 

リファレンスは、解凍されたファイルを読み取るために一時フォルダの名前です。 .zipファイル内部の.csvファイルパスを参照して読むことができる「unzipFile /.csv」

問題がある - アーカイブ要素で参照パスを見つけることができませんハイブのアクション。 「私は成功したシェルアクション を使用して「アーカイブ」タグをテストすることができたと、

"Error: Error while compiling statement: FAILED: SemanticException Line  1:17 Invalid path ''unzipFile/file.csv'': No files matching path hdfs://nameservice1/user/hive/unzipFile/file.csv (state=42000,code=40000" 

として場所とエラーしかし:デフォルトでは、ハイブは「// nameservice1 /ユーザー/ハイブ/ HDFS」で解凍フォルダを探します猫Oozieハイブのアクションは、エッジノードのクラスタではなく実行されているので

cat unzipFile/file.csv 
+0

Oh my。 Oozieの ''命令は、Hadoopコマンドラインの '-archives'オプションやHive' add archives'コマンドのように動作します。 **パッケージ化されたライブラリや設定ファイル**を出荷することを意図しています。データファイルではありません。 –

+0

Hadoopは主に** archive **形式であり、多くのファイルが同じZIPにパッケージ化されているため、データファイルのZIPはサポートしていません。 MapReduceのパラダイム全体が壊れてしまいます。 HDFS *でロードする前に素材を解凍する必要があります(個々のファイルをGZIP形式で保存することができるので、 '.gz'拡張子は自動的に認識されます)。* –

+0

ありがとうございます。 oozie Shellのアクションがアーカイブから* .csvを読み取ることができたからといって、Hiveの場合と同じように動作するはずです。 – SaRu

答えて

0

などのファイルは、すべてのサポートファイルは、HDFSパスにする必要があります。つまり、ハイブアクションは実行時にOozieが選択した任意のノードで実行されます。ファイルをhdfsパスにアップロードして、クラスタ内の任意のノードからアクセスできるようにします。

0

シェルアクションは、スクリプトを実行するコンテナにファイルをローカルにコピーします。これが働く理由です。

Hive2:

LOAD DATA [LOCAL] INPATH 

ファイルには、LOCALを使用する必要がコンテナに移動されていたら。

関連する問題