นี่คือโปรแกรม Java สำหรับการสร้างดัชนีการกลับหัวของคำที่เกิดขึ้นในชุดเอกสารขนาดใหญ่ที่สกัดจากหน้าเว็บโดยใช้ Hadoop MapReduce และ Google Dataproc
ในฐานะชุดข้อมูลของเราเราใช้ชุดย่อยของไฟล์ 74 ไฟล์จากไฟล์ทั้งหมด 408 ไฟล์ (ข้อความที่แยกออกจากแท็ก HTML) ที่ได้จากโครงการ Stanford Webbase ที่มีอยู่ที่นี่ ได้มาจากการรวบรวมข้อมูลเว็บในเดือนกุมภาพันธ์ 2550 มันเป็นหนึ่งในคอลเล็กชั่นที่ใหญ่ที่สุดรวมมากกว่า 100 ล้านหน้าเว็บจากมากกว่า 50,000 เว็บไซต์ รุ่นนี้ได้รับการทำความสะอาดแล้ว
ในโครงการนี้ก่อนอื่นเราตั้งค่าตัวอย่าง Hadoop Cluster โดยใช้โหมดท้องถิ่น (สแตนด์อโลน) จากนั้นใช้โครงการจริงในโหมดแจกจ่ายเต็มรูปแบบบน Google Dataproc ในชุดข้อมูลจริง
เราจำเป็นต้องตั้งค่าโครงการบน GNU/Linux เนื่องจากเป็นแพลตฟอร์มการพัฒนาและการผลิตที่รองรับสำหรับ Hadoop หากต้องการรับการกระจาย Hadoop ให้ดาวน์โหลดรีลีสที่เสถียรล่าสุดจากหนึ่งใน Apache Download Mirrors โปรดทราบว่าโครงการนี้ถูกปรับใช้และทดสอบโดยใช้ hadoop-3.1.1 แกะการแจกจ่าย Hadoop ที่ดาวน์โหลดมา ในโฟลเดอร์การแจกจ่ายให้แก้ไขไฟล์ etc/hadoop/hadoop-env.sh เพื่อกำหนดพารามิเตอร์ตัวแปรสภาพแวดล้อมดังนี้:
# add these line to the hadoop-env.sh or set them in terminal
export JAVA_HOME=/usr/java/latest
export PATH= ${JAVA_HOME} /bin: ${PATH}
export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarจากนั้นลองใช้คำสั่งต่อไปนี้:
$ bin/hadoopสิ่งนี้ควรแสดงเอกสารการใช้งานสำหรับสคริปต์ Hadoop ตอนนี้คุณพร้อมที่จะเริ่มคลัสเตอร์ Hadoop ของคุณในโหมดสแตนด์อโลน
งาน Hadoop ที่เรียบง่ายนี้รับไฟล์ข้อความสองไฟล์จากโฟลเดอร์ "อินพุต" เป็นอาร์กิวเมนต์ของ Mapper
# file01
5722018411 Hello World Bye World # file02
6722018415 Hello Hadoop Goodbye Hadoopและโดยการส่งงาน Hadoop และการใช้ขั้นตอนลดลงมันจะสร้างดัชนีกลับด้านด้านล่าง:
bye 5722018411:1
goodbye 6722018415:1
hadoop 6722018415:2
hello 5722018411:1 6722018415:1
world 5722018411:2 ในการส่งงาน Hadoop การใช้งาน MADREDUCE ควรได้รับการบรรจุเป็นไฟล์ jar ในการทำเช่นนั้นให้คัดลอกไฟล์ InvertedIndex.java ของโครงการนี้ไปยังโฟลเดอร์รูทการกระจายของ Hadoop และในขณะที่คุณยังคงมีการเรียกใช้คำสั่งต่อไปนี้เพื่อรวบรวม InvertedIndex.java และสร้างไฟล์ jar
$ bin/hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .class คัดลอก input/file01 และ input/file02 ของโครงการนี้และวางไว้ในโฟลเดอร์ input ของโฟลเดอร์ Hadoop distrubution ในขณะที่คุณยังอยู่ที่นั่นให้เรียกใช้คำสั่งต่อไปนี้เพื่อส่งงานรับไฟล์อินพุตจากโฟลเดอร์ input สร้างดัชนีกลับด้านและเก็บเอาต์พุตไว้ในโฟลเดอร์ output :
$ bin/hadoop jar invertedindex.jar InvertedIndex input outputและในที่สุดเพื่อดูผลลัพธ์ให้เรียกใช้คำสั่งด้านล่าง:
$ bin/hadoop dfs -cat output/part-r-00000 ในส่วนนี้เราสร้างคลัสเตอร์ที่มี 3 โหนดคนงานบน Google DataProc และเรียกใช้งาน invertedindex.jar ในชุดข้อมูลจริง
ก่อนอื่นเราต้องมีบัญชีบนแพลตฟอร์ม Google Cloud คุณสามารถลงทะเบียนสำหรับการทดลองใช้ด้วยเครดิตฟรี $ 300 หากคุณยังไม่มี
ใน Google Cloud Console ไม่ว่าจะสร้างโครงการใหม่หรือเลือกโครงการที่มีอยู่ สำหรับแบบฝึกหัดนี้เราจะใช้ dataproc การใช้ DataProc เราสามารถสร้างคลัสเตอร์ของอินสแตนซ์การคำนวณที่ทำงานได้อย่างรวดเร็ว ทางเลือกสำหรับ DataProc คือการตั้งค่าแต่ละโหนดการคำนวณแต่ละโหนดติดตั้ง hadoop บนมันตั้งค่า HDFs ตั้งค่าโหนดหลัก ฯลฯ dataproc ทำให้กระบวนการทรหดนี้เป็นไปโดยอัตโนมัติสำหรับเรา
ใน Google Cloud Consol เลือก DataProc จากรายการการนำทางทางด้านซ้าย หากนี่เป็นครั้งแรกที่คุณใช้ DataProc คุณอาจต้องเปิดใช้งาน DataProc API ก่อน การคลิกที่ 'สร้างคลัสเตอร์' จะนำคุณไปยังส่วนการกำหนดค่าคลัสเตอร์ ให้ชื่อเฉพาะกับคลัสเตอร์ของคุณและเลือกโซนที่ต้องการ คุณต้องสร้างต้นแบบและ 3 โหนดคนงาน เลือกโปรเซสเซอร์การกำหนดค่าเริ่มต้น (หน่วยความจำ N1-Standard-4 4VCPU 15 GB) สำหรับ Master และสมาชิกแต่ละคนและลดที่เก็บข้อมูลลงในที่เก็บข้อมูล HDD 32 GB เปลี่ยนจำนวนโหนดคนงานเป็น 3 ปล่อยให้ทุกอย่างเริ่มต้นและคลิกที่ 'สร้าง'
ตอนนี้การตั้งค่าคลัสเตอร์เราจะต้องกำหนดค่าเล็กน้อยก่อนที่เราจะทำงานได้ เลือกคลัสเตอร์ที่คุณเพิ่งสร้างจากรายการกลุ่มภายใต้ส่วนคลาวด์ Dataproc บนคอนโซลของคุณ ไปที่แท็บอินสแตนซ์ VM และคลิกที่ปุ่ม SSH ถัดจากอินสแตนซ์ด้วยบทบาทหลัก
การคลิกที่ปุ่ม SSH จะนำคุณไปยังอินเทอร์เฟซบรรทัดคำสั่ง (CLI) เช่น xterm หรือเทอร์มินัล คำสั่งทั้งหมดในขั้นตอนต่อไปนี้จะต้องป้อนใน CLI ไม่มีไดเรกทอรีโฮมเมดบน HDFs สำหรับผู้ใช้ปัจจุบันเราจะต้องตั้งค่านี้ก่อนดำเนินการต่อไป (เพื่อค้นหาชื่อผู้ใช้ของคุณเรียกใช้ whoami )
$ hadoop fs -mkdir -p /user/ < your username here > JAVA_HOME ได้รับการตั้งค่าแล้วและเราไม่จำเป็นต้องตั้งค่าอีกครั้ง
โปรดทราบว่าขั้นตอนนี้จะต้องทำทุกครั้งที่คุณเปิดเทอร์มินัล SSH ใหม่ สำหรับการกำจัดขั้นตอนนี้คุณสามารถตั้งค่า JAVA_HOME , PATH และ HADOOP_CLASSPATH ใน etc/hadoop/hadoop-env.sh
$ export PATH= ${JAVA_HOME} /bin: ${PATH}
$ export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarตอนนี้วิ่ง:
$ hadoop fs -lsหากไม่มีข้อผิดพลาดนี่หมายความว่าคลัสเตอร์ของคุณได้รับการตั้งค่าสำเร็จ หากคุณพบข้อผิดพลาดเป็นไปได้มากที่สุดเนื่องจากตัวแปรสภาพแวดล้อมที่หายไปหรือไดเรกทอรีโฮมเมดผู้ใช้ที่ไม่ได้ตั้งค่าถูกต้อง
เพื่อให้แน่ใจว่าตั้งค่าตัวแปรสภาพแวดล้อมให้เรียกใช้คำสั่ง env
หมายเหตุ : โปรดปิดการเรียกเก็บเงินสำหรับคลัสเตอร์เมื่อคุณไม่ได้ใช้ การปล่อยให้มันทำงานจะต้องเสียค่าใช้จ่ายพิเศษ
ดาวน์โหลดชุดข้อมูลจากลิงค์นี้และคลายซิปเนื้อหา คุณจะพบสองโฟลเดอร์ภายในชื่อ 'การพัฒนา' และ 'ข้อมูลเต็ม' ข้อมูล 'การพัฒนา' สามารถใช้เพื่อการพัฒนาและการทดสอบ
คลิกที่ 'DataProc' ในเมนูการนำทางด้านซ้าย ถัดไปค้นหาที่อยู่ของ Bucket Staget Staget Storage ของ Google Cloud Storage สำหรับคลัสเตอร์ของคุณ
ไปที่ส่วนที่เก็บข้อมูลในแถบการนำทางด้านซ้ายและเลือกถังเริ่มต้นของคลัสเตอร์จากรายการถัง คลิกที่ปุ่ม Upload Folder และอัปโหลดโฟลเดอร์ devdata และ fulldata เป็นรายบุคคล
ตอนนี้เราพร้อมที่จะส่งงาน Hadoop เพื่อเรียกใช้การใช้งาน MapReduce ของเราในข้อมูลจริง ใช้คำสั่ง ssh หรือ nano / vi เพื่อคัดลอกหรือสร้าง InvertedIndex.java บนคลัสเตอร์หลัก
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างไฟล์ jar :
$ hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .classตอนนี้คุณมีไฟล์ jar สำหรับงานของคุณ คุณต้องวางไฟล์ jar นี้ไว้ในที่เก็บคลาวด์เริ่มต้นของคลัสเตอร์ของคุณ เพียงสร้างโฟลเดอร์ที่เรียกว่า Jar บนถังของคุณและอัปโหลดไปยังโฟลเดอร์นั้น หากคุณสร้างไฟล์ JAR ของคุณบนโหนดหลักของคลัสเตอร์เองให้ใช้คำสั่งต่อไปนี้เพื่อคัดลอกไปยังโฟลเดอร์ JAR
$ hadoop fs -copyFromLocal ./invertedindex.jar
$ hadoop fs -cp ./invertedindex.jar gs://dataproc-69070.../JAR gs://dataproc-69070... ส่วนหนึ่งเป็นถังเริ่มต้นของคลัสเตอร์ของคุณ มันจะต้องได้รับการเตรียมโดย GS: // เพื่อบอกสภาพแวดล้อม Hadoop ว่าเป็นถังและไม่ใช่ตำแหน่งปกติในระบบไฟล์
ไปที่ส่วน 'Jobs' ในแถบการนำทางด้านซ้ายของหน้า Dataproc และคลิกที่ 'ส่งงาน' เติมพารามิเตอร์งานดังนี้:
gs:///dataproc-69070.../JAR/invertedindex.jargs:///dataproc-69070.../fulldatags:///dataproc-69070.../fulloutput โฟลเดอร์ถูกสร้างขึ้นระหว่างการดำเนินการ คุณจะได้รับข้อผิดพลาดหากคุณให้ชื่อโฟลเดอร์ที่มีอยู่ตอนนี้ส่งงาน คุณสามารถดูบันทึกในขณะที่กำลังทำงานอยู่
หมายเหตุ : หากคุณพบ Java.lang.Interrupted Exception คุณสามารถเพิกเฉยได้อย่างปลอดภัย งานของคุณจะยังคงดำเนินการ
ไฟล์เอาต์พุตจะถูกเก็บไว้ในโฟลเดอร์เอาต์พุตบนถัง หากคุณเปิดโฟลเดอร์นี้คุณจะสังเกตเห็นว่าดัชนีคว่ำอยู่ในหลายเซ็กเมนต์ (ลบไฟล์ _success ในโฟลเดอร์ก่อนที่จะรวมไฟล์เอาต์พุตทั้งหมด) ในการรวมไฟล์และสร้างเอาต์พุตข้อความสุดท้ายเรียกใช้คำสั่งต่อไปนี้:
$ hadoop fs -getmerge gs://dataproc-69070.../fulloutput ./output.txt
$ hadoop fs -copyFromLocal ./output.txt
$ hadoop fs -cp ./output.txt gs://dataproc-69070.../output.txt ตอนนี้คุณได้สร้างดัชนีกลับด้านของชุดข้อมูลทั้งหมดสำเร็จแล้ว คุณสามารถใช้ grep เพื่อดูรายการดัชนีสำหรับคำใด ๆ :
$ grep -w ' ^peace ' output.txt หากคุณต้องการคอมไพล์อีกครั้งและส่งงานใหม่อีกครั้งคุณสามารถลบไฟล์ .jar , .class , .java และ hadoop โดยใช้คำสั่งด้านล่าง
$ hadoop fs -rm ./wordcount.jar ./output.txt WordCount * .class
$ hadoop fs -rm gs://dataproc-69070.../JAR/wordcount.jar ; gs://dataproc-69070.../output.txt
$ hadoop fs -rm gs://dataproc-69070.../fulloutput/ *
$ hadoop fs -rmdir gs://dataproc-69070.../fulloutput
งานนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต Creative Commons Attribution 4.0 International