เจาะลึกสถาปัตยกรรม HBase



โพสต์นี้กล่าวถึง HBase และข้อมูลเชิงลึกเกี่ยวกับ HBase Architecture นอกจากนี้ยังกล่าวถึงส่วนประกอบ Hbase เช่น Master, Region server และ Zoo keeper และวิธีการใช้งาน

ในโพสต์วันนี้เราจะมาพูดคุยเกี่ยวกับสถาปัตยกรรม HBase มาทบทวนพื้นฐานของ HBase ก่อนที่เราจะเจาะลึกลงไปในสถาปัตยกรรม HBase





HBase - พื้นฐาน:

HBase เป็นโอเพนซอร์ส NoSQL แบบกระจายไม่เชิงสัมพันธ์เวอร์ชันหลายมิติเชิงคอลัมน์ซึ่งได้รับการจำลองแบบมาจาก Google BigTable ที่ทำงานบน HDFS '' NoSQL 'เป็นคำกว้าง ๆ หมายความว่าฐานข้อมูลไม่ใช่ RDBMS ซึ่งรองรับ SQL เป็นภาษาหลักในการเข้าถึง แต่ฐานข้อมูล NoSQL มีหลายประเภทและ Berkeley DB เป็นตัวอย่างที่ดีของฐานข้อมูล NoSQL ในเครื่องในขณะที่ HBase คือ ฐานข้อมูลแบบกระจายเป็นอย่างมาก

java system.exit (0)

HBase มีคุณลักษณะทั้งหมดของ Google BigTable เริ่มต้นจากโครงการของ Powerset เพื่อประมวลผลข้อมูลจำนวนมหาศาลสำหรับการค้นหาด้วยภาษาธรรมชาติ ได้รับการพัฒนาโดยเป็นส่วนหนึ่งของโครงการ Hadoop ของ Apache และทำงานบน HDFS (Hadoop Distributed File System) เป็นวิธีที่ทนต่อความผิดพลาดในการจัดเก็บข้อมูลกระจัดกระจายจำนวนมาก HBase เป็น 'ที่เก็บข้อมูล' มากกว่า 'ฐานข้อมูล' เนื่องจากไม่มีคุณลักษณะหลายอย่างที่มีอยู่ใน RDBMS เช่นคอลัมน์ที่พิมพ์ดัชนีรองทริกเกอร์และภาษาสืบค้นขั้นสูงเป็นต้น



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

ไป HBase เมื่อไหร่?

HBase เป็นตัวเลือกที่ดีก็ต่อเมื่อมีหลายร้อยล้านหรือพันล้านแถว นอกจากนี้ยังสามารถใช้ HBase ในสถานที่ต่างๆได้เมื่อพิจารณาที่จะย้ายจาก RDBMS ไปยัง HBase เป็นการออกแบบใหม่ทั้งหมดเมื่อเทียบกับพอร์ตกล่าวอีกนัยหนึ่ง HBase ไม่ได้รับการปรับให้เหมาะสมสำหรับแอปพลิเคชันธุรกรรมแบบคลาสสิกหรือแม้แต่การวิเคราะห์เชิงสัมพันธ์ นอกจากนี้ยังไม่สามารถทดแทน HDFS ได้อย่างสมบูรณ์เมื่อทำ MapReduce ชุดใหญ่ แล้วทำไมต้องไป HBase ?? หากแอปพลิเคชันของคุณมีสคีมาตัวแปรที่แต่ละแถวแตกต่างกันเล็กน้อยคุณควรดูที่ HBase

สถาปัตยกรรม HBase:

รูปต่อไปนี้อธิบายสถาปัตยกรรม HBase อย่างชัดเจน



เจาะลึกสถาปัตยกรรม HBase

ใน HBase มีส่วนประกอบหลักสามส่วน: มาสเตอร์เซิร์ฟเวอร์ภูมิภาคและผู้ดูแลสวนสัตว์ . ส่วนประกอบอื่น ๆ ได้แก่ Memstore, HFile และ WAL

