ระบบกระจายล้อมรอบเราทุกที่ในปัจจุบัน ตัวอย่างที่โดดเด่นที่สุดของพวกเขาคืออินเทอร์เน็ตที่โฮสต์เวิลด์ไวด์เว็บ สภาพแวดล้อมการคำนวณในระบบคอมพิวเตอร์ขององค์กรมักจะแจกจ่ายเช่นกันการเชื่อมต่อบริการที่แตกต่างจากทรัพยากรมนุษย์แผนกการเงินไปยังระบบการจัดการสินทรัพย์ แอปพลิเคชันจำนวนมากยังโฮสต์ในคลาวด์ ในที่สุดวิศวกรรมขนาดใหญ่และการคำนวณทางวิทยาศาสตร์ในวันนี้พึ่งพากลุ่มอย่างมากเพื่อให้ปริมาณงานของพวกเขาขนานกัน หัวข้อเหล่านี้ถูกกล่าวถึงในการบรรยายการคำนวณแบบกระจายของฉัน ในที่เก็บนี้คุณสามารถค้นหาตัวอย่างที่ใช้งานได้จริงที่ฉันใช้ในหลักสูตรของฉัน
ซ็อกเก็ต
ใน C
ในชวา
HTML, CSS และ JavaScript
Java Servlets
ตัวอย่างที่ปรับใช้ได้
http proxy servlet
หน้า Javaserver
ตัวอย่างที่ปรับใช้ได้
jsps แบบสแตนด์อโลน
Java RMI
XML
ตัวอย่างสำหรับเอกสาร XML และมาตรฐานที่เกี่ยวข้อง
ตัวอย่างสำหรับการประมวลผล XML ด้วย Java
บริการเว็บ
JSON RPC
อินเทอร์เฟซส่งข้อความ
Hadoop
ลิงก์แต่ละลิงก์ข้างต้นนำคุณไปสู่ไดเรกทอรีย่อยที่มีชุดตัวอย่าง แต่ละไดเรกทอรีย่อยมีไฟล์ README.md ของตัวเองพร้อมคำอธิบายโดยละเอียด
เนื่องจากฉันยังใช้รหัสเดียวกันในสไลด์ของฉันมีความคิดเห็นพิเศษบางอย่างเช่น //(*@serverBox{2)}@*) สำหรับการจัดรูปแบบในรหัสของฉัน ... คุณสามารถเพิกเฉยได้อย่างปลอดภัย ^_ ^
แนวคิดของหลักสูตรนี้คือเราต้องการเข้าใจว่าสภาพแวดล้อมแอปพลิเคชันของเว็บและการกระจายสภาพแวดล้อมของแอปพลิเคชันทำงานอย่างไร เราต้องการทำเช่นนั้นโดยเริ่มสำรวจวิธีการสื่อสารผ่านเครือข่ายในระดับต่ำสุดของนามธรรม (ปกติ) สำหรับโปรแกรมเมอร์ซ็อกเก็ต API จากที่นั่นเราทำงานในระดับที่สูงขึ้นทีละขั้นตอนของนามธรรมเช่น API ที่เรียบง่ายและทรงพลังยิ่งขึ้นซ้อนกันด้านบนของกันและกัน (และท้ายที่สุดในซ็อกเก็ต) ด้วยวิธีนี้เราจะได้รับความเข้าใจที่ดีว่าแอปพลิเคชันแบบกระจายและเว็บทำงานอย่างไร เราจะสามารถดูเว็บไซต์และมีความเข้าใจอย่างคร่าวๆว่ามันจะทำงานได้อย่างไรลงไปที่ถั่วและสลักเกลียว สำหรับแต่ละระดับของสิ่งที่เป็นนามธรรมที่เราสำรวจดังนั้นเราจึงเรียนรู้เทคโนโลยีตัวอย่างเสมอ
ตามที่กล่าวไว้เราเริ่มต้นที่ด้านล่างสุด: การสื่อสารในระบบกระจายวันนี้มักจะขึ้นอยู่กับ UDP หรือ TCP โปรโตคอลทั้งสองสามารถเข้าถึงได้ผ่านซ็อกเก็ต API ซึ่งเราให้ตัวอย่างทั้งใน C และ Java เป็นส่วนหนึ่งของตัวอย่างเหล่านี้เรายังแสดงให้เห็นว่าข้อความสามารถเข้ารหัสใน Java ได้อย่างไรและวิธีการสร้างเซิร์ฟเวอร์ที่สามารถประมวลผลหลายคำขอแบบขนานได้ ซ็อกเก็ตจึงเป็นพื้นฐานของแอปพลิเคชันแบบกระจายซึ่งเป็นระดับต่ำสุดที่โปรแกรมเมอร์อาจต้องทำงาน
ตอนนี้เราสามารถเข้าใจกระบวนการสื่อสารพื้นฐานที่เกิดขึ้นในเครือข่ายคอมพิวเตอร์และอินเทอร์เน็ตในปัจจุบัน เราจะใช้ความเข้าใจนี้เพื่อตรวจสอบว่าองค์กรหรือองค์กรสามารถนำเสนอตัวเองต่อโลกภายนอกผ่านเว็บไซต์ได้อย่างไร เราต้องการเข้าใจเทคโนโลยีที่จำเป็นในการสร้างเว็บไซต์ที่สามารถโต้ตอบกับผู้ใช้แบบไดนามิกได้
เวิลด์ไวด์เว็บขึ้นอยู่กับสามเสาหลัก: HTTP, HTML/CSS/JavaScript และ URL HTTP ซึ่งเป็นโปรโตคอลการถ่ายโอนข้อความไฮเปอร์เป็นโปรโตคอลที่ใช้ข้อความเพื่อสืบค้นทรัพยากรซึ่งมักจะส่งผ่านการเชื่อมต่อ TCP ที่จริงแล้วเราได้จัดทำตัวอย่างการใช้งานของทั้งเซิร์ฟเวอร์ (เว็บเซิร์ฟเวอร์) และไคลเอนต์ (เว็บเบราว์เซอร์) ด้านไคลเอนต์ของการสื่อสาร HTTP โดยใช้ซ็อกเก็ต (และแม้แต่เว็บเซิร์ฟเวอร์ขนาดเล็กคู่ขนานเราก็ให้ตัวอย่างพื้นฐานสำหรับ HTML, CSS และ JavaScript
การใช้ HTTP ตามซ็อกเก็ตค่อนข้างซับซ้อน ซ็อกเก็ตอนุญาตให้เราเข้าถึง TCP สิ่งที่เราต้องการคือ API ที่สง่างามในทำนองเดียวกันในการเข้าถึง HTTP (ระดับที่สูงกว่าของนามธรรมต่อไป) เทคโนโลยีอย่างหนึ่งคือ Java Servlets Servlets ใช้เพื่อใช้งานฝั่งเซิร์ฟเวอร์ของการสนทนา HTTP Servlet เป็นคลาสย่อยของคลาส Java พิเศษซึ่งใช้วิธีการจัดการสำหรับการโต้ตอบ HTTP ที่แตกต่างกัน ("วิธี HTTP") วิธีการเหล่านี้เรียกโดยคอนเทนเนอร์ servlet การใช้งานจริงของเซิร์ฟเวอร์ ดังนั้นเราจึงสามารถมีสมาธิกับตรรกะของแอปพลิเคชันได้อย่างเต็มที่และไม่จำเป็นต้องกังวลเกี่ยวกับการโต้ตอบของโปรโตคอลเอง เราให้ตัวอย่างที่หลากหลายสำหรับ Java Servlets ทั้งตัวอย่างที่สามารถปรับใช้งานได้รวมถึงพร็อกซี HTTP พร็อกซีแบบสแตนด์อโลน ดังนั้นด้วย Java Servlets เราสามารถสร้างส่วนประกอบเซิร์ฟเวอร์ที่สามารถโต้ตอบกับไคลเอนต์ HTTP ได้แบบไดนามิก (เช่นเว็บเบราว์เซอร์) ซึ่งหมายความว่าเราสามารถสร้างเนื้อหาของหน้าเว็บแบบไดนามิกเมื่อเบราว์เซอร์ร้องขอ อย่างไรก็ตามการสร้างเว็บไซต์แบบไดนามิกที่สมบูรณ์เนื่องจาก Java Servlets ค่อนข้างยุ่งยากอีกครั้งเนื่องจาก Servlets เป็นคลาส Java ในขณะที่หน้าเว็บเป็น HTML ซึ่งเราจะเขียนในรูปแบบของค่าคงที่สตริงที่จะเขียนลงในเอาต์พุตของ servlet
ระดับที่สูงขึ้นของนามธรรมต่อไปคือ Javaserver Pages (JSPS) ซึ่งช่วยให้เราสามารถเขียนหน้า HTML (หรือรูปแบบข้อความอื่น ๆ ) และรวมถึงซอร์สโค้ด Java ในนั้น หน้าจะเสิร์ฟอีกครั้งโดยคอนเทนเนอร์ servlet เมื่อใดก็ตามที่หน้าถูกส่งไปยังไคลเอนต์รหัส Java ที่รวมอยู่จะถูกเรียกใช้ก่อนที่ฝั่งเซิร์ฟเวอร์ (และอาจสร้างผลลัพธ์เพิ่มเติม) เมื่อตรวจสอบอย่างใกล้ชิดเราจะพบว่า JSPs นั้นเป็น Servlets "พิเศษ" จริง ๆ : เมื่อมีการเข้าถึง JSP เป็นครั้งแรกคอนเทนเนอร์ Servlet จะสร้างซอร์สโค้ดแบบไดนามิกของ Servlet Java ที่สอดคล้องกัน servlet นี้ถูกรวบรวมโหลดแล้วดำเนินการเพื่อสร้างเนื้อหาแบบไดนามิกของหน้าเพื่อส่งไปยังไคลเอนต์ ทุกอย่างที่เป็น "ข้อความ" ใน JSP กลายเป็นสตริงภายในเซิร์ฟเล็ตซึ่งเขียนไว้ในการตอบกลับ HTTP ของเซิร์ฟเล็ต ทุกอย่างที่เป็น "รหัส" ใน JSP ถูกคัดลอกโดยตรงไปยังวิธีการจัดการของ servlet JSPs เป็นวิธีที่เป็นธรรมชาติมากขึ้นในการสร้างเอาต์พุตข้อความ (HTML) แบบไดนามิกและให้บริการแก่ลูกค้า ถึงตอนนี้เรามีความเข้าใจที่ชัดเจนว่าเนื้อหาแบบไดนามิกในเว็บสามารถสร้างได้อย่างไรผู้ใช้สามารถโต้ตอบกับเว็บแอปพลิเคชันผ่านทางเว็บแบบฟอร์มโดยใช้เบราว์เซอร์ของเธอและวิธีที่เราสามารถตระหนักถึงเซสชัน
ในขณะที่เทคโนโลยีเหล่านี้ช่วยให้เราสามารถสร้างมุมมอง "ภายนอก" แบบไดนามิกของ บริษัท วิธีที่ บริษัท นำเสนอตัวเองในเว็บตอนนี้เราสำรวจมุมมอง "ภายใน" ของสภาพแวดล้อมการคำนวณองค์กรแบบกระจาย เป้าหมายคือการสร้างสภาพแวดล้อมที่แอปพลิเคชันจากแผนกต่าง ๆ (แผนกการเงินทรัพยากรมนุษย์การจัดการสินทรัพย์ ... ) สามารถเชื่อมต่อซึ่งกันและกันได้อย่างปลอดภัยในอนาคต
ขั้นตอนแรกบนถนนสายนี้ไปยังการคำนวณระดับองค์กรคือการเรียกขั้นตอนระยะไกล (RPCs) ซึ่งเราสำรวจตัวอย่างของการเรียกใช้วิธีการระยะไกล Java (RMI) ตัวอย่างของเราแสดงให้เห็นว่าวัตถุของแอปพลิเคชันหนึ่งที่โฮสต์บนคอมพิวเตอร์สามารถเข้าถึงได้จากโปรแกรมอื่นที่ทำงานบนคอมพิวเตอร์เครื่องอื่นอย่างไร สิ่งนี้ทำให้เราใกล้เคียงกับการตระหนักถึงแอปพลิเคชันแบบกระจายที่เชื่อมต่อกันในเครือข่าย อย่างไรก็ตาม Java RMI ยังคงเป็นเทคโนโลยีเฉพาะ Java และโปรโตคอลเป็นไบนารี เราต้องการใช้แอพพลิเคชั่นแบบกระจายของเราในรูปแบบที่ไม่ขึ้นกับแพลตฟอร์มโดยใช้โปรโตคอลที่ชัดเจนมากระบุไว้อย่างดีและง่ายต่อการทำความเข้าใจ
การแสวงหาเทคโนโลยีดังกล่าวทำให้เราต้องใช้การเรียนรู้เกี่ยวกับภาษามาร์กอัปที่ขยายได้ก่อน (XML. XML เป็นรูปแบบการจัดทำเอกสารด้วยตนเองสำหรับการจัดเก็บโครงสร้างข้อมูลที่ซับซ้อนในข้อความมันคล้ายกับ HTML
จากนั้นเราจะหารือเกี่ยวกับบริการเว็บ บริการเว็บเป็นรากฐานพื้นฐานของระบบคอมพิวเตอร์ที่หลากหลายขององค์กรและสถาปัตยกรรมที่มุ่งเน้นบริการ พวกเขาจะถูกเรียกใช้โดยใช้โปรโตคอล SOAP ที่ใช้ XML ซึ่งมักจะผ่าน HTTP อินเทอร์เฟซและฟังก์ชั่นที่ให้ไว้จะอธิบายผ่านภาษาคำอธิบายบริการเว็บ (WSDL) ซึ่งเป็นมาตรฐาน XML อื่น จากสิ่งที่เรารู้อยู่แล้วตอนนี้เราสามารถส่งข้อมูล XML ไปยัง Java Servlet ผ่าน HTTP-POST ได้แยกวิเคราะห์ข้อมูลนี้ด้วยเทคโนโลยีการประมวลผล Java XML เหล่านี้ใช้เทคโนโลยีเดียวกันเพื่อสร้างเอกสาร XML เอาต์พุตและส่งสิ่งนี้กลับมาเป็นการตอบสนองของ Java Servlet ที่จริงแล้วเราสามารถใช้หน้า Javaserver เพื่อจุดประสงค์นี้ได้ อย่างไรก็ตามมีวิธีที่ง่ายกว่าอีกครั้ง: เราสามารถสร้างบริการเป็นวัตถุ Java ง่าย ๆ และเผยแพร่ไปยังเซิร์ฟเวอร์ Apache Axis2/Java เซิร์ฟเวอร์จะทำให้สามารถเข้าถึงได้ผ่าน SOAP และสร้างคำอธิบาย WSDL โดยอัตโนมัติ สิ่งเหล่านี้สามารถใช้ในการสร้างวัตถุพร็อกซีสำหรับฝั่งไคลเอ็นต์โดยใช้เช่น Maven เราตรวจสอบเทคโนโลยีนี้ในหลาย ๆ ตัวอย่าง
JSON RPC เป็นวิธีการโทรระยะไกล (RPC) อีกวิธีหนึ่ง (ระบุไว้ที่นี่) โดยที่โครงสร้างข้อมูลที่แลกเปลี่ยนถูกเข้ารหัสใน Notation วัตถุ JavaScript (JSON) ข้อมูลจะถูกแลกเปลี่ยนผ่าน HTTP หรือ TCP JSON RCP นั้นคล้ายกับบริการเว็บ แต่ได้รับการออกแบบให้มีน้ำหนักเบามากขึ้น เราหารืออีกครั้งหลายตัวอย่าง
ในฐานะที่เป็นกรณีการใช้งานที่สำคัญล่าสุดสำหรับการคำนวณแบบกระจายเราพิจารณาว่าการคำนวณแบบกระจายขนาดใหญ่สามารถรับรู้ได้อย่างไร การคำนวณดังกล่าวเป็นสิ่งจำเป็นในหลาย ๆ สถานการณ์ตั้งแต่การจำลองในด้านวิศวกรรมจนถึงการขุดข้อมูลและการประมวลผลในองค์กร
ตอนนี้เรามุ่งเน้นไปที่การใช้พลังการคำนวณของกลุ่มขนาดใหญ่ที่สามารถใช้สำหรับการคำนวณทางวิทยาศาสตร์และวิศวกรรมขนาดใหญ่ การคำนวณหรือการจำลองขนาดใหญ่ดังกล่าวมักจะแบ่งออกเป็นปัญหาย่อยที่เล็กกว่าหลายแห่ง ปัญหาที่เล็กกว่าเหล่านี้จะได้รับการแก้ไข อย่างร่วมมือกัน โดยหลายเธรดหรือกระบวนการแบบขนาน สิ่งนี้มักเกี่ยวข้องกับการแลกเปลี่ยนข้อความในช่วงเวลาปกติระหว่างกระบวนการที่ทำงานกับปัญหาย่อยที่เกี่ยวข้องอย่างใกล้ชิด เห็นได้ชัดว่าบริการเว็บ, Java Servlets หรือแม้แต่ Java และ HTTP Protocol ก็จะเป็นเทคโนโลยีที่ผิดสำหรับสิ่งนั้น: สำหรับการคำนวณขนาดใหญ่เราต้องการให้มีประสิทธิภาพมากที่สุดเท่าที่จะทำได้ สิ่งนี้เกี่ยวข้องกับการสื่อสารซึ่งมีราคาแพงมากและเป็นปัจจัย จำกัด สำหรับการเร่งความเร็วที่เราสามารถทำได้ด้วยการกระจาย เราต้องการแลกเปลี่ยนประเภทข้อมูลดั้งเดิมอย่างมีประสิทธิภาพและเราต้องการใช้กระบวนทัศน์การสื่อสารที่ไม่ได้รับการสนับสนุนโดย HTTP/TCP เช่นการออกอากาศมัลติคาสต์และการสื่อสารแบบอะซิงโครนัส สำหรับสิ่งนี้การใช้งานอินเทอร์เฟซการส่งข้อความ (MPI) จะเป็นวิธีการเลือก เราสำรวจเทคโนโลยีนี้ตามตัวอย่างหลายอย่างในภาษาการเขียนโปรแกรม C
ในขั้นตอนสุดท้ายเราพูดถึงเทคโนโลยีที่รวมความสามารถในการสร้างการคำนวณแบบกระจายขนาดใหญ่ (จาก MPI World) เข้ากับการสนับสนุนเครื่องมือที่หลากหลายของระบบนิเวศ Java: MapReduce กับ Apache Hadoop MPI เป็นเทคโนโลยีที่เลือกหากการสื่อสารมีราคาแพงและคอขวดของแอปพลิเคชันของเราการสื่อสารบ่อยครั้งจำเป็นต้องมีระหว่างกระบวนการแก้ปัญหาย่อยที่เกี่ยวข้องฮาร์ดแวร์ที่มีอยู่นั้นเป็นเนื้อเดียวกันกระบวนการจะต้องจัดระเบียบในกลุ่มหรือโครงสร้างทอพอโลยี สภาพแวดล้อมแอปพลิเคชันแบบกระจายที่แตกต่างกัน ในทางกลับกัน Hadoop ครอบคลุมกรณีการใช้งานที่การสื่อสารไม่ใช่คอขวดเนื่องจากการคำนวณใช้เวลานานกว่าการสื่อสาร (คิดว่าการเรียนรู้ของเครื่องจักร) เมื่อสภาพแวดล้อมต่างกันกระบวนการไม่จำเป็นต้องจัดระเบียบในลักษณะพิเศษ อาจมีขนาดใหญ่มาก (การกินข้อดีของการสื่อสารสไตล์ MPI) หรือที่ข้อมูลมาจากที่และผลลัพธ์จะต้องถูกผลักกลับไปยังแอปพลิเคชันอื่น ๆ ในสภาพแวดล้อมพูดกับกองบริการ HTTP/Java Servlet/Web Service ตัวอย่าง Hadoop ของเรามุ่งเน้นไปที่รูปแบบ MapReduce (ซึ่งเป็นนิดหน่อยคล้ายกับการกระจาย/รวบรวม/ลดลงใน MPI เพียงสำหรับสถานการณ์ที่อธิบายไว้ข้างต้น)
โดยรวมแล้วหลักสูตรนี้จะให้ความเข้าใจอย่างคร่าวๆเกี่ยวกับเทคโนโลยีที่โดดเด่นในด้านการคำนวณแบบกระจายจากเว็บไซต์ไดนามิกผ่านระบบแอปพลิเคชันแบบกระจายภายใน บริษัท ไปจนถึงการคำนวณทางวิศวกรรมและการคำนวณทางวิทยาศาสตร์ แต่ละฟิลด์ได้รับการสำรวจด้วยตัวอย่างบนมือและคุณจะได้ทดสอบและเล่นด้วยเทคโนโลยีตัวอย่างหลายอย่าง
สำหรับแต่ละตัวอย่างฉันแสดงรายการซอฟต์แวร์ที่ต้องการอย่างชัดเจนและหารือเกี่ยวกับวิธีการรับและติดตั้ง ที่นี่ฉันให้ภาพรวมเกี่ยวกับส่วนประกอบซอฟต์แวร์เหล่านี้
ตัวอย่างส่วนใหญ่ที่ฉันให้ไว้จะถูกเขียนในภาษาการเขียนโปรแกรม Java และสามารถทำงานภายใต้ระบบโดยพลการเนื่องจากติดตั้ง Java ในการรวบรวมพวกเขาคุณต้องติดตั้ง Java JDK ตัวอย่างของฉันต้องใช้ Java 7 หรือใหม่กว่า
ภายใต้ Windows คุณต้องดาวน์โหลดและติดตั้ง Java จากเว็บไซต์ Oracle
ภายใต้ Linux คุณจะทำการติดตั้ง sudo apt-get install openjdk-7-jdk (ที่คุณสามารถแทนที่ 7 ด้วยเวอร์ชันใหม่ ๆ เช่น 8 ถ้าคุณต้องการ)
ตัวอย่าง Java ของฉันหลายตัวอย่างถูกสร้างขึ้นด้วย Maven ตัวอย่างทั้งหมดเหล่านี้มีไฟล์ pom.xml ในโฟลเดอร์รูท ในการสร้างพวกเขาคุณต้องติดตั้ง Maven
ภายใต้ Windows คุณต้องดาวน์โหลดและติดตั้ง Maven จากเว็บไซต์ Apache
ภายใต้ Linux คุณจะต้อง sudo apt-get install maven
หากคุณใช้ Eclipse (ดูด้านล่าง) คุณไม่จำเป็นต้องติดตั้ง Maven เนื่องจากมีการรวมเข้ากับ Eclipse แล้ว
ฉันแนะนำ Eclipse เป็นสภาพแวดล้อมของนักพัฒนาสำหรับตัวอย่าง Java ทั้งหมดในที่เก็บนี้ ตัวอย่าง Java แต่ละตัวอย่างมาพร้อมกับไฟล์ Eclipse .project และด้วย Eclipse .settings Eclipse รวมทั้ง Maven และ Git ซึ่งหมายความว่าคุณสามารถโคลนพื้นที่เก็บข้อมูลนี้จากภายในคราสและนำเข้าโครงการ Jave โดยตรงในระหว่างกระบวนการนี้ หากคุณคลิกขวาที่โครงการ Maven และเลือก Maven -> Update Project... Eclipse จะดาวน์โหลดและใช้ไลบรารีและการพึ่งพาที่จำเป็นทั้งหมดตามที่ระบุโดย Maven pom.xml สำหรับคุณ
คุณสามารถดาวน์โหลด Eclipse จากเว็บไซต์ Eclipse ฉันแนะนำให้ใช้อย่างน้อย Eclipse Mars.1 สำหรับการสนับสนุน Maven และ Git ที่ยอดเยี่ยม
สำหรับการเรียกใช้ตัวอย่างหน้า Java Servlets และ JavaServer คุณต้องดาวน์โหลดเซิร์ฟเวอร์ Glassfish จากเว็บไซต์ดาวน์โหลดที่เกี่ยวข้อง ฉันขอแนะนำให้ใช้อย่างน้อย Glassfish 4.1.2
สำหรับการรันตัวอย่างบริการเว็บคุณจะต้องดาวน์โหลด Apache Axis2/Java จากหน้าดาวน์โหลดที่เกี่ยวข้อง ฉันแนะนำให้ใช้อย่างน้อย Axis2 1.7.3
ในการรวบรวมตัวอย่างที่เขียนในภาษาการเขียนโปรแกรม C (เช่นตัวอย่างซ็อกเก็ต C -based) คุณจะต้องมีคอมไพเลอร์ C เช่น GCC ภายใต้ Linux โดยปกติควรติดตั้งแล้วและสามารถติดตั้งได้ผ่าน sudo apt-get install gcc ภายใต้ Windows คุณจะต้องติดตั้ง MingW โดยปกติผ่านตัวติดตั้งเว็บ
ตัวอย่าง C หลายตัวอย่างมาสำหรับ Windows หรือ Linux GCC ช่วยให้คุณสามารถเปรียบเทียบได้เช่นถ้าคุณใช้ Linux คุณสามารถรวบรวมโปรแกรม C สำหรับ Windows เพื่อจุดประสงค์นี้คุณจะต้องติดตั้ง sudo apt-get install gcc-mingw-w64-i686 ก่อนจากนั้นสามารถใช้คำสั่ง gcc-mingw-w64-i686 ในลักษณะเดียวกับที่คุณจะใช้ gcc ภายใต้ MINGW
ในการสร้างและรวบรวมตัวอย่างของเราสำหรับการใช้อินเทอร์เฟซส่งข้อความ (MPI) เราจำเป็นต้องมีการใช้งาน MPI เราเลือก mpich
ภายใต้ Linux คุณสามารถติดตั้งไฟล์ที่ต้องการผ่าน sudo apt-get install mpich libmpich-dev
ssh และ rsync ) ในการทดสอบตัวอย่าง Hadoop ของเราตอนนี้เราต้องตั้งค่าคลัสเตอร์ Hadoop แบบโหนดเดียว ดังนั้นเราจึงทำตามคำแนะนำที่ให้ไว้ที่ http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/singlecluster.html เราจำเป็นต้องติดตั้ง pre- vequisit เช่น ssh และ rsync ในตัวอย่าง hadoop readme เรามีคู่มือการติดตั้งสำหรับ Hadoop 2.7.2 Linux / Ubuntu มันเดือดลงไปที่การดาวน์โหลดและติดตั้ง Hadoop จากหนึ่งในกระจกที่ให้ไว้ที่ http://www.apache.org/dyn/closer.cgi/hadoop/common/ รวมถึงการปฏิบัติตามแนวทางของการสอนที่เชื่อมโยง
งานนี้มีวัตถุประสงค์ทางการศึกษาอย่างหมดจด นอกเหนือจากทุกสิ่งที่กล่าวถึงด้านล่างสำหรับสิ่งใด ๆ ในที่เก็บนี้ฉันกำหนดเงื่อนไขการออกใบอนุญาตเพิ่มเติมหนึ่งข้อ: รหัสจะต้องไม่ถูกนำมาใช้สำหรับสิ่งใดที่อาจละเมิดกฎหมายของเยอรมนีจีนหรือสหรัฐอเมริกา นอกจากนี้ยังถือสำหรับไฟล์หรือทรัพยากรอื่น ๆ ที่ให้ไว้ที่นี่
ตัวอย่างในที่เก็บนี้ได้รับใบอนุญาตภายใต้ใบอนุญาตสาธารณะ GNU ทั่วไปเวอร์ชัน 3, 29 มิถุนายน 2550 โดยมีข้อยกเว้นดังต่อไปนี้:
ทุกอย่างในไดเรกทอรี /javaserverpages /standalonejspswithjetty และ /javaservlets /พร็อกซีได้รับใบอนุญาตภายใต้ใบอนุญาต Apache v2.0 และได้มาจากโครงการที่ฝังตัว-Jetty-JSP พร้อมลิขสิทธิ์ (C) 1995-2013 Mort Bay Consulting Pty
ตัวอย่าง Hadoop บางตัวอย่างได้รับแรงบันดาลใจจาก Maven-Hadoop-Java-WordCount-Template โดย H3ML3T ซึ่งไม่มีข้อมูลการออกใบอนุญาต ตัวอย่างมีความแตกต่างอย่างสิ้นเชิงในหลายวิธีเช่นในวิธีที่เราสร้างขวดไขมัน อย่างไรก็ตามโครงการดั้งเดิมนี้ได้รับการอธิบายอย่างดีในรายการบล็อกนี้
นอกจากนี้คำ Hadoop ของเรายังขึ้นอยู่กับตัวอย่างการนับคำที่รู้จักกันดีสำหรับแผนที่ของ Hadoop ลดฟังก์ชั่นการทำงาน มันขึ้นอยู่กับเวอร์ชันโดยให้ luca menichetti [email protected] ภายใต้ใบอนุญาตสาธารณะ GNU ทั่วไปรุ่น 2