5 เทคนิคการเพิ่มประสิทธิภาพ Spark ที่นักวิทยาศาสตร์ข้อมูลทุกคนควรรู้เกี่ยวกับ

เผยแพร่แล้ว: 2020-06-12

ไม่ว่าจะเป็นการเริ่มต้นขนาดเล็กหรือองค์กรขนาดใหญ่ ข้อมูลมีอยู่ทุกที่ ข้อมูลนี้รวบรวมจากแหล่งต่างๆ เช่น บันทึกของลูกค้า ใบเรียกเก็บเงินของสำนักงาน ใบค่าใช้จ่าย และฐานข้อมูลพนักงาน บริษัทรวบรวมและวิเคราะห์กลุ่มข้อมูลเหล่านี้เพื่อกำหนดรูปแบบและแนวโน้ม รูปแบบเหล่านี้ช่วยพวกเขาในการตัดสินใจที่สำคัญสำหรับการเพิ่มประสิทธิภาพของธุรกิจ

แต่การวิเคราะห์ข้อมูลและการคำนวณตัวเลขนี้ไม่ได้สามารถทำได้ผ่านแผ่นงาน Excel เท่านั้น นี่คือที่มาของเทคโนโลยีซอฟต์แวร์ประมวลผลข้อมูล หนึ่งในเฟรมเวิร์กการประมวลผลข้อมูลที่เร็วและใช้กันอย่างแพร่หลายคือ Apache Spark เทคนิคการเพิ่มประสิทธิภาพ Spark ใช้สำหรับปรับแต่งประสิทธิภาพเพื่อให้ได้ประโยชน์สูงสุด

เราจะเรียนรู้เกี่ยวกับเทคนิคในเล็กน้อย ให้เราสรุปเกี่ยวกับพื้นฐานของเฟรมเวิร์กซอฟต์แวร์นี้

สารบัญ

Apache Spark คืออะไร?

Apache Spark เป็น เฟรมเวิร์กการประมวลผลคลัสเตอร์โอเพ่นซอร์สที่ มีชื่อเสียงระดับโลก ซึ่งใช้สำหรับประมวลผลชุดข้อมูลขนาดใหญ่ในบริษัทต่างๆ Apache Spark ประมวลผลชุดข้อมูลขนาดใหญ่เหล่านี้และแจกจ่ายไปยังหลายระบบได้อย่างง่ายดาย มี API แบบง่ายที่ทำให้ชีวิตของโปรแกรมเมอร์และนักพัฒนาเป็นเรื่องง่าย

Spark จัดเตรียมการเชื่อมโยงดั้งเดิมสำหรับภาษาการเขียนโปรแกรม เช่น Python, R, Scala และ Java รองรับการเรียนรู้ของเครื่อง การประมวลผลกราฟ และ ฐาน ข้อมูล SQL ด้วยประโยชน์ที่น่าอัศจรรย์เหล่านี้ Spark จึงถูกใช้ในธนาคาร บริษัทเทคโนโลยี องค์กรทางการเงิน แผนกโทรคมนาคม และหน่วยงานรัฐบาล หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ apache spark โปรดดูหลักสูตรวิทยาศาสตร์ข้อมูลของเราจากมหาวิทยาลัยที่เป็นที่ยอมรับ

สถาปัตยกรรมของ Apache Spark

สถาปัตยกรรมรันไทม์ของ Apache Spark ประกอบด้วยส่วนประกอบต่อไปนี้:

ไดรเวอร์ Spark หรือกระบวนการหลัก

สิ่งนี้จะแปลงโปรแกรมเป็นงานและกำหนดเวลาสำหรับตัวดำเนินการ (กระบวนการของทาส) ตัว กำหนดตารางเวลางานจะ แจกจ่ายงานเหล่านี้ให้กับผู้ดำเนินการ

ผู้จัดการคลัสเตอร์

ตัว จัดการคลัสเตอร์ Spark มีหน้าที่ในการเรียกใช้ตัวดำเนินการและไดรเวอร์ มันกำหนดเวลาและจัดสรรทรัพยากรในเครื่องโฮสต์หลายเครื่องสำหรับคลัสเตอร์

