このトピックに関する他のすべてのスレッドを見てきましたが、まだ答えが見つかりません...
簡単に言えば、UDF 内から直接ではなく、Pig StoreFunc から Hadoop 分散キャッシュにアクセスしたいのです。
関連する PIG コード行:
DEFINE CustomStorage KeyValStorage('param1','param2','param3');
...
STORE BLAH INTO /path/ using CustomStorage();
関連する Java コード:
public class KeyValStorage<M extends Message> extends BaseStoreFunc /* ElephantBird Storage which inherits from StoreFunc */ {
...
public KeyValStorage(String param1, String param2, String param3) {
...
try {
InputStream is = new FileInputStream(configName);
try {
prop.load(is);
} catch (IOException e) {
System.out.println("PROPERTY LOADING FAILED");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println("FILE NOT FOUND");
e.printStackTrace();
}
}
...
}
configName は、分散キャッシュから読み取ることができるローカル ファイルの名前ですが、FileNotFoundException が発生しています。PIG UDF 内からまったく同じコードを直接使用すると、ファイルが見つかるため、ファイルが分散キャッシュ経由で送信されていることがわかります。これが確実に発生するように、適切なパラメーターを設定します。
<property><name>mapred.cache.files</name><value>/path/to/file/file.properties#configName</value></property>
これを回避する方法はありますか?
ありがとう!