sự khác biệt giữa lệnh shell “hadoop fs” và lệnh shell “hdfs dfs” là gì?


109

Chúng được cho là bình đẳng?

nhưng, tại sao hadoop fslệnh "" hiển thị hdfs filestrong khi hdfs dfslệnh "" hiển thị tệp cục bộ?

đây là thông tin phiên bản 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 Được tổng hợp bởi jenkins vào Thứ Hai ngày 22 tháng 4 10:48:26 PDT 2013


1
Tôi sai khi hỏi câu hỏi này. các hdfs dfshiển thị các tập tin HDFS quá.
Charlie Lin

2
Có thể có bản sao của Sự khác biệt giữa `hadoop dfs` và` hadoop fs`
TechDog

Câu trả lời:


140

Sau đây là ba lệnh xuất hiện giống nhau nhưng có sự khác biệt nhỏ

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

  hadoop fs <args>

FS liên quan đến hệ thống tệp chung có thể trỏ đến bất kỳ hệ thống tệp nào như cục bộ, HDFS, v.v. Vì vậy, điều này có thể được sử dụng khi bạn đang xử lý các hệ thống tệp khác nhau như Local FS, (S) FTP, S3, và các hệ thống khác


  hadoop dfs <args>

dfs rất cụ thể cho HDFS. sẽ hoạt động cho hoạt động liên quan đến HDFS. Điều này đã không được dùng nữa và chúng tôi nên sử dụng hdfs dfs thay thế.


  hdfs dfs <args>

giống như thứ 2 tức là sẽ hoạt động cho tất cả các hoạt động liên quan đến HDFS và là lệnh được khuyến nghị thay vì hadoop dfs

dưới đây là danh sách được phân loại thành hdfscác lệnh.

  namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups

Vì vậy, ngay cả khi bạn sử dụng hadoop dfs , nó sẽ định vị hdfs và ủy quyền lệnh đó cho hdfs dfs


5
Hấp dẫn :-). Vì vậy, nếu hadoop fsliên quan đến bất kỳ hệ thống tệp nào như, cục bộ hoặc hdfs, Làm thế nào hadoop chọn để hiển thị nội dung thư mục gốc HDFS khi tôi làm hadoop fs -ls /? Ngoài ra, Làm cách nào để yêu cầu hadoop hiển thị nội dung thư mục gốc cục bộ của tôi khi tôi chạy hadoop fs -ls /lệnh?
sgsi

