2

こんにちは、Amazon EMR と Hadoop を初めて使用します。EMR ジョブから外部ファイル (S3 に保存されている) を読み取る方法を知りたいと思っていました。たとえば、ブラックリストに登録された文字列の長いリストを含むファイルがあります。EMR ジョブが入力を処理しているときに、処理中に使用するために、ブラックリストに登録された文字列のリストをジョブに事前に読み込ませるにはどうすればよいですか?

通常のJava Scannerクラスを使用して、ファイルへのS3パスをハードコーディングしようとしましたが、うまくいかないようでしたが、間違っている可能性があります...

4

2 に答える 2

0

私はこのようなことをします(申し訳ありませんが、コードはJavaではなくscalaですが、同じです)

  • メインメソッドへの引数としてパスを渡します

  • これを構成のプロパティとして設定します

val conf = new Configuration()    
conf.set("blacklist.file", args(0))
  • マッパーのセットアップ方法で、ファイルを読み取ります。
var blacklist: List[String] = List()
    override def setup(context: Context) {
          val path = new Path(context.getConfiguration.get("blacklist.file"))
          val fileSystem = FileSystem.get(path.toUri, context.getConfiguration)
          blacklist = scala.io.Source.fromInputStream(fileSystem.open(path)).getLines.toList
        }
于 2012-12-14T22:37:00.003 に答える
0

次のように、このファイルを分散キャッシュに追加するとよいでしょう。

...
String s3FilePath = args[0];
DistributedCache.addCacheFile(new URI(s3FilePath), conf);
...

後で、マッパー/リデューサーの configure() で、次のことができます。

...
Path s3FilePath;
@Override
public void configure(JobConf job) {
s3FilePath = DistributedCache.getLocalCacheFiles(job)[0];
FileInputStream fstream = new FileInputStream(s3FilePath.toString());
// Read the file and build a HashMap/List or something which can be accessed from map/reduce methods as desired.
...
}
于 2012-12-18T20:49:51.673 に答える