เนื่องจาก HBase ทำงานบน HDFS จึงใช้สถาปัตยกรรม Master-Slave ซึ่ง HMaster จะเป็นโหนดหลักและเซิร์ฟเวอร์ภูมิภาคเป็นโหนดทาส เมื่อไคลเอนต์ส่งคำร้องขอเขียน HMaster จะรับคำขอนั้นและส่งต่อไปยังเซิร์ฟเวอร์ภูมิภาคที่เกี่ยวข้อง

เซิร์ฟเวอร์ภูมิภาค:

เป็นระบบที่ทำหน้าที่คล้ายกับโหนดข้อมูล เมื่อเซิร์ฟเวอร์ภูมิภาค (RS) ได้รับคำร้องขอการเขียนจะส่งคำขอไปยังภูมิภาคที่ระบุ แต่ละภูมิภาคจัดเก็บชุดแถว ข้อมูลแถวสามารถแยกออกได้ในหลายคอลัมน์ตระกูล (CF) ข้อมูลของ CF เฉพาะจะถูกเก็บไว้ใน HStore ซึ่งประกอบด้วย Memstore และชุดของ HFiles

Memstore ทำอะไร?

Memstore ติดตามบันทึกทั้งหมดสำหรับการดำเนินการอ่านและเขียนที่ดำเนินการภายในเซิร์ฟเวอร์ภูมิภาคนั้น ๆ จากนี้เราสามารถพูดได้ว่าทำหน้าที่คล้ายกับโหนดชื่อใน Hadoop Memstore เป็นหน่วยความจำในหน่วยความจำดังนั้น Memstore จึงใช้หน่วยความจำในหน่วยความจำของแต่ละโหนดข้อมูลเพื่อเก็บบันทึก เมื่อตรงตามเกณฑ์ที่กำหนดข้อมูล Memstore จะถูกล้างลงใน HFile

จุดประสงค์หลักในการใช้ Memstore คือความต้องการในการจัดเก็บข้อมูลบน DFS ที่เรียงลำดับตามคีย์แถว เนื่องจาก HDFS ได้รับการออกแบบมาสำหรับการอ่าน / เขียนตามลำดับโดยไม่อนุญาตให้มีการแก้ไขไฟล์ HBase จึงไม่สามารถเขียนข้อมูลลงดิสก์ได้อย่างมีประสิทธิภาพเนื่องจากกำลังได้รับข้อมูลที่เขียนจะไม่ถูกจัดเรียง (เมื่อไม่ได้จัดเรียงอินพุต) ซึ่งหมายความว่าไม่ได้รับการปรับให้เหมาะสมสำหรับอนาคต การค้นคืน ในการแก้ปัญหานี้ HBase บัฟเฟอร์ข้อมูลที่ได้รับล่าสุดในหน่วยความจำ (ใน Memstore) 'จัดเรียง' ก่อนที่จะล้างข้อมูลจากนั้นเขียนไปยัง HDFS โดยใช้การเขียนตามลำดับอย่างรวดเร็ว ดังนั้น HFile จึงมีรายการแถวที่เรียงลำดับ

