3.1 ประวัติความเป็นมาของคำว่า BigData
คำว่า Big Data ปรากฏขึ้นเมื่อไม่นานมานี้ Google Trends แสดงจุดเริ่มต้นของการเติบโตอย่างแข็งขันในการใช้วลีนี้ตั้งแต่ปี 2011:
ในขณะเดียวกัน คนเกียจคร้านเท่านั้นที่ไม่ใช้คำนี้ในตอนนี้ โดยเฉพาะอย่างยิ่ง บ่อยครั้งที่คำนี้ถูกใช้อย่างไม่เหมาะสมโดยนักการตลาด แล้วบิ๊กดาต้าคืออะไรกันแน่? เนื่องจากฉันตัดสินใจที่จะระบุและเน้นประเด็นอย่างเป็นระบบ จึงจำเป็นต้องกำหนดแนวคิด
ในการปฏิบัติของฉัน ฉันได้พบกับคำจำกัดความที่แตกต่างกัน:
- Big Data คือเมื่อมีข้อมูลมากกว่า 100GB (500GB, 1TB อะไรก็ได้ที่คุณต้องการ)
- Big Data คือข้อมูลที่ไม่สามารถประมวลผลใน Excel ได้
- Big Data คือข้อมูลที่ไม่สามารถประมวลผลได้ในคอมพิวเตอร์เครื่องเดียว
และแม้แต่สิ่งเหล่านี้:
- โดยทั่วไปแล้ว Big Data คือข้อมูลใดๆ
- Big Data ไม่มีอยู่จริง มันถูกคิดค้นโดยนักการตลาด
ฉันจะยึดคำจำกัดความจากวิกิพีเดีย:
ข้อมูลขนาดใหญ่เป็นชุดของแนวทาง เครื่องมือ และวิธีการสำหรับการประมวลผลข้อมูลที่มีโครงสร้างและไม่มีโครงสร้างที่มีปริมาณมหาศาลและมีความหลากหลายอย่างมีนัยสำคัญ เพื่อให้ได้ผลลัพธ์ที่มนุษย์รับรู้ได้ ซึ่งมีประสิทธิภาพในสภาวะของการเติบโตอย่างต่อเนื่อง การกระจายผ่านโหนดจำนวนมากของเครือข่ายคอมพิวเตอร์ ในช่วงปลายทศวรรษ 2000 ซึ่งเป็นทางเลือกแทนระบบการจัดการฐานข้อมูลแบบดั้งเดิมและโซลูชันชั้นธุรกิจอัจฉริยะ
ดังนั้นด้วยBig Dataฉันจะเข้าใจไม่ใช่จำนวนข้อมูลที่เฉพาะเจาะจงและแม้แต่ตัวข้อมูลเอง แต่วิธีการประมวลผลซึ่งอนุญาตให้มีการประมวลผลข้อมูลแบบกระจาย วิธีการเหล่านี้สามารถนำไปใช้กับชุดข้อมูลขนาดใหญ่ (เช่น เนื้อหาของทุกหน้าบนอินเทอร์เน็ต) เช่นเดียวกับชุดข้อมูลขนาดเล็ก (เช่น เนื้อหาของการบรรยายนี้)
ต่อไปนี้เป็นตัวอย่างบางส่วนของสิ่งที่อาจเป็นแหล่งข้อมูลที่ต้องใช้เทคนิคข้อมูลขนาดใหญ่:
- บันทึกพฤติกรรมผู้ใช้บนอินเทอร์เน็ต
- สัญญาณ GPS จากรถยนต์สำหรับบริษัทขนส่ง
- ข้อมูลที่นำมาจากเซ็นเซอร์ใน Large Hadron Collider
- หนังสือดิจิทัลในหอสมุดแห่งรัฐรัสเซีย
- ข้อมูลการทำธุรกรรมของลูกค้าธนาคารทั้งหมด
- ข้อมูลเกี่ยวกับการซื้อทั้งหมดในเครือค้าปลีกขนาดใหญ่ ฯลฯ
จำนวนแหล่งข้อมูลเพิ่มขึ้นอย่างรวดเร็ว ซึ่งหมายความว่าเทคโนโลยีการประมวลผลข้อมูลกำลังเป็นที่ต้องการมากขึ้นเรื่อยๆ
3.2 หลักการข้อมูลขนาดใหญ่
ตามคำจำกัดความของ Big Data เราสามารถกำหนดหลักการพื้นฐานของการทำงานกับข้อมูลดังกล่าวได้:
1. ความสามารถในการปรับขนาดในแนวนอน เนื่องจากอาจมีข้อมูลจำนวนมากโดยพลการ ระบบใดๆ ที่เกี่ยวข้องกับการประมวลผลข้อมูลขนาดใหญ่จึงต้องขยายได้ ปริมาณข้อมูลเพิ่มขึ้น 2 เท่า - ปริมาณเหล็กในกลุ่มเพิ่มขึ้น 2 เท่าและทุกอย่างยังคงทำงานต่อไป
2. ความอดทนต่อความผิดพลาด หลักการของความสามารถในการปรับขนาดในแนวนอนหมายความว่าสามารถมีเครื่องหลายเครื่องในคลัสเตอร์ได้ ตัวอย่างเช่น คลัสเตอร์ Hadoop ของ Yahoo มีมากกว่า 42,000 เครื่อง (คุณสามารถดูขนาดคลัสเตอร์ในองค์กรต่างๆ ได้ที่ลิงก์นี้) ซึ่งหมายความว่าบางเครื่องจะรับประกันว่าจะล้มเหลว แนวทางปฏิบัติเกี่ยวกับข้อมูลขนาดใหญ่จำเป็นต้องตระหนักถึงการหยุดชะงักเหล่านี้และอยู่รอดได้โดยไม่มีผลกระทบที่สำคัญใดๆ
3. พื้นที่ข้อมูล ในระบบกระจายขนาดใหญ่ ข้อมูลจะถูกกระจายไปยังเครื่องจำนวนมาก หากข้อมูลอยู่ในเซิร์ฟเวอร์หนึ่งและประมวลผลบนเซิร์ฟเวอร์อื่น ค่าใช้จ่ายในการถ่ายโอนข้อมูลอาจสูงกว่าต้นทุนของการประมวลผลเอง ดังนั้น หนึ่งในหลักการที่สำคัญที่สุดสำหรับการออกแบบโซลูชัน BigData คือหลักการของพื้นที่ข้อมูล ถ้าเป็นไปได้ เราจะประมวลผลข้อมูลในเครื่องเดียวกับที่เราจัดเก็บไว้
เครื่องมือข้อมูลขนาดใหญ่ที่ทันสมัยทั้งหมดปฏิบัติตามหลักการทั้งสามนี้ไม่ทางใดก็ทางหนึ่ง เพื่อให้เป็นไปตามนั้น จำเป็นต้องมีวิธีการ วิธีการ และกระบวนทัศน์ในการพัฒนาเครื่องมือพัฒนาข้อมูล หนึ่งในวิธีการสุดคลาสสิคที่ผมจะวิเคราะห์ในการบรรยายวันนี้
3.3 แผนที่ลด
MapReduceเป็นรูปแบบการประมวลผลข้อมูลแบบกระจายที่เสนอโดย Google สำหรับการประมวลผลข้อมูลจำนวนมากในกลุ่มคอมพิวเตอร์ MapReduce แสดงได้ดีด้วยรูปภาพต่อไปนี้:
![](https://cdn.codegym.cc/images/article/c5e7598e-9613-4d68-9e56-d0e5907cf732/1024.jpeg)
MapReduce จะถือว่าข้อมูลถูกจัดระเบียบเป็นบางระเบียน การประมวลผลข้อมูลเกิดขึ้นใน 3 ขั้นตอน:
1. แผนที่เวที ในขั้นตอนนี้ ข้อมูลจะได้รับการประมวลผลล่วงหน้าโดยใช้ฟังก์ชัน map() ซึ่งกำหนดโดยผู้ใช้ งานของขั้นตอนนี้คือการประมวลผลล่วงหน้าและกรองข้อมูล การดำเนินการคล้ายกับการทำงานของแผนที่ในภาษาโปรแกรมการทำงาน - ฟังก์ชันที่กำหนดเองจะถูกนำไปใช้กับบันทึกอินพุตแต่ละรายการ
ฟังก์ชัน map() ที่ใช้กับบันทึกอินพุตเดียวจะสร้างคู่คีย์-ค่าจำนวนมาก ตั้งค่า - นั่นคือ สามารถส่งคืนเพียงหนึ่งเรกคอร์ด อาจไม่ส่งคืนอะไรเลย หรืออาจส่งคืนคู่คีย์-ค่าหลายคู่ สิ่งที่จะอยู่ในคีย์และค่านั้นขึ้นอยู่กับผู้ใช้ แต่คีย์เป็นสิ่งที่สำคัญมาก เนื่องจากข้อมูลที่มีคีย์เดียวในอนาคตจะตกอยู่ในอินสแตนซ์หนึ่งของฟังก์ชันลด
2. สับเปลี่ยนสเตจ มันไม่มีใครสังเกตเห็นโดยผู้ใช้ ในขั้นตอนนี้ เอาต์พุตของฟังก์ชันแผนที่จะ "แยก" - แต่ละช่องจะสอดคล้องกับคีย์เอาต์พุตหนึ่งปุ่มของระยะแผนที่ ในอนาคตตะกร้าเหล่านี้จะทำหน้าที่เป็นปัจจัยการผลิตสำหรับการลด
3. ลดขั้นตอน แต่ละ "ตะกร้า" ที่มีค่าที่สร้างขึ้นในขั้นตอนการสับเปลี่ยนจะเข้าสู่อินพุตของฟังก์ชัน reduce()
ผู้ใช้กำหนดฟังก์ชันลดขนาดและคำนวณผลลัพธ์สุดท้ายสำหรับ "ตะกร้า"เดียว ชุดของค่าทั้งหมดที่ส่งกลับโดยฟังก์ชัน reduce() คือผลลัพธ์สุดท้ายของงาน MapReduce
ข้อเท็จจริงเพิ่มเติมบางประการเกี่ยวกับ MapReduce:
- การเรียกใช้ฟังก์ชัน แผนที่ทั้งหมดทำงานอย่างอิสระและสามารถทำงานแบบขนานได้ รวมทั้งบนเครื่องคลัสเตอร์ต่างๆ
- การเรียกใช้ฟังก์ชัน ลดขนาดทั้งหมดทำงานโดยอิสระและสามารถทำงานแบบขนานได้ รวมถึงบนเครื่องคลัสเตอร์ต่างๆ
- การสุ่มเป็นการภายในแทนการเรียงลำดับแบบขนาน ดังนั้นจึงสามารถทำงานบนเครื่องคลัสเตอร์ต่างๆ ได้ คะแนน 1-3 ช่วยให้คุณสามารถใช้หลักการของการปรับขยายแนวนอน .
- โดยปกติแล้ว ฟังก์ชันแผนที่จะใช้ในเครื่องเดียวกับที่เก็บข้อมูล ซึ่งจะช่วยลดการส่งข้อมูลผ่านเครือข่าย (หลักการของตำแหน่งข้อมูล)
- MapReduce เป็นการสแกนข้อมูลทั้งหมดเสมอ ไม่มีดัชนีใดๆ ซึ่งหมายความว่า MapReduce ใช้งานได้ไม่ดีเมื่อต้องการการตอบสนองอย่างรวดเร็ว
3.4 ตัวอย่างของงานที่แก้ไขได้อย่างมีประสิทธิภาพด้วย MapReduce
การนับจำนวนคำ
เริ่มจากงานคลาสสิค - จำนวนคำ งานถูกกำหนดดังนี้: มีเอกสารจำนวนมาก งานคือการคำนวณจำนวนครั้งทั้งหมดที่เกิดขึ้นในคลังข้อมูลสำหรับแต่ละคำที่เกิดขึ้นอย่างน้อยหนึ่งครั้งในคลังข้อมูล
สารละลาย:
เนื่องจากเรามีเอกสารจำนวนมาก ให้เอกสารหนึ่งฉบับเป็นบันทึกอินพุตเดียวสำหรับงาน MapRreduce ใน MapReduce เราสามารถกำหนดฟังก์ชันที่ผู้ใช้กำหนดเท่านั้น ซึ่งเราจะทำ (เราจะใช้ pseudocode ที่เหมือน python):
|
|
ฟังก์ชั่นแผนที่เปลี่ยนเอกสารอินพุตเป็นชุดของคู่ (คำ 1) สับเปลี่ยนอย่างโปร่งใสสำหรับเราเปลี่ยนเป็นคู่ (คำ [1,1,1,1,1,1,1]) ลดผลรวมเหล่านี้ ส่งคืน คำตอบสุดท้ายของคำว่า
กำลังประมวลผลบันทึกระบบโฆษณา
ตัวอย่างที่สองนำมาจากการปฏิบัติจริงของ Data-Centric Alliance
งาน:มี csv-log ของระบบการโฆษณาของแบบฟอร์ม:
<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p>
11111,RU,Moscow,2,4,0.3
22222,RU,Voronezh,2,3,0.2
13413,UA,Kyiv,4,11,0.7
…
จำเป็นต้องคำนวณต้นทุนเฉลี่ยของการแสดงโฆษณาในเมืองต่างๆ ของรัสเซีย
สารละลาย:
|
|
ฟังก์ชันแผนที่จะตรวจสอบว่าเราต้องการรายการนี้หรือไม่ และถ้าเราต้องการ ก็จะเหลือแต่ข้อมูลที่จำเป็น (เมืองและจำนวนเงินที่ชำระ) ฟังก์ชันลดจะคำนวณคำตอบสุดท้ายสำหรับเมืองตามรายการการชำระเงินทั้งหมดในเมืองนั้น