Webhdfsを使用してhadoophdfsに28GBのファイルをロードしていますが、ロードには最大25分かかります。
Hdfs putを使用して同じファイルをロードしようとしましたが、約6分かかりました。なぜパフォーマンスに大きな違いがあるのですか?
何を使用することをお勧めしますか?誰かが私に説明したり、良いリンクを教えてもらえますか?それは本当に役に立ちます。
私たちの下で私が使用しているコマンド
curl -i --negotiate -u: -X PUT "http://$hostname:$port/webhdfs/v1/$destination_file_location/$source_filename.temp?op=CREATE&overwrite=true"
これにより、次のステップでデータを書き込むために使用するデータノードアドレスにリダイレクトされます。
Hadoopは、HDFSにアクセスするいくつかの方法を提供します
以下のすべては、ファイルシステムのほぼすべての機能をサポートしています-
1。ファイルシステム(FS)シェルコマンド: Hadoopファイルシステム操作、およびローカルFS、HFTP FS、S3FSなどのHadoopがサポートする他のファイルシステムへの簡単なアクセスを提供します。
これにはインストールするhadoopクライアントが必要であり、クライアントが1つのデータノードに直接ブロックを書き込む必要があります。 Hadoopのすべてのバージョンは、ファイルシステム間でコピーするためのすべてのオプションをサポートしているわけではありません。2。WebHDFS:パブリックHTTP REST APIを定義します。これにより、クライアントはHadoopをインストールせずに複数の言語からHadoopにアクセスできます。利点は言語に依存しない方法です(curl、php等....)。
WebHDFSはクラスターのすべてのノードにアクセスする必要があり、一部のデータが読み取られると、ソースノードから直接送信されますがhttp以上のオーバーヘッドがあります(1)FSシェルですが異常に動作し、異なるHadoopクラスターとバージョンで問題はありません。。HttpFS。ファイアウォールの背後にあるクラスター内のHDFSに対してデータの読み取りと書き込みを行います。単一ノードは、すべてのデータが転送されるGateWayノードとして機能し、パフォーマンスに関しては、これはさらに遅くなる可能性がありますが、パブリックソースからセキュリティで保護されたクラスターにデータをプルする必要がある場合に適しています。
したがって、正しく選択してください!..リストを下に移動することは、上記の選択肢が利用できない場合は常に代替手段になります。
Hadoopは、ファイルとディレクトリの作成、名前変更、削除、ファイルのオープン、読み取り、書き込みなどのファイルシステム操作をサポートするFileSystem ShellAPIを提供します。 FileSystemShellはJavaアプリケーションであり、Java FileSystemクラスを使用してFileSystem操作を提供します。FileSystemShellAPIは操作のRPC接続を作成します。
クライアントがHadoopクラスター内にある場合、これはhdfs
URIスキームを使用してHadoop分散ファイルシステムに接続し、クライアントが直接RPC接続を行ってHDFSにデータを書き込むため便利です。
これはHadoopクラスター内で実行されているアプリケーションには適していますが、外部アプリケーションがディレクトリを作成してそのディレクトリにファイルを書き込んだり、HDFSに保存されているファイルのコンテンツを読み取ったりする必要があるなど、HDFSを操作する必要がある場合があります。 Hortonworksは、WebHDFSと呼ばれる標準のREST機能に基づいて、これらの要件をサポートするAPIを開発しました。
WebHDFSは、外部アプリケーションがHTTP接続を介してDistributedFileSystemに接続できるREST API機能を提供します。外部アプリケーションがJavaまたはPHPであっても、.
WebHDFSの概念は、GET、PUT、POST、DELETEなどのHTTP操作に基づいています。OPEN、GETFILESTATUS、LISTSTATUSなどの操作はHTTP GETを使用し、CREATE、MKDIRS、RENAME、SETPERMISSIONSなどの他の操作はHTTPに依存しています。 PUT
HTTPを介したHDFSへの安全な読み取り/書き込みアクセスを提供します。これは基本的に、HFTP(HTTPを介した読み取り専用アクセス)およびHSFTP(HTTPSを介した読み取り専用アクセス)の代替として意図されています。分散ファイルシステムに接続するためにwebhdfs
URIスキームを使用しました。
クライアントがHadoopクラスターの外部にあり、HDFSにアクセスしようとしている場合。 WebHDFSはそのために役立ちます。また、Hadoopクラスターの2つの異なるバージョンを接続しようとしている場合、WebHDFSはREST APIを使用しているため、MapReduceまたはHDFSバージョンに依存しないので便利です。
HDFSアクセスとWebHDFSの違いは、HDFSの設計によるスケーラビリティと、HDFSクライアントがファイルを異なるノードに存在する分割に分解するという事実です。 HDFSクライアントがファイルコンテンツにアクセスすると、内部でNameNodeに移動し、Hadoopクラスター上のファイル分割とその物理的な場所のリストを取得します。
次に、これらすべての場所に存在するDataNodeを実行して、分割内のブロックを並列にフェッチし、コンテンツをクライアントに直接パイプします。
WebHDFSはHDFSクラスターに存在するプロキシであり、HDFSに階層化されるため、すべてのデータをWebHDFSクライアントにリレーする前にプロキシにストリーミングする必要があります。本質的に、それは単一のアクセスポイントになり、IOボトルネックになります。
従来のJavaクライアントAPI(hdfsのLinuxコマンドによって内部的に使用されています)を使用できます。
私が読んだものから ここ 。
JavaクライアントとRESTベースのアプローチのパフォーマンスは同様のパフォーマンスです。