บทความนี้สันนิษฐานว่าสภาพแวดล้อม Hadoop อยู่ในเครื่องระยะไกล (เช่นเซิร์ฟเวอร์ Linux) และเวอร์ชัน Hadoop คือ 2.5.2
หมายเหตุ: บทความนี้ Eclipse/Intellij Idea Debugging ระยะไกล Hadoop 2.6.0 การอ้างอิงส่วนใหญ่และได้รับการปรับตาม
เนื่องจากฉันชอบติดตั้งซอฟต์แวร์ 32 บิตบน Win7 64 บิตเช่น 32 บิต JDK และ Eclipse 32 บิตแม้ว่าระบบปฏิบัติการในบทความนี้คือ Win7 64 บิตซอฟต์แวร์ทั้งหมดเป็น 32 บิต
เวอร์ชันซอฟต์แวร์:
ระบบปฏิบัติการ: Win7 64 บิต
Eclipse: Eclipse-jee-mars-2-Win32
Java: 1.8.0_77 32 บิต
Hadoop: 2.5.2
1. ติดตั้ง Hadoop
1. ค้นหาไดเรกทอรีใน win7 ถึง decompress hadoop-2.5.2.tar.gz เช่น d: /app/hadoop-2.5.2/
2. กำหนดค่าตัวแปรสภาพแวดล้อม
hadoop_home = d: /app/hadoop-2.5.2/
2. ติดตั้งปลั๊กอิน Hadoop Eclipse
1. ดาวน์โหลด hadoop-eclipse-plugin
Hadoop-Eclipse-Plugin เป็นปลั๊กอิน Hadoop ที่ใช้เป็นพิเศษสำหรับ eclipse ซึ่งสามารถดูไดเรกทอรีและเนื้อหาไฟล์ของ HDFs โดยตรงในสภาพแวดล้อม IDE ซอร์สโค้ดของมันโฮสต์บน GitHub และที่อยู่เว็บไซต์อย่างเป็นทางการคือ https://github.com/winghc/hadoop2x-eclipse-plugin ดาวน์โหลด hadoop-eclipse-plugin-2.6.0.jar ในโฟลเดอร์รีลีส
2. ดาวน์โหลดแพ็คเกจ Hadoop Plug-in สำหรับแพลตฟอร์ม Windows 32-bit (hadoop.dll, winutils.exe)
เนื่องจากสภาพแวดล้อมซอฟต์แวร์ของเราคือ 32 บิตเราจำเป็นต้องดาวน์โหลด hadoop.dll 32 บิตและ winutils.exe ที่อยู่ดาวน์โหลดมีให้สำหรับ baidu hadoop.dll 32
ตัวอย่างเช่นดาวน์โหลดสิ่งนี้: http://xiazai.vevb.com/201607/yuanma/eclipse-hadoop(vevb.com).rar
คัดลอก winutils.exe ไปยังไดเรกทอรี $ hadoop_home/bin และคัดลอกไดเรกทอรี c:/windows/syswow64 (หมายเหตุ: เนื่องจากระบบปฏิบัติการของเราคือ 64 บิตและซอฟต์แวร์คือ 32 บิต
3. กำหนดค่าปลั๊กอิน Hadoop-Eclipse-Plugin
เริ่ม Eclipse, Window-> preferences-> Hadoop Map/ลดการระบุไดเรกทอรีรูทของ Hadoop บน win7 (เช่น: $ hadoop_home)
เปลี่ยนแผนที่/ลดมุมมอง
Windows-> แสดง view-> แผนที่อื่น ๆ/ลดตำแหน่ง
จากนั้นเพิ่มตำแหน่งใหม่ในแผงแผนที่/ลดตำแหน่งด้านล่าง
กำหนดค่าดังนี้
ชื่อตำแหน่ง เป็นเพียงชื่อเพียงแค่เรียกมันว่า
แผนที่/ลด (v2) โฮสต์หลัก ที่นี่คือที่อยู่ IP ที่สอดคล้องกับ Hadoop Master ในเครื่องเสมือน พอร์ตด้านล่างสอดคล้องกับพอร์ตที่ระบุโดยแอตทริบิวต์ dfs.datanode.ipc.address ใน hdfs-site.xml
พอร์ตที่นี่ของ พอร์ตหลัก DFS สอดคล้องกับพอร์ตที่ระบุโดย fs.defaultfs ใน core-site.xml
ชื่อผู้ใช้สุดท้ายควรเหมือนกับชื่อผู้ใช้ที่รัน Hadoop ในเครื่องเสมือน ฉันติดตั้งและวิ่ง Hadoop 2.6.0 กับ Hadoop ดังนั้นเติม Hadoop ที่นี่ หากคุณติดตั้งด้วยรูทให้เปลี่ยนเป็นรูทตามนั้น
หลังจากระบุพารามิเตอร์เหล่านี้ให้คลิกเสร็จสิ้นและคราสเพื่อทราบวิธีการเชื่อมต่อกับ Hadoop หากทุกอย่างเป็นไปด้วยดีคุณสามารถเห็นไดเรกทอรีและไฟล์ใน HDFS ในแผง Project Explorer
คุณสามารถคลิกขวาที่ไฟล์และเลือกลบเพื่อลอง โดยปกติแล้วครั้งแรกจะไม่ประสบความสำเร็จและจะมีหลายสิ่งหลายอย่าง แนวคิดทั่วไปคือมีสิทธิ์ไม่เพียงพอ เหตุผลก็คือผู้ใช้ Win7 เข้าสู่ระบบปัจจุบันไม่ได้เป็นผู้ใช้ที่รันอยู่ของ Hadoop ในเครื่องเสมือน มีวิธีแก้ปัญหามากมาย ตัวอย่างเช่นคุณสามารถสร้างผู้ใช้ Hadoop Administrator ใหม่บน Win7 จากนั้นเปลี่ยนเป็น Hadoop เพื่อเข้าสู่ระบบ Win7 จากนั้นใช้ Eclipse เพื่อพัฒนา อย่างไรก็ตามนี่เป็นวิธีที่น่ารำคาญเกินไปวิธีที่ง่ายที่สุด:
เพิ่มใน hdfs-site.xml
<property> <name> dfs.permissions.enabled </name> <dance> false </value> </porement>
กล่าวโดยย่อคือการปิดการตรวจจับความปลอดภัยของ Hadoop อย่างสมบูรณ์ (ไม่จำเป็นต้องใช้สิ่งเหล่านี้ในขั้นตอนการเรียนรู้อย่าทำสิ่งนี้เมื่อมีการผลิตอย่างเป็นทางการ) ในที่สุดก็เริ่มต้น Hadoop จากนั้นไปที่ Eclipse และทำซ้ำการดำเนินการไฟล์ลบตอนนี้
หมายเหตุ: หากคุณไม่สามารถเชื่อมต่อได้โปรดลอง Telnet 192.168.1.6 9000 ก่อน (โปรดแทนที่ IP และพอร์ตด้วย IP และพอร์ต Hadoop Server ของคุณเอง) เพื่อให้แน่ใจว่าพอร์ตสามารถเข้าถึงได้
หาก Telnet ล้มเหลวอาจเป็นไปได้ว่ามีปัญหากับค่าของ fs.defaultfs ใน core-site.xml ตัวอย่างเช่นการกำหนดค่าคือ localhost: 9000 คุณสามารถพิจารณาแทนที่ LocalHost ด้วยชื่อโฮสต์
3. เขียนตัวอย่าง WordCount
1. สร้างโครงการใหม่และเลือกแผนที่/ลดโครงการ
เพียงแค่อันถัดไปจากนั้นสร้างโค้ด wodcount.java คลาสใหม่ดังต่อไปนี้:
นำเข้า java.io.ioexception; นำเข้า java.util.stringTokenizer; นำเข้า org.apache.hadoop.conf.configuration; นำเข้า org.apache.hadoop.fs.path; นำเข้า org.apache.hadoop.io.intwable; org.apache.hadoop.mapreduce.mapper; นำเข้า org.apache.hadoop.mapreduce.reducer; นำเข้า org.apache.hadoop.mapreduce.lib.input.fileinputformat; นำเข้า org.apache.hadoop.mapreduce org.apache.hadoop.util.enericoptionsparser; คลาสสาธารณะ WordCount {คลาสคงที่สาธารณะ Tokenizermapper ขยาย Mapper <วัตถุ, ข้อความ, ข้อความ, intwritable> {ส่วนตัวสุดท้ายคงที่ one one = ใหม่ intwlable (1); ข้อความข้อความส่วนตัว = ข้อความใหม่ (); แผนที่โมฆะสาธารณะ (คีย์วัตถุ, ค่าข้อความ, บริบทบริบท) พ่น IOException, interruptedException {StringTokenizer ITR = ใหม่ StringTokenizer (value.toString ()); ในขณะที่ (itr.hasmoretokens ()) {word.set (itr.nexttoken ()); Context.write (Word, One); }}} คลาสสแตติกสาธารณะ intsumreducer ขยายตัวลด <ข้อความ, intwlitable, ข้อความ, intwlitable> {ผล private intwlitable = new intwabitle (); โมฆะสาธารณะลดลง (คีย์ข้อความ, การติดตั้งซ้ำ <intwlitable>, บริบทบริบท) โยน ioexception, interruptedException {int sum = 0; สำหรับ (intwlitable val: ค่า) {sum += val.get (); } result.set (ผลรวม); บริบทการเขียน (คีย์ผลลัพธ์); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {การกำหนดค่า conf = การกำหนดค่าใหม่ (); String [] otherArgs = new genericoptionsparser (conf, args) .getRemainingArgs (); if (otherargs.length <2) {system.err.println ("การใช้งาน: WordCount <in> [<in> ... ] <Out>"); System.Exit (2); } งาน job = job.getInstance (conf, "count word"); Job.setJarbyClass (WordCount.class); Job.setMapperclass (tokenizermapper.class); Job.setCombinerclass (intsumreducer.class); Job.setReducerclass (intsumreducer.class); Job.setOutputkeyclass (text.class); job.setOutputValUeclass (intwritable.class); สำหรับ (int i = 0; i <otherargs.length - 1; ++ i) {fileinputformat.addinputpath (งาน, เส้นทางใหม่ (อื่น ๆ [i])); } fileOutputFormat.setOutputPath (งาน, เส้นทางใหม่ (อื่น ๆ artargs [otherargs.length - 1])); System.Exit (job.waitforcompletion (จริง)? 0: 1); -จากนั้นสร้าง log4j.properties ในไดเรกทอรี SRC เนื้อหามีดังนี้: (เพื่อความสะดวกในการทำงานให้ตรวจสอบผลลัพธ์ต่างๆ)
log4j.rootlogger = ข้อมูล stdout#log4j.logger.org.springframework = ข้อมูล#log4j.logger.org.apache.activemq = ข้อมูล#log4j.logger.org.apache Activemq.spring = เตือน#log4j.logger.org.apache.activemq.store.journal = info#log4j.logger.org.apache.activemq.or.or g.active.journal = infolog4j.appender.stdout = org.apache.log4j.consoleAppenderlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout.layout %-5.5p | %-16.16T | %-32.32C {1} | %-32.32C %4L | %m%nโครงสร้างไดเรกทอรีสุดท้ายมีดังนี้:
2. กำหนดค่าพารามิเตอร์การรัน
เนื่องจาก WordCount คือการป้อนไฟล์เพื่อนับคำแล้วเอาต์พุตไปยังโฟลเดอร์อื่นดังนั้นให้พารามิเตอร์สองพารามิเตอร์โปรดดูรูปด้านบนป้อนในอาร์กิวเมนต์ของโปรแกรม
hdfs: //192.168.1.6: 9000/ผู้ใช้/nub1.txt
HDFS: //192.168.1.6: 9000/ผู้ใช้/เอาต์พุต
โปรดทราบว่าหากไฟล์ผู้ใช้/nub1.txt ไม่มีโปรดอัปโหลดด้วยตนเองก่อน (โดยใช้เครื่องมือตำแหน่ง DFS คลิกขวาใน eclipse) จากนั้น/เอาต์พุต/ต้องไม่มีอยู่ มิฉะนั้นหากโปรแกรมทำงานจนจบและพบว่ามีการรายงานไดเรกทอรีเป้าหมายจะมีการรายงานข้อผิดพลาด
โอเคแค่วิ่ง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น