2

現在、フォルダーの内容をハイブの信頼できないキャッシュに追加する際に問題があります。以下を使用して、Hive の分散キャッシュに複数のファイルを正常に追加できます。

ADD FILE /folder/file1.ext;
ADD FILE /folder/file2.ext;
ADD FILE /folder/file3.ext;
etc.

.

ADD FILESまた、 (複数の)オプションがあることもわかります。これは、次のようなディレクトリを指定できることを意味しますADD FILES /folder/;。フォルダー内のすべてが含まれます(これは、Hadoop Streaming -files オプションで機能します)。しかし、これは Hive では機能しません。現在、各ファイルを明示的に追加する必要があります。

私はこれを間違っていますか?フォルダ全体のコンテンツを分散キャッシュに入れる方法はありますか。

PSワイルドカードを試しADD FILE /folder/*ましADD FILES /folder/*たが、それも失敗します。

編集:

ハイブ 0.11 の時点で、これがサポートされるようになりました。

ADD FILE /folder

今動作します。

私が使用しているのは、フォルダーの場所をパラメーターとしてハイブスクリプトに渡すことです。

$ hive -f my-query.hql -hiveconf folder=/folder

および my-query.hql ファイルで:

ADD FILE ${hiveconf:folder}

これですっきり整頓!

4

2 に答える 2

4

Add はディレクトリをサポートしていませんが、回避策としてファイルを圧縮できます次に、それをアーカイブとして分散キャッシュに追加します( ADD ARCHIVE my.zip)。ジョブが実行されている場合、アーカイブのコンテンツはスレーブ ノードのローカル ジョブ ディレクトリに展開されます (mapred.job.classpath.archivesプロパティを参照) 。

渡すファイルの数が比較的少なく、アーカイブを処理したくない場合は、特定のディレクトリにあるすべてのファイルに対してadd file コマンド
を準備する小さなスクリプトを作成することもできます 。

#!/bin/bash
#list.sh

if [ ! "$1" ]
then
  echo "Directory is missing!"
  exit 1
fi

ls -d $1/* | while read f; do echo ADD FILE $f\;; done

次に、Hive シェルから呼び出して、生成された出力を実行します。

!/home/user/list.sh /path/to/files
于 2013-03-15T15:01:45.427 に答える
0

私の場合、子フォルダーとファイルを含むフォルダーを移動する必要がありました。

ADD ARCHIVE xxx.gzファイルを追加していたを使用しましたが、スレーブ マシンで爆発 (解凍) していませんでした。

代わりに、ADD FILE <folder_name_without_traling_slash>実際にフォルダー全体を再帰的にスレーブにコピーします。

礼儀:コメントはデバッグに役立ちました

お役に立てれば !

于 2014-01-28T14:04:33.613 に答える