「hadoop fs」シェルコマンドと「hdfs dfs」シェルコマンドの違いは何ですか?


109

彼らは等しいはずですか?

しかし、「hadoop fs」コマンドが「」コマンドを表示するのに、hdfs fileshdfs 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 jenkinsによりコンパイルされ、2013年4月22日10:48:26 PDT


1
この質問をするのは私の誤りです。hdfs dfsあまりにもHDFSのファイルを表示します。
チャーリーリン

回答:


140

次の3つのコマンドは同じように見えますが、わずかな違いがあります

  1. hadoop fs {args}
  2. hadoop dfs {args}
  3. hdfs dfs {args}

  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を使用した場合でも、locate hdfsを探し、そのコマンドをhdfs dfsに委任します。


5
面白い :-)。したがって、hadoop fsローカルやhdfsなどのファイルシステムに関連している場合、hadoopはHDFSルートディレクトリの内容を表示することをどのように選択しますhadoop fs -ls /か?また、hadoop fs -ls /コマンドの実行時にローカルルートディレクトリの内容を表示するようにhadoopに指示するにはどうすればよいですか?
sgsi 2015年

8
コマンドにfile引数として渡されたURI hadoop fs(などhdoop fs -ls file:///)のスキーマを使用して、ローカルFSを参照できます。何も言われていない場合は、デフォルトでhdfsスキーマAFAIK(hdoop fs -ls /== hadoop fs -ls hdfs:///)に設定されます。
frb 2015年

2
hadoop fs -ls file:///ローカルファイルを一覧表示する従来の方法があるのに、なぜが必要なのでしょうか。
srctaha 2016年

なぜ「Hadoop」は「hdfs」を支持して廃止されたのですか?機能的な違いはありますか、それとも構文の変更だけですか?
Shuklaswag 2017

31

ここに画像の説明を入力してください

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html

ファイルシステム(FS)シェルには、Hadoop分散ファイルシステム(HDFS)、およびローカルFS、WebHDFS、S3 FSなどのHadoopがサポートする他のファイルシステムと直接対話するさまざまなシェルのようなコマンドが含まれています。

bin / hadoop fs <args>

すべてのFSシェルコマンドは、パスURIを引数として受け取ります。URI形式は、scheme:// authority / pathです。HDFSの場合、スキームはhdfsで、ローカルFSの場合、スキームはファイルです。スキームと権限はオプションです。指定しない場合、構成で指定されたデフォルトのスキームが使用されます。/ parent / childなどのHDFSファイルまたはディレクトリは、hdfs:// namenodehost / parent / childまたは単に/ parent / childとして指定できます(設定がhdfs:// namenodehostを指すように設定されている場合)。

FSシェルのほとんどのコマンドは、対応するUnixコマンドのように動作します。違いは、各コマンドで説明されています。エラー情報はstderrに送信され、出力はstdoutに送信されます。

HDFSが使用されている場合、

hdfs dfs

同義語です。


5

fsは任意のファイルシステムを指し、ローカルまたはHDFSの場合がありますが、dfsはHDFSファイルシステムのみを指します。したがって、異なるファイルシステム間でデータのアクセス/転送を実行する必要がある場合は、fsが適しています。


5

私が言うことができるものから、差がないhdfs dfsとはhadoop fs。これらは、使用しているHadoopのバージョンに基づいた単純な命名規則です。例えば、中のノート1.2.1使用hdfs dfs中に0.19の用途hadoop fs。個別のコマンドは逐語的に説明されていることに注意してください。それらは同じように使用されます。

また、どちらのコマンドも、指定した内容(hdfs、file、s3など)に応じて、異なるファイルシステムを参照できることに注意してください。ファイルシステムがリストされていない場合は、構成で指定されているデフォルトにフォールバックします。

あなたはHadoop 2.0.0を使用しており、Alphaバージョンが使用しており、構成のデフォルトスキームとしてHDFSを使用するように設定されているように見えます(2.0.5のドキュメントに基づくhadoop fshdfs dfsコマンドは前からで残されるかもしれない、と設定で指定されていないことから、単にローカルファイルシステムをデフォルトすることができます。

したがってhadoop fs、ドキュメントではそれらは同一であるため、あまり心配することはありません。


3

FSは、ローカル、HDFSなどの任意のファイルシステムを指すことができる一般的なファイルシステムに関連しています。ただし、dfsはHDFSに非常に固有です。したがって、FSを使用すると、fromまたはto localまたはhadoop分散ファイルシステムを使用してdestinationに操作を実行できます。ただし、DFS操作の指定はHDFSに関連しています。

以下は、これら2つを異なるシェルとして説明するhadoopドキュメントからの抜粋です。

FSシェル FileSystem(FS)シェルは、bin / hadoop fsによって呼び出されます。すべてのFSシェルコマンドは、パスURIを引数として受け取ります。URI形式は、scheme:// autority / pathです。HDFSの場合、スキームはhdfsで、ローカルファイルシステムの場合、スキームはfileです。スキームと権限はオプションです。指定しない場合、構成で指定されたデフォルトのスキームが使用されます。/ parent / childなどのHDFSファイルまたはディレクトリは、hdfs:// namenodehost / parent / childまたは単に/ parent / childとして指定できます(設定がhdfs:// namenodehostを指すように設定されている場合)。FSシェルのほとんどのコマンドは、対応する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コマンドのように動作します。

したがって、上記から、すべて構成スキームに依存すると結論付けることができます。この2つのコマンドを絶対URIで使用する場合、つまりscheme:// a / bの場合、動作は同じになります。動作の違いの原因である、ファイルおよびfsとdfsのhdfsのそれぞれにデフォルトで構成されたスキーム値のみ。


hdfs dfsがhdfs dfs /とは異なる場所を指すのはなぜですか?
mel 2015年

hadoopのbashのようなインタラクティブなシェルがあったらいいですね
Chris

2

fs=ファイルシステム
dfs=分散ファイルシステム

fs =その他のファイルシステム+分散ファイルシステム

FSは、ローカル、HDFSなどの任意のファイルシステムを指すことができる一般的なファイルシステムに関連しています。ただし、dfsはHDFSに非常に固有です。したがって、FSを使用すると、fromまたはto localまたはhadoop分散ファイルシステムを使用してdestinationに操作を実行できます。ただし、DFS操作の指定はHDFSに関連しています。

それはすべて構成方式に依存します。この2つのコマンドを絶対URIで使用する場合、つまりscheme://a/b動作は同じになります。動作の違いの原因となる、デフォルトの構成されたスキーム値とfor file://およびhdfs://for のみ。fsdfs

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.