3

ベース R (2.14.1) を持つ Hadoop クラスターにアクセスできますが、すべてのノードに追加パッケージがインストールされていません。追加のパッケージがないという事実を回避するために、ベース R マッパーとレデューサー ストリーミング スクリプトを作成してきました。ただし、スクリプトの一部として、主に rjson などの特定のパッケージを使用する必要があるところまで来ました。

クラスターの管理者権限がなく、ユーザー アカウントがかなり制限されています。クラスター管理者がすべてのノードにパッケージをインストールすることは (現時点では) オプションではなく、クラスターには外部インターネット アクセスがありません。

rjson_0.2.8.tar.gz ソース ファイルをゲートウェイ ノードにアップロードしました。install.packages("rjson_0.2.8.tar.gz", repos = NULL, lib = /tmp)スクリプトの開始時にパッケージがインストールされ、ストリーミング ジョブの -cacheArchive パラメータを介してソースを渡すように、R パッケージを一時的に追加することは可能ですか? ジョブが完了すると消えるように、一時的な場所にパッケージをインストールしたいと思います。

これは可能ですか?

オプションであるJSONを処理するためのものであるため、「Pythonを使用する」という回答が得られることはわかっていますが、質問は任意のパッケージに関するものです。:)

4

3 に答える 3

2

私は rmr (プロジェクト RHadoop) の作成者です。インストールの問題を回避するために、かなり急進的なアプローチを試みています。あなたが説明したようにストリーミング機能を使用して、Rディストリビューション全体、パッケージ、およびすべてをjarにパッケージ化しますが、ある程度の間接性があります。R ディストリビューションは、tmp ディレクトリではなく、ユーザーの hdfs ディレクトリにロードされます。その後、ストリーミングによって各ノードに移動されます。ジョブ自体は、まだ存在しない場合はいつでも最終的な宛先に移動します。これは、ディストリビューション全体が小さくなく、ストリーミングのキャッシュ機能を利用したかったためです。さらに、R のコンポーネントは再配置可能ではありません。したがって、何かを更新したりパッケージを追加したりするたびに、jar を再構築して hdfs に移動します。残りは自動的に行われ、必要な場合にのみ発生します (hdfs->ノード->最終的な場所)。Hortonworks の担当者から、正しく行うためのコーチングも受けました。ブランチ 0-install には概念実証がありますが、それは ubuntu/EC2 でのみ機能し、どうやら私が持つべきではないいくつかのパスをハードコーディングすることができたようで、他の多くの仮定を行っているため、これは単なる喜んで参加する開発者向けですが、主な要素はすべて揃っています。もちろん、これは rmr を使用してジョブを作成することを条件としていますが、これは別の決定です。または、コードを見て、目的に合わせてアプローチを再現することもできます。しかし、私はむしろこれをすべての人のために一度解決したいと思っています. jar を準備するスクリプトは次のとおりです。私は他にも多くの仮定を立てているので、これは開発者向けのものですが、主な要素はすべて揃っています。もちろん、これは rmr を使用してジョブを作成することを条件としていますが、これは別の決定です。または、コードを見て、目的に合わせてアプローチを再現することもできます。しかし、私はむしろこれをすべての人のために一度解決したいと思っています. jar を準備するスクリプトは次のとおりです。私は他にも多くの仮定を立てているので、これは開発者向けのものですが、主な要素はすべて揃っています。もちろん、これは rmr を使用してジョブを作成することを条件としていますが、これは別の決定です。または、コードを見て、目的に合わせてアプローチを再現することもできます。しかし、私はむしろこれをすべての人のために一度解決したいと思っています. jar を準備するスクリプトは次のとおりです。https://github.com/RevolutionAnalytics/RHadoop/blob/0-install/rmr/pkg/tools/0-install/setup-jarおよび残りのアクションは rmr:::rhstream にあります

于 2012-06-21T21:22:30.333 に答える
1

引数で提案したとおりに実行できるはずですが、これは非推奨であり、代わり-cacheArchiveに使用する必要があることに注意してください。-archives

もう 1 つの注意点として、-archivesover-filesを使用すると、tar.gz ファイルが (手動で解凍するのではなく) タスク トラッカーによって解凍されます。

どちらの方法でも、コードの実行時に現在の作業ディレクトリでファイルまたはアンパックされたファイルが利用可能になり、そこから R で利用可能なメカニズムに従ってモジュール パッケージを登録できます (私は R を使用したことがないので、ここからは自力で)

于 2012-06-21T17:50:21.297 に答える
0

一時ディレクトリを作成できます(たとえば、Rのtempfileまたはpythonのmkdtempを使用します)。ディレクトリの名前が一意であることを確認してください。一意でない場合、複数のマッパーが同時にパッケージを同じ場所にインストールすると、 Rはエラーを報告します。この一時ディレクトリは、のライブラリの場所として使用できますinstall.packages。ディレクトリは、mapred.child.tmpプロパティで定義された場所にあります。デフォルトの設定では、対応するマッパーが完了すると削除されます。mapred.child.tmpを特定の場所(たとえば-D mapred.child.tmp=/tmp/)に設定することもできますが、Hadoopは一時ディレクトリを削除しない場合があります。

于 2012-08-25T11:13:17.660 に答える