ปริมาณข้อมูลดิจิทัลที่สร้างขึ้นทุกวันกำลังเพิ่มขึ้นอย่างทวีคูณพร้อมกับการกำเนิดของ Digital Media, Internet of Things ท่ามกลางการพัฒนาอื่น ๆ สถานการณ์นี้ก่อให้เกิดความท้าทายในการสร้างเครื่องมือและเทคโนโลยีรุ่นใหม่เพื่อจัดเก็บและจัดการข้อมูลเหล่านี้ นี่คือที่มาของ Hadoop Streaming! ด้านล่างนี้เป็นกราฟที่แสดงการเติบโตของข้อมูลที่สร้างขึ้นทุกปีในโลกตั้งแต่ปี 2013 IDC คาดการณ์ว่าจำนวนข้อมูลที่สร้างขึ้นทุกปีจะสูงถึง 180 Zettabytes ในปี 2025!
ที่มา: 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)
วิ่ง:
- สร้างไฟล์ที่มีเนื้อหาต่อไปนี้และตั้งชื่อว่า word.txt
แมวเมาส์กวางสิงโตเสือสิงโตช้างสิงโตกวาง
- คัดลอกสคริปต์ mapper.py และ reducer.py ไปยังโฟลเดอร์เดียวกับที่มีไฟล์ด้านบน
- เปิดเทอร์มินัลและค้นหาไดเร็กทอรีของไฟล์คำสั่ง: ls: เพื่อแสดงรายการไฟล์ทั้งหมดในไดเร็กทอรี cd: เพื่อเปลี่ยนไดเร็กทอรี / โฟลเดอร์
- ดูเนื้อหาของไฟล์
คำสั่ง: 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 ซึ่งร่วมสร้างโดยผู้ปฏิบัติงานในอุตสาหกรรม
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป