18

Windows ボックスなどの外部ソースから Hadoop (HDFS) にデータを書き込む必要があります。現在、データを namenode にコピーし、HDFS の put コマンドを使用してクラスターに取り込みます。コードを閲覧したところ、これを行うための API が見つかりませんでした。私が間違っていること、HDFS に対して外部クライアントをコーディングする簡単な方法があることを誰かが教えてくれることを願っています。

4

8 に答える 8

17

JavaにはAPIがあります。プロジェクトに Hadoop コードを含めることで使用できます。一般に、JavaDoc は非常に役立ちますが、もちろん、探しているものを知っておく必要があります *g * http://hadoop.apache.org/common/docs/

特定の問題については、http: //hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileSystem.htmlを参照してください (これは最新リリースに適用されます。他の JavaDoc を参照してください)異なるバージョン用!)

典型的な呼び出しは次のようになります: Filesystem.get(new JobConf()).create(new Path("however.file")); 通常の JavaIO で処理できるストリームを返します。

于 2009-10-27T10:17:18.650 に答える
13

HDFSに入れる必要のあるデータをロードする問題については、問題を解決することにしました。

ファイルが存在するサーバーからHDFSにファイルをアップロードする代わりに、マッパーがファイルサーバーからファイルを読み取り(この場合はhttps経由)、HDFSに直接書き込む(Java経由)Java Map/Reduceジョブを作成しました。 API)。

ファイルのリストは入力から読み取られます。次に、フェッチするファイルのリストをファイルに入力し、ファイルをHDFSにアップロードして(hadoop dfs -putを使用)、適切な数のマッパーでmap/reduceジョブを開始する外部スクリプトがあります。

これにより、複数のファイルが同時に読み取り/書き込みされるため、優れた転送パフォーマンスが得られます。

たぶんあなたが探していた答えではないかもしれませんが、とにかく役立つことを願っています:-)。

于 2009-11-06T20:28:14.557 に答える
12

私の最後の回答から約 2 年後、Hoop/HttpFS と WebHDFS という 2 つの新しい選択肢ができました。

Hoop については、Cloudera のブログで最初に発表されており、 github リポジトリからダウンロードできます。このバージョンは、少なくとも Hadoop 0.20.1 と正常に通信することができました。おそらく、少し古いバージョンとも通信できます。

執筆時点ではまだリリースされていない Hadoop 0.23.1 を実行している場合、代わりに Hoop は独自のコンポーネントである HttpFS として Hadoop の一部になります。この作業はHDFS-2178の一部として行われました。Hoop/HttpFS は、HDFS だけでなく、Amazon S3 などの他の Hadoop 互換ファイルシステムへのプロキシにもなります。

Hoop/HttpFS は、独自のスタンドアロン サービスとして実行されます。

NameNode および DataNode サービスの一部として実行されるWebHDFSもあります。また、正しく理解すれば、HttpFS API と互換性のある REST API も提供します。WebHDFS は Hadoop 1.0 の一部であり、その主な機能の 1 つはデータの局所性を提供することです。読み取り要求を行うと、データが存在するデータノードの WebHDFS コンポーネントにリダイレクトされます。

どのコンポーネントを選択するかは、現在のセットアップと必要なものによって少し異なります。今すぐ HDFS への HTTP REST インターフェイスが必要で、WebHDFS を含まないバージョンを実行している場合は、github リポジトリの Hoop から始めるのが最も簡単なオプションのようです。WebHDFS を含むバージョンを実行している場合、WebHDFS にはない Hoop の機能 (他のファイルシステムへのアクセス、帯域幅制限など) が必要でない限り、私はそれを選びます。

于 2012-01-22T12:47:37.683 に答える
11

Cygwin をインストールし、Hadoop をローカルにインストールします (バイナリと NN を指す構成が必要です。実際にサービスを実行する必要はありません)。hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

新しい Cloudera デスクトップを使用して Web UI 経由でファイルをアップロードすることもできますが、これは巨大なファイルには適していない可能性があります。

HDFS 用の WebDAV オーバーレイもありますが、それがどれほど安定しているか、信頼できるかはわかりません。

于 2009-10-07T18:27:57.157 に答える
3

これ専用のページが http://wiki.apache.org/hadoop/MountableHDFSにあるようです:

これらのプロジェクト (以下に列挙) を使用すると、mount コマンドを使用して HDFS を (ほとんどの Unix のフレーバーで) 標準ファイル システムとしてマウントできます。マウントすると、ユーザーは「ls」、「cd」、「cp」、「mkdir」、「find」、「grep」などの標準の Unix ユーティリティを使用して hdfs のインスタンスを操作したり、open などの標準の Posix ライブラリを使用したりできます。 C、C++、Python、Ruby、Perl、Java、bash などからの書き込み、読み取り、終了

後でこれらのプロジェクトについて説明します

  • contrib/fuse-dfs は、fuse、一部の C グルー、libhdfs、および hadoop-dev.jar で構築されています
  • fuse-j-hdfs は、fuse、fuse for Java、および hadoop-dev.jar で構築されています。
  • hdfs-fuse - Google コード プロジェクトは、contrib/fuse-dfs と非常によく似ています。
  • webdav - webdav リソース mapR として公開された hdfs - 読み取り/書き込み NFS アクセスをサポートするクローズド ソースの hdfs 互換ファイル システムが含まれています
  • HDFS NFS プロキシ - ヒューズを使用せずに HDFS を NFS としてエクスポートします。Kerberos をサポートし、書き込みの順序を変更して、hdfs に順番に書き込まれるようにします。

私はこれらのいずれも試していませんが、OPと同じ必要があるため、すぐに回答を更新します

于 2012-12-14T19:59:14.630 に答える
0

また、Hadoop 統合用のコンポーネントを含む Talend を使用することもできます。

于 2013-06-29T06:55:39.733 に答える
0

コードを実行しているマシン (machine_X と呼びます) に HDFS をマウントしてみてください。machine_X には HDFS とのインフィニバンド接続が必要です。https://wiki.apache.org/hadoop/MountableHDFSを確認してください。

于 2014-07-15T21:50:35.150 に答える
0

HadoopDrive ( http://hadoopdrive.effisoft.eu ) も使用できます。これは Windows シェル拡張です。

于 2015-10-22T07:26:37.710 に答える