2

Amazons EMR Hadoop 実装の上で Python MapReduce スクリプトを実行しています。メイン スクリプトの結果として、アイテム アイテムの類似性が得られます。アフターケアのステップで、この出力をアイテムごとに個別の S3 バケットに分割して、各アイテム バケットに類似したアイテムのリストが含まれるようにします。これを実現するために、アフターケア ステップの reduce 関数で Amazon の boto python ライブラリを使用したいと考えています。

  • 外部 (python) ライブラリを Hadoop にインポートして、python で書かれた削減ステップで使用できるようにするにはどうすればよいですか?
  • Hadoop 環境内でその方法で S3 にアクセスすることは可能ですか?

前もって感謝します、トーマス

4

1 に答える 1

4

Hadoop プロセスを起動するときに、使用可能にする外部ファイルを指定できます。これは、-files引数を使用して行われます。

$HADOOP_HOME/bin/hadoop jar /usr/lib/COMPANY/analytics/libjars/MyJar.jar -files hdfs://PDHadoop1.corp.COMPANY.com:54310/data/geoip/GeoIPCity.dat

ファイルが HDFS 上にある必要があるかどうかはわかりませんが、頻繁に実行されるジョブであれば、そこに置くのも悪くないでしょう。
コードから、次のようなことができます

if (DistributedCache.getLocalCacheFiles(context.getConfiguration()) != null) {
    List<Path> localFiles = Utility.arrayToList(DistributedCache.getLocalCacheFiles(context.getConfiguration()));
    for (Path localFile : localFiles) {
        if ((localFile.getName() != null) && (localFile.getName().equalsIgnoreCase("GeoIPCity.dat"))) {
            Path path = new File(localFile.toUri().getPath());
        }
    }
}

これは、複数のマッパー内の作業コードから直接コピーして貼り付けただけです。

あなたの質問の2番目の部分についてはわかりません。うまくいけば、最初の部分への答えがあなたの出発点になるでしょう。:)

さらに、追加のjarを含めるためのもの-filesがあります。-libjarsここについて少し情報があります-ファイルへのパスを必要とするコンストラクターがある場合、それがjarにパッケージ化されている場合、どうすればそれを「偽造」できますか?

于 2011-02-15T21:35:46.477 に答える