ทุกครั้งที่การล้าง Memstore เกิดขึ้นหนึ่ง HFile ที่สร้างขึ้นสำหรับแต่ละ CF และการฟลัชบ่อยๆอาจสร้าง HFiles จำนวนมาก เนื่องจากในระหว่างการอ่าน HBase จะต้องดู HFiles จำนวนมากความเร็วในการอ่านจึงอาจได้รับผลกระทบ เพื่อป้องกันการเปิดไฟล์ HFiles มากเกินไปและหลีกเลี่ยงการลดประสิทธิภาพการอ่านจึงใช้กระบวนการบดอัด HFiles HBase จะเป็นระยะ ๆ (เมื่อตรงตามเกณฑ์ที่กำหนดได้) บีบอัด HFiles ขนาดเล็กหลายไฟล์ให้เป็นไฟล์ขนาดใหญ่ เห็นได้ชัดว่ายิ่งสร้างไฟล์โดย Memstore มากเท่าไหร่ระบบก็จะยิ่งทำงานมากขึ้น (โหลดเพิ่ม) เพิ่มเติมในขณะที่กระบวนการบดอัดมักจะดำเนินการควบคู่ไปกับการให้บริการคำขออื่น ๆ และเมื่อ HBase ไม่สามารถติดตามการบีบอัด HFiles ได้ (ใช่มีเกณฑ์ที่กำหนดไว้ด้วยเช่นกัน) ระบบจะบล็อกการเขียนบน RS อีกครั้ง ดังที่เราได้กล่าวไว้ข้างต้นสิ่งนี้ไม่พึงปรารถนาอย่างมาก

เราไม่สามารถมั่นใจได้ว่าข้อมูลจะคงอยู่ตลอดเวลาใน Memstore สมมติว่า datanode เฉพาะไม่ทำงาน จากนั้นข้อมูลที่อยู่ในหน่วยความจำของโหนดข้อมูลนั้นจะสูญหายไป

เพื่อเอาชนะปัญหานี้เมื่อคำขอมาจากอาจารย์ที่เขียนถึง WAL ด้วย WAL คืออะไร แต่ เขียนบันทึกล่วงหน้า ซึ่งอยู่บน HDFS ซึ่งเป็นที่เก็บข้อมูลถาวร ตอนนี้เราสามารถมั่นใจได้ว่าแม้ว่าโหนดข้อมูลจะหยุดทำงานข้อมูลก็จะไม่สูญหายเช่นกัน เรามีสำเนาของการกระทำทั้งหมดที่คุณควรทำใน WAL เมื่อโหนดข้อมูลขึ้นมันจะดำเนินกิจกรรมทั้งหมดอีกครั้ง เมื่อการดำเนินการเสร็จสิ้นทุกอย่างจะถูกล้างออกจาก Memstore และ WAL และถูกเขียนใน HFile เพื่อให้แน่ใจว่าหน่วยความจำเราจะไม่หมด

ให้เรายกตัวอย่างง่ายๆที่ฉันต้องการเพิ่มแถวที่ 10 จากนั้นจึงมีการร้องขอการเขียนเข้ามามันบอกว่ามันให้ข้อมูลเมตาทั้งหมดไปยัง Memstore และ WAL เมื่อแถวนั้นเขียนลงใน HFile ทุกอย่างใน Memstore และ WAL จะถูกล้างออก

Zoo Keeper:

HBase มาพร้อมกับ Zoo Keeper เมื่อฉันเริ่ม HBase อินสแตนซ์ Zoo Keeper ก็เริ่มต้นด้วย เหตุผลก็คือ Zoo keeper ช่วยเราในการติดตามเซิร์ฟเวอร์ภูมิภาคทั้งหมดที่มีสำหรับ HBase Zoo Keeper ติดตามจำนวนเซิร์ฟเวอร์ภูมิภาคที่มีเซิร์ฟเวอร์ภูมิภาคใดที่ถือครองจากโหนดข้อมูลไปยังโหนดข้อมูลใด ติดตามชุดข้อมูลขนาดเล็กที่ Hadoop หายไป จะลดค่าใช้จ่ายที่อยู่ด้านบนของ Hadoop ซึ่งติดตามข้อมูล Meta ส่วนใหญ่ของคุณ ดังนั้น HMaster จึงได้รับรายละเอียดของเซิร์ฟเวอร์ภูมิภาคโดยการติดต่อ Zoo keeper

มีคำถามสำหรับเรา? พูดถึงพวกเขาในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป

กระทู้ที่เกี่ยวข้อง:

jobtracker และ tasktracker ใน hadoop

คำสั่ง Hive ที่เป็นประโยชน์