8
Bạn có thể tham chiếu đến FS cục bộ bằng cách sử dụng filelược đồ tại các URI được truyền làm đối số cho hadoop fscác lệnh (ví dụ hdoop fs -ls file:///). Nếu không có gì được nói, nó mặc định là hdfsgiản đồ, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
frb

2
Và tại sao tôi lại cần hadoop fs -ls file:///, trong khi có nhiều cách truyền thống hơn để liệt kê các tệp cục bộ?
srctaha

tại sao 'hadoop' không được sử dụng thay vì 'hdfs'? Có sự khác biệt nào về chức năng hay chỉ là sự thay đổi về cú pháp?
Shuklaswag

31

nhập mô tả hình ảnh ở đây

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

Hệ thống tệp (FS) shell bao gồm các lệnh giống như shell khác nhau tương tác trực tiếp với Hệ thống tệp phân tán Hadoop (HDFS) cũng như các hệ thống tệp khác mà Hadoop hỗ trợ, chẳng hạn như Local FS, WebHDFS, S3 FS và các hệ thống khác.

bin / hadoop fs <args>

Tất cả các lệnh của trình bao FS lấy URI đường dẫn làm đối số. Định dạng URI là lược đồ: // Authority / path. Đối với HDFS, lược đồ là hdfs và đối với Local FS, lược đồ là tệp. Đề án và quyền hạn là tùy chọn. Nếu không được chỉ định, lược đồ mặc định được chỉ định trong cấu hình sẽ được sử dụng. Một tệp hoặc thư mục HDFS chẳng hạn như / parent / child có thể được chỉ định là hdfs: // namenodehost / parent / child hoặc đơn giản là / parent / child (với điều kiện cấu hình của bạn được đặt để trỏ tới hdfs: // namenodehost).

Hầu hết các lệnh trong FS shell hoạt động giống như các lệnh Unix tương ứng. Sự khác biệt được mô tả với mỗi lệnh. Thông tin lỗi được gửi đến stderr và đầu ra được gửi đến stdout.

Nếu HDFS đang được sử dụng,

hdfs dfs

là một từ đồng nghĩa.


5

fs đề cập đến bất kỳ hệ thống tệp nào, nó có thể là cục bộ hoặc HDFS nhưng dfs chỉ đề cập đến hệ thống tệp HDFS. Vì vậy, nếu bạn cần thực hiện truy cập / truyền dữ liệu giữa các hệ thống tệp khác nhau, fs là cách để thực hiện.


5

Từ những gì tôi có thể nói, không có sự khác biệt giữa hdfs dfshadoop fs. Chúng chỉ đơn giản là các quy ước đặt tên khác nhau dựa trên phiên bản Hadoop bạn đang sử dụng. Ví dụ, các ghi chú trong 1.2.1 sử dụng hdfs dfstrong khi 0.19 sử dụng hadoop fs. Lưu ý rằng các lệnh riêng biệt được mô tả nguyên văn. Chúng được sử dụng giống nhau.

Cũng lưu ý rằng cả hai lệnh có thể tham chiếu đến các hệ thống tệp khác nhau tùy thuộc vào những gì bạn chỉ định (hdfs, tệp, s3, v.v.). Nếu không có hệ thống tệp nào được liệt kê, chúng sẽ trở lại mặc định được chỉ định trong cấu hình của bạn.

Bạn đang sử dụng Hadoop 2.0.0 và có vẻ như ( dựa trên tài liệu 2.0.5 ) mà các phiên bản Alpha sử dụng hadoop fsvà được đặt để sử dụng HDFS làm lược đồ mặc định trong cấu hình của bạn. Các hdfs dfslệnh có thể bị bỏ lại từ trước, và vì không quy định trong cấu hình, chỉ có thể được mặc định cho hệ thống tệp cục bộ.

Vì vậy, tôi sẽ chỉ cần gắn bó hadoop fsvà không lo lắng quá vì trong tài liệu, chúng giống hệt nhau.


3

FS liên quan đến một hệ thống tệp chung có thể trỏ đến bất kỳ hệ thống tệp nào như cục bộ, HDFS, v.v. Nhưng dfs rất cụ thể cho HDFS. Vì vậy, khi chúng ta sử dụng FS, nó có thể thực hiện hoạt động với từ / đến cục bộ hoặc hệ thống tệp phân tán hadoop đến đích. Nhưng chỉ định hoạt động DFS liên quan đến HDFS.

Dưới đây là các đoạn trích từ tài liệu hadoop mô tả hai loại này là các vỏ khác nhau.

FS Shell Vỏ FileSystem (FS) được gọi bởi bin / hadoop fs. Tất cả các lệnh trình bao FS lấy URI đường dẫn làm đối số. Định dạng URI là lược đồ: // autasty / path. Đối với HDFS, lược đồ là hdfs và đối với hệ thống tệp cục bộ, lược đồ là tệp. Đề án và quyền hạn là tùy chọn. Nếu không được chỉ định, lược đồ mặc định được chỉ định trong cấu hình sẽ được sử dụng. Một tệp hoặc thư mục HDFS chẳng hạn như / parent / child có thể được chỉ định là hdfs: // namenodehost / parent / child hoặc đơn giản là / parent / child (với điều kiện cấu hình của bạn được đặt để trỏ tới hdfs: // namenodehost). Hầu hết các lệnh trong FS shell hoạt động giống như các lệnh Unix tương ứng.

DFShell Vỏ HDFS được gọi bởi bin / hadoop dfs. Tất cả các lệnh trình bao HDFS lấy URI đường dẫn làm đối số. Định dạng URI là lược đồ: // autasty / path. Đối với HDFS, lược đồ là hdfs và đối với hệ thống tệp cục bộ, lược đồ là tệp. Đề án và quyền hạn là tùy chọn. Nếu không được chỉ định, lược đồ mặc định được chỉ định trong cấu hình sẽ được sử dụng. Một tệp hoặc thư mục HDFS chẳng hạn như / parent / child có thể được chỉ định là hdfs: // namenode: namenodeport / parent / child hoặc đơn giản là / parent / child (cho rằng cấu hình của bạn được đặt để trỏ tới namenode: namenodeport). Hầu hết các lệnh trong HDFS shell hoạt động giống như các lệnh Unix tương ứng.

Vì vậy, từ trên có thể kết luận rằng tất cả phụ thuộc vào cấu hình chương trình. Khi sử dụng hai lệnh này với URI tuyệt đối, tức là lược đồ: // a / b, hành vi sẽ giống hệt nhau. Chỉ có giá trị lược đồ được định cấu hình mặc định cho tệp và hdfs cho fs và dfs tương ứng là nguyên nhân gây ra sự khác biệt trong hành vi.


Tại sao hdfs dfs trỏ đến vị trí khác với hdfs dfs /?
mel

sẽ thật tuyệt nếu có một shell tương tác như bash cho hasoop
Chris

2

fs= file system
dfs= hệ thống tệp phân tán

fs = hệ thống tệp khác + hệ thống tệp phân tán

FS liên quan đến một hệ thống tệp chung có thể trỏ đến bất kỳ hệ thống tệp nào như cục bộ, HDFS, v.v. Nhưng dfs rất cụ thể cho HDFS. Vì vậy, khi chúng ta sử dụng FS, nó có thể thực hiện hoạt động với từ / đến cục bộ hoặc hệ thống tệp phân tán hadoop đến đích. Nhưng chỉ định hoạt động DFS liên quan đến HDFS.

Tất cả phụ thuộc vào cấu hình chương trình. Khi sử dụng hai lệnh này với URI tuyệt đối, tức là scheme://a/bhành vi sẽ giống hệt nhau. Chỉ có giá trị lược đồ được định cấu hình mặc định cho file://hdfs://cho fsdfstương ứng là nguyên nhân gây ra sự khác biệt trong hành vi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.