0

私は Hadoop の初心者で、最近、Hadoop を使用したテスト プロジェクトを行うように依頼されました。BigData を読んでいるうちに、たまたまペイルのことを知りました。今、私がやりたいことは、このようなものです。最初に単純なオブジェクトを作成し、Thrift を使用してシリアル化し、それを Pail を使用して HDFS に入れます。次に、マップ関数内でそのオブジェクトを取得し、やりたいことをやりたいと思います。しかし、 map 関数内で tat オブジェクトを取得する方法がわかりません。

誰かが私に参考文献を教えてくれますか、それを行う方法を説明してもらえますか?

4

1 に答える 1

0

次の 3 つのオプションが考えられます。

  1. オプションを使用し-files、HDFS でファイルに名前を付けます (タスク トラッカーは、そのノードで実行されているすべてのジョブに対してファイルを 1 回ダウンロードするため、推奨されます)。
  2. DistributedCache を使用します (上記と同様のロジック)。ただし、コマンド ラインではなく API 呼び出しを使用してファイルを構成します。
  3. ファイルを HDFS から直接ロードします (タスクごとに HDFS 経由でファイルをプルするため、効率が低下します)。

一部のコードについては、次のようにロード ロジックをマッパーsetup(...)または configure(..) メソッドに入れます (新しい API を使用しているか古い API を使用しているかによって異なります)。

protected void setup(Context context) {
    // the -files option makes the named file available in the local directory
    File file = new File("filename.dat");
    // open file and load contents ...

    // load the file directly from HDFS
    FileSystem fs = FileSystem.get(context.getConfiguration());
    InputStream hdfsInputStream = fs.open("/path/to/file/in/hdfs/filename.dat");
    // load file contents from stream...
}

DistributedCache には、Javadocsにいくつかのサンプル コードがあります。

于 2012-06-08T02:19:47.900 に答える