อะไรคือความแตกต่างระหว่างคำสั่งเชลล์“ hadoop fs” และคำสั่งเชลล์“ hdfs dfs”


109

พวกเขาควรจะเท่ากันหรือไม่?

แต่ทำไมhadoop fsคำสั่ง "" แสดงhdfs fileswhile 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 เรียบเรียงโดย jenkins เมื่อจันทร์ 22 เมษายน 10:48:26 PDT 2013


1
ฉันผิดที่ถามคำถามนี้ hdfs dfsแสดงไฟล์ HDFS เกินไป
Charlie Lin

2
ความแตกต่างที่เป็นไปได้ระหว่าง "hadoop dfs" และ "hadoop fs"
TechDog

คำตอบ:


140

ต่อไปนี้เป็นคำสั่งสามคำที่ปรากฏเหมือนกัน แต่มีความแตกต่างกันเล็กน้อย

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

  hadoop fs <args>

FS เกี่ยวข้องกับระบบไฟล์ทั่วไปซึ่งสามารถชี้ไปที่ระบบไฟล์ใดก็ได้เช่นโลคัล HDFS เป็นต้นดังนั้นจึงสามารถใช้เมื่อคุณจัดการกับระบบไฟล์ต่างๆเช่น Local FS, (S) FTP, S3 และอื่น ๆ


  hadoop dfs <args>

dfs มีความเฉพาะเจาะจงมากสำหรับ HDFS จะทำงานสำหรับการดำเนินการที่เกี่ยวข้องกับ HDFS สิ่งนี้เลิกใช้งานแล้วและเราควรใช้hdfs dfsแทน


  hdfs dfs <args>

เช่นเดียวกับ 2nd เช่นจะใช้ได้กับการดำเนินการทั้งหมดที่เกี่ยวข้องกับ HDFS และเป็นคำสั่งที่แนะนำแทนhadoop dfs

ด้านล่างนี้คือรายการที่จัดหมวดหมู่เป็นhdfsคำสั่ง

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

ดังนั้นแม้ว่าคุณจะใช้hadoop dfsแต่จะมีลักษณะค้นหา hdfs และมอบหมายคำสั่งนั้นให้กับhdfs dfs


5
น่าสนใจ :-) ดังนั้นหากhadoop fsเกี่ยวข้องกับระบบไฟล์ใด ๆ เช่นโลคัลหรือ hdfs ฉันจะเลือกแสดงเนื้อหาไดเร็กทอรีรูท HDFS ได้hadoop fs -ls /อย่างไร นอกจากนี้ฉันจะบอกให้ hadoop แสดงเนื้อหาไดเร็กทอรีรูทโลคัลของฉันได้อย่างไรเมื่อฉันรันhadoop fs -ls /คำสั่ง
sgsi

