彼らは平等になるはずですか?
しかし、「hadoop fs
」コマンドがhdfs files
を表示し、「hdfs dfs
」コマンドがローカルファイルを表示するのはなぜですか?
hadoopバージョン情報は次のとおりです。
Hadoop 2.0.0-mr1-cdh4.2.1 Subversion git://ubuntu-slave07.jenkins.cloudera.com/var/lib/jenkins/workspace/CDH4.2.1-Packaging-MR1/build/cdh4/mr1/2.0.0 -mr1-cdh4.2.1/source -r 2013年4月22日10:48:26 PDTにジェンキンスがコンパイル
以下は同じように見えますが、わずかな違いがある3つのコマンドです。
hadoop fs <args>
FSは、ローカル、HDFSなどの任意のファイルシステムを指すことができる汎用ファイルシステムに関連しています。したがって、ローカルFS、(S)FTP、S3などの異なるファイルシステムを扱う場合に使用できます。
hadoop dfs <args>
dfsはHDFSに非常に固有です。 HDFSに関連する操作で機能します。これは非推奨であり、代わりにhdfs dfsを使用する必要があります。
hdfs dfs <args>
2番目と同じです。つまり、HDFSに関連するすべての操作で機能し、hadoop dfsの代わりに推奨されるコマンドです。
以下は、hdfs
コマンドとして分類されたリストです。
namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups
したがって、hadoop dfsを使用しても、hdfsの位置を確認し、そのコマンドをhdfs dfsに委任します。
https://hadoop.Apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html
ファイルシステム(FS)シェルには、Hadoop分散ファイルシステム(HDFS)だけでなく、Hadoopがサポートする他のファイルシステム(ローカルFS、WebHDFS、S3 FSなど)と直接やり取りするさまざまなシェルのようなコマンドが含まれています。
bin/hadoop fs
<args>
すべてのFSシェルコマンドは、引数としてパスURIを取ります。 URI形式は、scheme:// authority/pathです。 HDFSのスキームはhdfsで、ローカルFSのスキームはファイルです。スキームと権限はオプションです。指定しない場合、構成で指定されたデフォルトのスキームが使用されます。 HDFSファイルまたは/ parent/childなどのディレクトリは、hdfs:// namenodehost/parent/childまたは単に/ parent/childとして指定できます(構成がhdfs:// namenodehostを指すように設定されている場合)。
FS Shellのコマンドのほとんどは、対応するUnixコマンドのように動作します。違いは各コマンドで説明されています。エラー情報はstderrに送信され、出力はstdoutに送信されます。
HDFSが使用されている場合、
hdfs dfs
同義語です。
私が言えることから、hdfs dfs
とhadoop fs
の間に違いはありません。これらは、使用しているHadoopのバージョンに基づいて、単に異なる命名規則です。たとえば、 1.2.1 use hdfs dfs
のメモは .19 use hadoop fs
です。個別のコマンドは逐語的に説明されていることに注意してください。それらは同じように使用されます。
また、両方のコマンドは、指定内容(hdfs、file、s3など)に応じて異なるファイルシステムを参照できることに注意してください。ファイルシステムがリストされていない場合、設定で指定されているデフォルトに戻ります。
Hadoop 2.0.0を使用しており、Alphaバージョンはhadoop fs
を使用し、構成でデフォルトスキームとしてHDFSを使用するように設定されているようです( 2.0.5ドキュメントに基づく ) 。 hdfs dfs
コマンドは以前から残されている可能性があり、構成で指定されていないため、デフォルトでローカルファイルシステムになっている可能性があります。
それで、私はhadoop fs
に固執するだけで、ドキュメンテーションではまったく同じなので心配しすぎません。
fsは任意のファイルシステムを指します。ローカルまたはHDFSの場合がありますが、dfsはHDFSファイルシステムのみを指します。したがって、異なるファイルシステム間でデータのアクセス/転送を実行する必要がある場合は、fsが最適です。
FSは、ローカル、HDFSなどの任意のファイルシステムを指すことができる汎用ファイルシステムに関連しています。しかし、dfsはHDFSに非常に固有です。したがって、FSを使用すると、from/to localまたはhadoop分散ファイルシステムでdestinationに操作を実行できます。ただし、DFS操作を指定することはHDFSに関連します。
以下は、これら2つを異なるシェルとして説明しているhadoopドキュメントからの抜粋です。
FS Shell FileSystem(FS)Shellは、bin/hadoop fsによって呼び出されます。すべてのFSシェルコマンドは、引数としてパスURIを取ります。 URI形式は、scheme:// autority/pathです。 HDFSの場合、スキームはhdfsで、ローカルファイルシステムの場合、スキームはfileです。スキームと権限はオプションです。指定しない場合、構成で指定されたデフォルトのスキームが使用されます。 HDFSファイルまたは/ parent/childなどのディレクトリは、hdfs:// namenodehost/parent/childまたは単に/ parent/childとして指定できます(構成がhdfs:// namenodehostを指すように設定されている場合)。 FS Shellのコマンドのほとんどは、対応するUnixコマンドのように動作します。
DFShell HDFSシェルはbin/hadoop dfsによって呼び出されます。すべてのHDFSシェルコマンドは、引数としてパスURIを取ります。 URI形式は、scheme:// autority/pathです。 HDFSの場合、スキームはhdfsで、ローカルファイルシステムの場合、スキームはfileです。スキームと権限はオプションです。指定しない場合、構成で指定されたデフォルトのスキームが使用されます。/parent/childなどのHDFSファイルまたはディレクトリは、hdfs:// namenode:namenodeport/parent/childとして、または単に/ parent/childとして指定できます(構成がnamenode:namenodeportを指すように設定されている場合)。 HDFSシェルのコマンドのほとんどは、対応するUnixコマンドのように動作します。
したがって、上記から、すべてがスキームconfigureに依存していると結論付けることができます。この2つのコマンドを絶対URI(scheme:// a/bなど)で使用する場合、動作は同じです。動作の違いの原因であるfsとdfsのファイルとhdfsにそれぞれデフォルトで設定されたスキーム値のみ。
fs
=ファイルシステムdfs
=分散ファイルシステム
fs
=他のファイルシステム+分散ファイルシステム
FSは、ローカル、HDFSなどの任意のファイルシステムを指すことができる汎用ファイルシステムに関連しています。しかし、dfsはHDFSに非常に固有です。したがって、FSを使用すると、ローカルまたはhadoopの分散ファイルシステムとの間で宛先に操作を実行できます。ただし、DFS操作の指定はHDFSに関連しています。
それはすべてスキームの設定に依存します。この2つのコマンドを絶対URIで使用する場合、つまりscheme://a/b
の動作は同じです。 file://
とhdfs://
に対してデフォルトで設定されたスキーム値のみがそれぞれfs
とdfs
に対応し、これが動作の違いの原因です。