Hadoop Streaming: การเขียนโปรแกรม Hadoop MapReduce ใน Python



โพสต์บล็อกนี้ใน Hadoop Streaming เป็นคำแนะนำทีละขั้นตอนเพื่อเรียนรู้การเขียนโปรแกรม Hadoop MapReduce ใน Python เพื่อประมวลผลข้อมูลขนาดใหญ่จำนวนมหาศาล

ปริมาณข้อมูลดิจิทัลที่สร้างขึ้นทุกวันกำลังเพิ่มขึ้นอย่างทวีคูณพร้อมกับการกำเนิดของ Digital Media, Internet of Things ท่ามกลางการพัฒนาอื่น ๆ สถานการณ์นี้ก่อให้เกิดความท้าทายในการสร้างเครื่องมือและเทคโนโลยีรุ่นใหม่เพื่อจัดเก็บและจัดการข้อมูลเหล่านี้ นี่คือที่มาของ Hadoop Streaming! ด้านล่างนี้เป็นกราฟที่แสดงการเติบโตของข้อมูลที่สร้างขึ้นทุกปีในโลกตั้งแต่ปี 2013 IDC คาดการณ์ว่าจำนวนข้อมูลที่สร้างขึ้นทุกปีจะสูงถึง 180 Zettabytes ในปี 2025!

data-by-2025-hadoop-streaming





ที่มา: IDC

IBM ระบุว่าทุกวันมีการสร้างข้อมูลเกือบ 2.5 quintillion ไบต์โดย 90 เปอร์เซ็นต์ของข้อมูลทั่วโลกถูกสร้างขึ้นในช่วงสองปีที่ผ่านมา! เป็นงานที่ท้าทายในการจัดเก็บข้อมูลจำนวนมากเช่นนี้ Hadoop สามารถจัดการข้อมูลที่มีโครงสร้างและไม่มีโครงสร้างจำนวนมากได้อย่างมีประสิทธิภาพมากกว่าคลังข้อมูลขององค์กรแบบเดิม จัดเก็บชุดข้อมูลมหาศาลเหล่านี้ไว้ในกลุ่มคอมพิวเตอร์แบบกระจาย Hadoop Streaming ใช้กรอบ MapReduce ซึ่งสามารถใช้ในการเขียนแอปพลิเคชันเพื่อประมวลผลข้อมูลจำนวนมหาศาล



เนื่องจากเฟรมเวิร์ก MapReduce ใช้ Java คุณอาจสงสัยว่านักพัฒนาสามารถทำงานกับมันได้อย่างไรหากเขา / เธอไม่มีประสบการณ์ใน Java นักพัฒนาสามารถเขียนแอปพลิเคชั่น mapper / Reducer โดยใช้ภาษาที่ต้องการและไม่มีความรู้เกี่ยวกับ Java มากนักโดยใช้ Hadoop สตรีมมิ่ง แทนที่จะเปลี่ยนไปใช้เครื่องมือหรือเทคโนโลยีใหม่ ๆ เช่น Pig and Hive

Hadoop Streaming คืออะไร?

Hadoop Streaming เป็นยูทิลิตี้ที่มาพร้อมกับการกระจาย Hadoop สามารถใช้เพื่อรันโปรแกรมสำหรับการวิเคราะห์ข้อมูลขนาดใหญ่ การสตรีม Hadoop สามารถทำได้โดยใช้ภาษาต่างๆเช่น Python, Java, PHP, Scala, Perl, UNIX และอื่น ๆ อีกมากมาย ยูทิลิตี้นี้ช่วยให้เราสามารถสร้างและเรียกใช้งานแผนที่ / ลดด้วยไฟล์ปฏิบัติการหรือสคริปต์ใด ๆ เป็นตัวทำแผนที่และ / หรือตัวลด ตัวอย่างเช่น:

โถ $ HADOOP_HOME / bin / hadoop $ HADOOP_HOME / hadoop-streaming.jar



- ใส่ myInputDirs

- เอาท์พุท myOutputDir

- โฟลเดอร์ / ถัง / แมว

-reducer / bin / wc

คำอธิบายพารามิเตอร์:

รหัส Python MapReduce:

mapper.py #! / usr / bin / python import sys #Word Count ตัวอย่าง # อินพุตมาจากอินพุตมาตรฐาน STDIN สำหรับบรรทัดใน sys.stdin: line = line.strip () #remove ช่องว่างนำหน้าและต่อท้ายคำ = line.split ( ) # แยกบรรทัดเป็นคำและส่งกลับเป็นรายการสำหรับคำในคำ: # เขียนผลลัพธ์ไปยังเอาต์พุตมาตรฐาน STDOUT พิมพ์ '% s% s'% (word, 1) #Emit the word