8
คุณสามารถอ้างถึง FS โลคัลโดยใช้fileสคีมาที่ URI ส่งผ่านเป็นอาร์กิวเมนต์ของhadoop fsคำสั่ง (เช่นhdoop fs -ls file:///) หากไม่มีสิ่งใดกล่าวจะเป็นค่าเริ่มต้นของhdfsschema, AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///)
frb

2
และเหตุใดฉันจึงต้องhadoop fs -ls file:///มีในขณะที่มีวิธีการทั่วไปในการแสดงรายการไฟล์ในเครื่องมากกว่า
srctaha

เหตุใด 'hadoop' จึงเลิกใช้งาน 'hdfs' มีความแตกต่างในการทำงานหรือเป็นเพียงการเปลี่ยนแปลงในไวยากรณ์?
Shuklaswag

31

ป้อนคำอธิบายภาพที่นี่

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

เชลล์ของระบบไฟล์ (FS) ประกอบด้วยคำสั่งเหมือนเชลล์ต่างๆที่โต้ตอบโดยตรงกับ Hadoop Distributed File System (HDFS) ตลอดจนระบบไฟล์อื่น ๆ ที่ Hadoop รองรับเช่น Local FS, WebHDFS, S3 FS และอื่น ๆ

bin / hadoop fs <args>

คำสั่งเชลล์ FS ทั้งหมดใช้พา ธ URI เป็นอาร์กิวเมนต์ รูปแบบ URI คือ Scheme: // authority / path สำหรับ HDFS โครงร่างคือ hdfs และสำหรับ Local FS โครงร่างคือไฟล์ โครงการและสิทธิอำนาจเป็นทางเลือก หากไม่ได้ระบุแบบแผนเริ่มต้นที่ระบุในการกำหนดค่าจะถูกใช้ ไฟล์ HDFS หรือไดเร็กทอรีเช่น / parent / child สามารถระบุเป็น hdfs: // namenodehost / parent / child หรือเพียงแค่เป็น / parent / child (เนื่องจากการกำหนดค่าของคุณถูกตั้งค่าให้ชี้ไปที่ hdfs: // namenodehost)

คำสั่งส่วนใหญ่ใน FS shell ทำงานเหมือนคำสั่ง Unix ที่เกี่ยวข้อง อธิบายความแตกต่างด้วยแต่ละคำสั่ง ข้อมูลข้อผิดพลาดถูกส่งไปยัง stderr และเอาต์พุตจะถูกส่งไปยัง stdout

หากกำลังใช้ HDFS

hdfs dfs

เป็นคำพ้องความหมาย


5

fs หมายถึงระบบไฟล์ใด ๆ อาจเป็นโลคัลหรือ HDFS แต่ dfs หมายถึงระบบไฟล์ HDFS เท่านั้น ดังนั้นหากคุณต้องการดำเนินการเข้าถึง / ถ่ายโอนข้อมูลระหว่างระบบไฟล์ต่างๆ fs คือหนทางที่จะไป


5

จากสิ่งที่ผมสามารถบอกได้ว่ามีความแตกต่างระหว่างไม่มีและhdfs dfs hadoop fsเป็นเพียงรูปแบบการตั้งชื่อที่แตกต่างกันไปตามเวอร์ชันของ Hadoop ที่คุณใช้ ตัวอย่างเช่นหมายเหตุใน1.2.1ใช้hdfs dfsในขณะที่ใช้0.19hadoop fsการใช้งานสังเกตว่าคำสั่งแยกอธิบายคำต่อคำ ใช้เหมือนกัน

โปรดทราบว่าคำสั่งทั้งสองสามารถอ้างถึงระบบไฟล์ที่แตกต่างกันขึ้นอยู่กับสิ่งที่คุณระบุ (hdfs, file, s3 ฯลฯ ) หากไม่มีระบบไฟล์แสดงอยู่ระบบไฟล์จะกลับไปใช้ค่าดีฟอลต์ที่ระบุไว้ในคอนฟิกูเรชันของคุณ

คุณกำลังใช้ Hadoop 2.0.0 และดูเหมือนว่า ( ตามเอกสาร 2.0.5 ) ที่เวอร์ชัน Alpha ใช้hadoop fsและตั้งค่าให้ใช้ HDFS เป็นโครงร่างเริ่มต้นในการกำหนดค่าของคุณ hdfs dfsคำสั่งอาจถูกทิ้งไว้ก่อนหน้านี้และตั้งแต่ไม่ได้ระบุในการกำหนดค่าอาจเป็นเพียงการผิดนัดระบบไฟล์ในท้องถิ่น

ดังนั้นฉันจะยึดติดhadoop fsและไม่ต้องกังวลมากเกินไปเนื่องจากในเอกสารประกอบก็เหมือนกัน


3

FSเกี่ยวข้องกับระบบไฟล์ทั่วไปซึ่งสามารถชี้ไปที่ระบบไฟล์ใดก็ได้เช่นโลคัล HDFS เป็นต้น แต่dfsมีความเฉพาะเจาะจงกับ HDFS มาก ดังนั้นเมื่อเราใช้FSมันสามารถดำเนินการกับระบบไฟล์จาก / ถึงโลคัลหรือ Hadoop แบบกระจายไปยังปลายทาง แต่ระบุDFSการทำงานของเกี่ยวข้องกับ HDFS

ด้านล่างนี้เป็นข้อความที่ตัดตอนมาจากเอกสาร hadoop ซึ่งอธิบายว่าทั้งสองเป็นเปลือกหอยที่แตกต่างกัน

FS เชลล์ FileSystem (FS) ถูกเรียกใช้โดย bin / hadoop fs คำสั่งเชลล์ FS ทั้งหมดใช้พา ธ URI เป็นอาร์กิวเมนต์ รูปแบบ URI คือรูปแบบ: // autority / path สำหรับ HDFS แบบแผนคือ hdfs และสำหรับระบบไฟล์โลคัลโครงร่างคือไฟล์ โครงการและสิทธิอำนาจเป็นทางเลือก หากไม่ได้ระบุแบบแผนเริ่มต้นที่ระบุในการกำหนดค่าจะถูกใช้ ไฟล์หรือไดเร็กทอรี HDFS เช่น / parent / child สามารถระบุเป็น hdfs: // namenodehost / parent / child หรือเพียงแค่เป็น / parent / child (เนื่องจากการกำหนดค่าของคุณถูกตั้งค่าให้ชี้ไปที่ hdfs: // namenodehost) คำสั่งส่วนใหญ่ใน FS shell ทำงานเหมือนกับคำสั่ง Unix ที่เกี่ยวข้อง

DFShell เชลล์ HDFS ถูกเรียกใช้โดย bin / hadoop dfs คำสั่งเชลล์ HDFS ทั้งหมดใช้พา ธ URI เป็นอาร์กิวเมนต์ รูปแบบ URI คือรูปแบบ: // autority / path สำหรับ HDFS แบบแผนคือ hdfs และสำหรับระบบไฟล์โลคัลโครงร่างคือไฟล์ โครงการและสิทธิอำนาจเป็นทางเลือก หากไม่ได้ระบุแบบแผนเริ่มต้นที่ระบุในการกำหนดค่าจะถูกใช้ ไฟล์ HDFS หรือไดเร็กทอรีเช่น / parent / child สามารถระบุเป็น hdfs: // namenode: namenodeport / parent / child หรือเป็น / parent / child (เนื่องจากการกำหนดค่าของคุณถูกตั้งค่าให้ชี้ไปที่ namenode: namenodeport) คำสั่งส่วนใหญ่ในเชลล์ HDFS ทำงานเหมือนกับคำสั่ง Unix ที่เกี่ยวข้อง

จากที่กล่าวมาสรุปได้ว่าทั้งหมดขึ้นอยู่กับการกำหนดค่าโครงร่าง เมื่อใช้คำสั่งสองคำสั่งนี้กับ URI แบบสัมบูรณ์เช่นแบบแผน: // a / b ลักษณะการทำงานจะเหมือนกัน เฉพาะค่าโครงร่างที่กำหนดค่าเริ่มต้นสำหรับไฟล์และ hdfs สำหรับ fs และ dfs ตามลำดับซึ่งเป็นสาเหตุของความแตกต่างในพฤติกรรม


ทำไม hdfs dfs จึงชี้ไปยังตำแหน่งที่แตกต่างจาก hdfs dfs /
เมล

มันจะดีถ้ามีเชลล์แบบโต้ตอบเช่น bash สำหรับ hadoop
Chris

2

fs= ระบบไฟล์ = ระบบไฟล์แบบ
dfsกระจาย

fs = ระบบไฟล์อื่น ๆ + ระบบไฟล์แบบกระจาย

FS เกี่ยวข้องกับระบบไฟล์ทั่วไปซึ่งสามารถชี้ไปที่ระบบไฟล์ใด ๆ เช่นโลคัล HDFS เป็นต้น แต่ dfs มีความเฉพาะเจาะจงมากสำหรับ HDFS ดังนั้นเมื่อเราใช้ FS มันสามารถดำเนินการกับจาก / ไปยังระบบไฟล์แบบกระจายภายในหรือ hadoop ไปยังปลายทางได้ แต่การระบุการทำงานของ DFS เกี่ยวข้องกับ HDFS

ทุกอย่างขึ้นอยู่กับการกำหนดค่าโครงร่าง เมื่อใช้คำสั่งสองคำสั่งนี้กับ URI สัมบูรณ์กล่าวคือscheme://a/bลักษณะการทำงานจะเหมือนกัน เฉพาะค่าโครงร่างที่กำหนดค่าเริ่มต้นสำหรับfile://และhdfs://สำหรับfsและdfsตามลำดับซึ่งเป็นสาเหตุของพฤติกรรมที่แตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.