ผู้บริหาร

ผู้ดำเนินการหรือที่เรียกว่ากระบวนการทาสเป็นหน่วยงานที่งานของงานถูกดำเนินการ หลังจากเปิดตัว จะทำงานจนกว่าวงจรชีวิตของแอปพลิเคชัน Spark จะสิ้นสุดลง การดำเนินการของงาน Spark จะไม่หยุดถ้าผู้ดำเนินการล้มเหลว

ชุดข้อมูลที่กระจายอย่างยืดหยุ่น (RDD)

นี่คือชุดของชุดข้อมูลที่ไม่เปลี่ยนรูปและกระจายผ่านโหนดของคลัสเตอร์ Spark โดยเฉพาะอย่างยิ่ง คลัสเตอร์คือชุดของระบบแบบกระจายที่สามารถติดตั้ง Spark ได้ RDD แบ่งออกเป็นหลายพาร์ติชั่น และเรียกว่ายืดหยุ่นได้เนื่องจากสามารถแก้ไขปัญหาข้อมูลในกรณีที่ข้อมูลล้มเหลว

ประเภทของ RDD ที่ Spark รองรับคือ:

  • ชุดข้อมูล Hadoop ที่สร้างจากไฟล์บน Hadoop Distributed File System
  • คอลเล็กชันแบบคู่ขนาน ซึ่งสามารถอิงตามคอลเล็กชัน Scala ได้

DAG (กราฟ Acyclic แบบกำกับทิศทาง)

Spark สร้างกราฟทันทีที่ป้อนรหัสลงในคอนโซล Spark หากมีการทริกเกอร์การดำเนินการบางอย่าง (คำสั่งสำหรับการดำเนินการ) กราฟนี้จะถูกส่งไป ยัง DAGScheduler

กราฟนี้ถือได้ว่าเป็นลำดับของการดำเนินการกับข้อมูล DAG ประกอบด้วยจุดยอดและขอบ จุดยอดแสดงถึง RDD และขอบแสดงถึงการคำนวณที่จะดำเนินการบน RDD เฉพาะนั้น เรียกว่ากราฟกำกับเนื่องจากไม่มีการวนซ้ำหรือรอบภายในกราฟ

เทคนิคการเพิ่มประสิทธิภาพจุดประกาย

เทคนิคการเพิ่มประสิทธิภาพ Spark ใช้เพื่อแก้ไขการตั้งค่าและคุณสมบัติของ Spark เพื่อให้แน่ใจว่ามีการใช้ทรัพยากรอย่างเหมาะสมและงานจะดำเนินการอย่างรวดเร็ว ทั้งหมดนี้ช่วยในการประมวลผลข้อมูลอย่างมีประสิทธิภาพในที่สุด

เทคนิคการเพิ่มประสิทธิภาพ Spark ที่ได้รับความนิยมมากที่สุด มีการระบุไว้ด้านล่าง:

1. การทำให้เป็นอนุกรมของข้อมูล

ในที่นี้ อ็อบเจ็กต์ในหน่วยความจำจะถูกแปลงเป็นรูปแบบอื่นที่สามารถเก็บไว้ในไฟล์หรือส่งผ่านเครือข่าย วิธีนี้ช่วยปรับปรุงประสิทธิภาพของแอปพลิเคชันแบบกระจาย สองวิธีในการจัดลำดับข้อมูลคือ:

  • Java การทำให้เป็น อันดับ – เฟรมเวิร์ ObjectOutputStream ใช้สำหรับการทำให้เป็นอนุกรมอ็อบเจ็กต์ java.io.Externalizable สามารถใช้เพื่อควบคุมประสิทธิภาพของการทำให้เป็นอนุกรม กระบวนการนี้มีความคงอยู่แบบเบา
  • การทำให้เป็นอันดับ Kyro – Spark ใช้ ไลบรารีการทำให้เป็นอนุกรมของ Kryo (v4) สำหรับการทำให้เป็นอนุกรมอ็อบเจ็กต์ที่เร็วกว่าการทำให้เป็นอันดับ Java และเป็นกระบวนการที่กะทัดรัดกว่า เพื่อปรับปรุงประสิทธิภาพ คลาสจะต้องลงทะเบียนโดยใช้เมธอด registerKryoClasses