reducer.py

#! / usr / bin / python นำเข้า sys จากตัวดำเนินการนำเข้า itemgetter # โดยใช้พจนานุกรมเพื่อแมปคำกับจำนวน current_word = ไม่มี current_count = 0 word = ไม่มี # อินพุตมาจาก STDIN สำหรับบรรทัดใน sys.stdin: line = line.strip () word, count = line.split ('', 1) try: count = int (count) ยกเว้น ValueError: ดำเนินการต่อหาก current_word == word: current_count + = count else: if current_word: print '% s% s'% (current_word, current_count) current_count = นับ current_word = คำถ้า current_word == คำ: พิมพ์ '% s% s'% (current_word, current_count)

วิ่ง:

  1. สร้างไฟล์ที่มีเนื้อหาต่อไปนี้และตั้งชื่อว่า word.txt

แมวเมาส์กวางสิงโตเสือสิงโตช้างสิงโตกวาง

  1. คัดลอกสคริปต์ mapper.py และ reducer.py ไปยังโฟลเดอร์เดียวกับที่มีไฟล์ด้านบน

  1. เปิดเทอร์มินัลและค้นหาไดเร็กทอรีของไฟล์คำสั่ง: ls: เพื่อแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรี cd: เพื่อเปลี่ยนไดเร็กทอรี / โฟลเดอร์

  1. ดูเนื้อหาของไฟล์
    คำสั่ง: cat ชื่อไฟล์

> เนื้อหาของ mapper.py

คำสั่ง: cat mapper.py

> เนื้อหาของ reducer.py

คำสั่ง: cat reducer.py

แทนที่เทียบกับโอเวอร์โหลด c ++

เราสามารถเรียกใช้ mapper และ reducer บนไฟล์ในเครื่อง (เช่น word.txt) ในการเรียกใช้แผนที่และลดลงบน Hadoop Distributed File System (HDFS) เราต้องใช้ไฟล์ Hadoop Streaming jar ดังนั้นก่อนที่เราจะเรียกใช้สคริปต์บน HDFS เรามาเรียกใช้สคริปต์ในเครื่องเพื่อให้แน่ใจว่าทำงานได้ดี

> เรียกใช้ตัวทำแผนที่

คำสั่ง: cat word.txt | python mapper.py

> เรียกใช้ reducer.py

คำสั่ง: cat word.txt | python mapper.py | เรียง -k1,1 | python reducer.py

ลำดับจากน้อยไปมาก c ++

เราจะเห็นว่าตัวทำแผนที่และตัวลดกำลังทำงานตามที่คาดไว้ดังนั้นเราจึงไม่ต้องเผชิญกับปัญหาใด ๆ อีก

เรียกใช้ไฟล์ รหัส Python บน Hadoop

ก่อนที่เราจะรันงาน MapReduce บน Hadoop ให้คัดลอกข้อมูลในเครื่อง (word.txt) ไปยัง HDFS

> ตัวอย่าง: hdfs dfs -put source_directory hadoop_destination_directory

คำสั่ง: hdfs dfs -put /home/edureka/MapReduce/word.txt / user / edureka

คัดลอกพา ธ ของไฟล์ jar

เส้นทางของ Hadoop Streaming jar ตามเวอร์ชันของ jar คือ:

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

ดังนั้นค้นหา Hadoop Streaming jar บนเทอร์มินัลของคุณและคัดลอกเส้นทาง

คำสั่ง:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

รันงาน MapReduce

คำสั่ง:

กระปุก hadoop /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop มีเว็บอินเตอร์เฟสพื้นฐานสำหรับสถิติและข้อมูล เมื่อคลัสเตอร์ Hadoop ทำงานให้เปิด http: // localhost: 50070 ในเบราว์เซอร์ นี่คือภาพหน้าจอของเว็บอินเตอร์เฟส Hadoop

ตอนนี้เรียกดูระบบไฟล์และค้นหาไฟล์ wordcount ที่สร้างขึ้นเพื่อดูผลลัพธ์ ด้านล่างนี้คือภาพหน้าจอ

เราสามารถดูผลลัพธ์บนเทอร์มินัลโดยใช้คำสั่งนี้

คำสั่ง: hadoop fs -cat / ผู้ใช้ / edureka / Wordcount / part-00000

ตอนนี้คุณได้เรียนรู้วิธีรันโปรแกรม MapReduce ที่เขียนด้วย Python โดยใช้ Hadoop Streaming!

Edureka มีหลักสูตรสดและนำโดยผู้สอนเกี่ยวกับ Big Data & Hadoop ซึ่งร่วมสร้างโดยผู้ปฏิบัติงานในอุตสาหกรรม

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป