大きなmboxファイルがあり、mstorなどのサードパーティAPIを使用して、hadoopを使用してmboxファイルからメッセージを解析しています。それらのファイルをhdfsにアップロードしました。ただし、問題は、このAPIが以下に示すようにローカルファイルシステムパスのみを使用することです。
MessageStoreApi store = new MessageStoreApi(“file location in locl file system”);
このAPIには、ストリームから初期化するコンストラクターが見つかりませんでした。そのため、hdfsストリームを読み取って初期化することができません。
今私の質問は、hdfsからローカルファイルシステムにファイルをコピーし、ローカル一時フォルダから初期化する必要がありますか?それが私が今していることです:
現在、マイマップ関数はmboxファイルのパスを受け取ります。
Map(key=path_of_mbox_file in_hdfs, value=null){
String local_temp_file = CopyToLocalFile(path in hdfs);
MessageStoreApi store = new MessageStoreApi(“local_temp_file”);
//process file
}
または他の解決策はありますか?1つのファイルが1つのブロックに収まるようにブロックサイズを大きくした場合、およびマップ関数でそれらのブロックの場所を取得できる場合は、ほとんどの場合、マップ関数はそれらと同じノードで実行されるため、次のような解決策を期待しています。ブロックが保存されている場合、ローカルファイルシステムに常にダウンロードする必要がない場合がありますか?しかし、それが常に機能するかどうかはわかりません:)
提案、コメントは大歓迎です!