2. แคช

นี่เป็นเทคนิคที่มีประสิทธิภาพซึ่งใช้เมื่อต้องการข้อมูลบ่อยขึ้น Cache() และ Confirm() เป็นวิธีการที่ใช้ในเทคนิคนี้ เมธอดเหล่านี้ใช้สำหรับจัดเก็บการคำนวณของ RDD, DataSet และ DataFrame แต่ cache() จะเก็บมันไว้ในหน่วยความจำ และ archive() จะเก็บมันไว้ที่ระดับการจัดเก็บข้อมูลที่ผู้ใช้กำหนด

วิธีการเหล่านี้สามารถช่วยลดต้นทุนและประหยัดเวลาเนื่องจากมีการใช้การคำนวณซ้ำ

อ่าน: Dataframe ใน Apache PySpark: บทช่วยสอนที่ครอบคลุม

3. การปรับโครงสร้างข้อมูล

เราสามารถลดการใช้หน่วยความจำในขณะที่ใช้ Spark ได้โดยปรับแต่งคุณสมบัติ Java บางอย่างที่อาจเพิ่มโอเวอร์เฮด สามารถทำได้ด้วยวิธีต่อไปนี้:

  • ใช้อ็อบเจ็กต์ที่ระบุหรือรหัสตัวเลขแทนสตริงสำหรับคีย์
  • หลีกเลี่ยงการใช้วัตถุจำนวนมากและโครงสร้างที่ซ้อนกันที่ซับซ้อน
  • ตั้งค่าสถานะ JVM เป็น xx:+UseCompressedOops หากขนาดหน่วยความจำน้อยกว่า 32 GB

4. การเพิ่มประสิทธิภาพการเก็บขยะ

สำหรับการเพิ่มประสิทธิภาพตัวรวบรวมขยะ ต้องใช้ G1 และ GC สำหรับการเรียกใช้แอปพลิเคชัน Spark ตัวรวบรวม G1 จัดการกองที่กำลังเติบโต การปรับแต่ง GC มีความจำเป็นตามบันทึกที่สร้างขึ้น เพื่อควบคุมลักษณะการทำงานที่ไม่คาดคิดของแอปพลิเคชัน แต่ก่อนหน้านั้น คุณต้องปรับเปลี่ยนและปรับลอจิกและโค้ดของโปรแกรมให้เหมาะสม

G1GC ช่วยลดเวลาดำเนินการของงานโดยปรับเวลาหยุดชั่วคราวระหว่างกระบวนการให้เหมาะสม

5. การจัดการหน่วยความจำ

หน่วยความจำที่ใช้สำหรับจัดเก็บการคำนวณ เช่น การรวม สับเปลี่ยน การเรียงลำดับ และการรวม เรียกว่าหน่วยความจำการดำเนินการ หน่วยความจำที่ใช้สำหรับการแคชและจัดการข้อมูลที่จัดเก็บไว้ในคลัสเตอร์ หน่วยความจำทั้งสองใช้ขอบเขตรวม M

เมื่อไม่ได้ใช้งานหน่วยความจำสำหรับการดำเนินการ หน่วยความจำในการจัดเก็บจะสามารถใช้พื้นที่ได้ เมื่อไม่ได้ใช้งานหน่วยความจำหน่วยเก็บข้อมูล หน่วยความจำดำเนินการสามารถใช้พื้นที่ได้ นี่เป็นหนึ่งใน เทคนิคการเพิ่มประสิทธิภาพ Spark ที่มีประสิทธิภาพ ที่สุด

อ่านเพิ่มเติม: 6 ฟีเจอร์เปลี่ยนเกมของ Apache Spark

บทสรุป

จากเทคนิคการเพิ่มประสิทธิภาพ Spark ต่างๆ เรา สามารถ เข้าใจวิธีที่เทคนิคเหล่านี้ช่วยลดเวลาในการประมวลผลและประมวลผลข้อมูลได้เร็วขึ้น นักพัฒนาและผู้เชี่ยวชาญใช้เทคนิคเหล่านี้ตามแอปพลิเคชันและปริมาณข้อมูลที่เป็นปัญหา

