วิธีคัดลอกไฟล์จาก HDFS ไปยังระบบไฟล์ภายในเครื่อง


136

วิธีคัดลอกไฟล์จาก HDFS ไปยังระบบไฟล์ภายในเครื่อง ไม่มีตำแหน่งทางกายภาพของไฟล์ภายใต้ไฟล์ไม่มีแม้แต่ไดเร็กทอรี ฉันจะย้ายพวกเขาไปยังพื้นที่ของฉันเพื่อตรวจสอบความถูกต้องเพิ่มเติมได้อย่างไรฉันกำลังพยายามผ่าน winscp

คำตอบ:


248
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. ชี้เว็บเบราว์เซอร์ของคุณเพื่อHDFS WebUI ( namenode_machine:50070) เรียกดูไฟล์ที่คุณตั้งใจจะคัดลอกเลื่อนลงหน้าและคลิกที่ดาวน์โหลดไฟล์

tariq ที่สมบูรณ์แบบฉันได้รับมันไม่มีตำแหน่งทางกายภาพของไฟล์ภายใต้ไฟล์แม้แต่ไดเร็กทอรี bin / hadoop dfs -ls / use / hadoop / myfolder ฉันสามารถดูไฟล์ได้จากฉันได้รับข้อมูลเป็นในการตรวจสอบไฟล์คุณสามารถคัดลอกจาก HDFS ไปยังระบบไฟล์ในเครื่องดังนั้นฉันสามารถย้ายไฟล์เหล่านี้จาก winscp ได้
Surya

2
ฉันต้องพูดถึง tariq อีกครั้งขอบคุณมากที่มีส่วนร่วมในเวลาและความรู้ ขอบคุณมาก . คุณสนับสนุนมากสิ่งนี้ให้ความมั่นใจมากสำหรับ bie ใหม่อย่างฉัน
Surya

1
ฉันเห็น. คุณสามารถใช้คำสั่ง hdfs cat ได้หากต้องการดูเนื้อหาของไฟล์หรือเปิดไฟล์บน webui วิธีนี้จะช่วยให้คุณไม่ต้องดาวน์โหลดไฟล์ไปยัง fs ในเครื่องของคุณ ยินดี. และหากคุณพอใจ 100% กับคำตอบสำหรับคำถามของคุณคุณสามารถทำเครื่องหมายเพื่อให้ผู้อื่นได้รับประโยชน์จากคำถามนั้น .. ไม่ใช่แค่ข้อนี้ แต่โดยทั่วไป
Tariq

2
เพียงแค่เพิ่มความคิดเห็น lat ของฉันหากเป็นไฟล์ไบนารี cat จะไม่แสดงเนื้อหาจริงให้คุณเห็น หากต้องการดูเนื้อหาของไฟล์ไบนารีคุณสามารถใช้ bin / hadoop fs -text / path / to / file
Tariq

1
ดูเหมือนว่าจะเป็นจุดบกพร่อง (แก้ไขแล้ว) ดูคำตอบ
Tariq

28

ใน Hadoop 2.0

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

ที่ไหน

  • hdfs_input_file_path อาจได้รับจาก http://<<name_node_ip>>:50070/explorer.html

  • output_path คือโลคัลพา ธ ของไฟล์ซึ่งไฟล์จะถูกคัดลอกไป

  • คุณยังอาจจะใช้ในสถานที่ของgetcopyToLocal


16

ในการคัดลอกไฟล์จาก HDFS ไปยังระบบไฟล์โลคัลสามารถรันคำสั่งต่อไปนี้:

hadoop dfs -copyToLocal <input> <output>

  • <input>: พา ธ ไดเร็กทอรี HDFS (เช่น / mydata) ที่คุณต้องการคัดลอก
  • <output>: เส้นทางไดเร็กทอรีปลายทาง (เช่น ~ / Documents)

1
สิ่งนี้ดูเหมือนจะไม่ได้ผลสำหรับฉัน มันมักจะบอกว่าไม่พบไฟล์ <input> ฉันใช้อินสแตนซ์ VM ของ cloudera ซึ่งมีระบบปฏิบัติการร้อยละ 6.4
SutharMonil

@SutharMonil แน่ใจหรือว่าไฟล์นั้นมีอยู่จริง? คุณสามารถเรียกดูผ่านทางhadoop fs -ls?
Dennis Jaheruddin

6

คุณสามารถทำได้ทั้งสองวิธีนี้

1.hadoop fs -get <HDFS file path> <Local system directory path>
2.hadoop fs -copyToLocal <HDFS file path> <Local system directory path>

เช่น:

ไฟล์ของฉันอยู่ใน/sourcedata/mydata.txt ฉันต้องการคัดลอกไฟล์ไปยังระบบไฟล์ Local ในพา ธ นี้/ user / ravi / mydata

hadoop fs -get /sourcedata/mydata.txt /user/ravi/mydata/

3

หาก "ไฟล์" ต้นทางของคุณถูกแยกออกเป็นหลายไฟล์ (อาจเป็นผลมาจากการลดแผนที่) ที่อยู่ในแผนผังไดเรกทอรีเดียวกันคุณสามารถคัดลอกไฟล์นั้นไปยังไฟล์ในเครื่องโดยใช้:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination

สิ่งนี้ควรได้รับการยอมรับ นี่คือสิ่งที่คนส่วนใหญ่มองหาไม่ใช่แยกไฟล์
James O'Brien

2

สิ่งนี้ใช้ได้ผลกับฉันในอินสแตนซ์ VM ของ Ubuntu

hdfs dfs -copyToLocal [ไดเร็กทอรี hadoop] [ไดเร็กทอรีโลคัล]


0

หากคุณใช้นักเทียบท่าคุณต้องทำตามขั้นตอนต่อไปนี้:

  1. คัดลอกไฟล์จาก hdfs ไปยัง namenode (hadoop fs -get output / part-r-00000 / out_text) "/ out_text" จะถูกเก็บไว้ที่ Namenode

  2. คัดลอกไฟล์จาก namenode ไปยังโลคัลดิสก์โดย (docker cp namenode: / out_text output.txt)

  3. output.txt จะอยู่ในไดเร็กทอรีการทำงานปัจจุบันของคุณ


-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 

1
hdfs dfs -put เป็นคำสั่งในการพุชไฟล์จาก FS ในเครื่องไปยัง HDFS hdfs dfs -get เป็นตัวเลือกที่ถูกต้อง
b_rousseau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.