หากคุณอยากรู้ที่จะเรียนรู้เกี่ยวกับการเพิ่มประสิทธิภาพ ของ ประกายไฟ วิทยาศาสตร์ข้อมูล ลองดู โปรแกรม Executive PG ของ IIIT-B & upGrad ใน Data Science ซึ่งสร้างขึ้นสำหรับมืออาชีพที่ทำงานและเสนอกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติ การให้คำปรึกษากับอุตสาหกรรม ผู้เชี่ยวชาญ ตัวต่อตัวกับที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เทคนิคการเพิ่มประสิทธิภาพ Spark คืออะไร?

Apache Spark ทำให้องค์กรสามารถประมวลผลข้อมูลได้อย่างรวดเร็วและแก้ปัญหาข้อมูลที่ซับซ้อนได้อย่างง่ายดาย เห็นได้ชัดว่าในระหว่างการพัฒนาโปรแกรมใด ๆ การดูแลประสิทธิภาพของโปรแกรมเป็นสิ่งสำคัญมาก เทคนิคการเพิ่มประสิทธิภาพ Spark ช่วยในการคำนวณข้อมูลในหน่วยความจำ สิ่งเดียวที่สามารถขัดขวางการคำนวณเหล่านี้คือหน่วยความจำ, CPU หรือทรัพยากรอื่นๆ

ทุกเทคนิคการเพิ่มประสิทธิภาพ Spark ใช้เพื่อวัตถุประสงค์ที่แตกต่างกันและดำเนินการบางอย่างเฉพาะ เทคนิคการเพิ่มประสิทธิภาพ Spark ที่ใช้กันอย่างแพร่หลาย ได้แก่:

1. การทำให้เป็นอันดับ
2. การเลือก API
3. ตัวแปรล่วงหน้า
4. แคชและคงอยู่
5. การทำงานของ ByKey
6. การเลือกรูปแบบไฟล์
7. การปรับแต่งการเก็บขยะ
8. ระดับความขนาน

เมื่อใดที่คุณไม่ควรใช้ Spark

Apache Spark มีกรณีการใช้งานมากมาย แต่มีความต้องการเฉพาะบางอย่างที่คุณต้องการเครื่องมือข้อมูลขนาดใหญ่อื่น ๆ เพื่อให้บรรลุวัตถุประสงค์ ในกรณีเช่นนี้ ขอแนะนำให้ใช้เทคโนโลยีอื่นแทนการใช้ Spark ด้านล่างนี้คือกรณีการใช้งานที่คุณไม่ควรพิจารณาใช้ Spark:

1. ความสามารถในการประมวลผลต่ำ – การประมวลผลเริ่มต้นบน Apache Spark เกิดขึ้นในหน่วยความจำคลัสเตอร์ หากเครื่องเสมือนหรือคลัสเตอร์ของคุณมีความสามารถในการประมวลผลน้อย คุณควรเลือกใช้ทางเลือกอื่น เช่น Apache Hadoop
2. การนำเข้าข้อมูลในรูปแบบการเผยแพร่-สมัครสมาชิก – ในกรณีนี้ มีหลายแหล่งที่มาและปลายทางหลายแห่งที่มีการย้ายข้อมูลนับล้านในเวลาอันสั้น ที่นี่ คุณไม่ควรใช้ Spark และใช้ Apache Kafka แทน

Pandas เร็วกว่า Apache Spark หรือไม่

เมื่อคุณเปรียบเทียบความเร็วในการคำนวณของทั้ง Pandas DataFrame และ Spark DataFrame คุณจะสังเกตเห็นว่าประสิทธิภาพของ Pandas DataFrame นั้นดีขึ้นเล็กน้อยสำหรับชุดข้อมูลขนาดเล็ก ในทางกลับกัน หากขนาดของข้อมูลเพิ่มขึ้น จะพบว่า Spark DataFrame มีความสามารถเพียงพอที่จะทำผลงานได้ดีกว่า Pandas DataFrame ดังนั้นจะขึ้นอยู่กับปริมาณข้อมูลเป็นอย่างมาก