ความแตกต่างระหว่าง HBase และ Hadoop / HDFS


130

นี่เป็นคำถามที่ไร้เดียงสา แต่ฉันยังใหม่กับกระบวนทัศน์ NoSQL และไม่รู้มากเกี่ยวกับเรื่องนี้ ดังนั้นหากใครสามารถช่วยให้ฉันเข้าใจความแตกต่างระหว่าง HBase และ Hadoop ได้อย่างชัดเจนหรือให้คำชี้บางอย่างซึ่งอาจช่วยให้ฉันเข้าใจความแตกต่าง

จนถึงตอนนี้ฉันได้ทำการค้นคว้าและทำตาม ตามความเข้าใจของฉัน Hadoop จัดเตรียมเฟรมเวิร์กเพื่อทำงานกับกลุ่มข้อมูลดิบ (ไฟล์) ใน HDFS และ HBase เป็นเอ็นจิ้นฐานข้อมูลที่อยู่เหนือ Hadoop ซึ่งโดยทั่วไปจะทำงานกับข้อมูลที่มีโครงสร้างแทนที่จะเป็นข้อมูลดิบ Hbase จัดเตรียมเลเยอร์ตรรกะบน HDFS เช่นเดียวกับ SQL ถูกต้องหรือไม่

กรุณาอย่าลังเลที่จะแก้ไขฉัน

ขอบคุณ


7
บางทีชื่อคำถามควรเป็น "ความแตกต่างระหว่าง HBase และ HDFS" แล้วล่ะ?
Matt Ball

คำตอบ:


248

Hadoop นั้นมี 3 อย่างคือ FS (Hadoop Distributed File System) กรอบการคำนวณ (MapReduce) และสะพานการจัดการ (ยังเป็นผู้เจรจาทรัพยากรอื่น) HDFS ช่วยให้คุณจัดเก็บข้อมูลจำนวนมากในลักษณะกระจาย (ให้การเข้าถึงการอ่าน / เขียนที่เร็วขึ้น) และซ้ำซ้อน (ให้ความพร้อมใช้งานที่ดีขึ้น) และ MapReduce ช่วยให้คุณประมวลผลข้อมูลขนาดใหญ่นี้ในลักษณะกระจายและขนานกัน แต่ MapReduce ไม่ได้ จำกัด อยู่แค่ HDFS ในฐานะ FS ทำให้ HDFS ขาดความสามารถในการอ่าน / เขียนแบบสุ่ม เหมาะสำหรับการเข้าถึงข้อมูลตามลำดับ และนี่คือจุดที่ HBase เข้ามาในภาพ เป็นฐานข้อมูล NoSQL ที่ทำงานบนคลัสเตอร์ Hadoop ของคุณและให้คุณเข้าถึงข้อมูลแบบเรียลไทม์เพื่ออ่าน / เขียนแบบสุ่ม

คุณสามารถจัดเก็บทั้งข้อมูลที่มีโครงสร้างและไม่มีโครงสร้างใน Hadoop และ HBase ได้เช่นกัน ทั้งสองอย่างนี้มีกลไกหลายอย่างในการเข้าถึงข้อมูลเช่นเชลล์และ API อื่น ๆ และ HBase เก็บข้อมูลเป็นคู่คีย์ / ค่าในรูปแบบคอลัมน์ในขณะที่ HDFS เก็บข้อมูลเป็นไฟล์แบบแบน คุณสมบัติเด่นบางประการของทั้งสองระบบ ได้แก่ :

Hadoop

  1. เหมาะสำหรับการสตรีมการเข้าถึงไฟล์ขนาดใหญ่
  2. ทำตามอุดมการณ์แบบเขียนครั้งเดียวอ่านหลายครั้ง
  3. ไม่รองรับการอ่าน / เขียนแบบสุ่ม

HBase

  1. จัดเก็บคู่คีย์ / ค่าในรูปแบบคอลัมน์ (คอลัมน์ถูกต่อกันเป็นตระกูลคอลัมน์)
  2. ให้การเข้าถึงข้อมูลจำนวนน้อยในเวลาแฝงต่ำจากภายในชุดข้อมูลขนาดใหญ่
  3. ให้โมเดลข้อมูลที่ยืดหยุ่น

Hadoop เหมาะที่สุดสำหรับการประมวลผลแบบชุดออฟไลน์ในขณะที่ HBase ใช้เมื่อคุณมีความต้องการแบบเรียลไทม์

การเปรียบเทียบแบบคล้ายคลึงจะอยู่ระหว่าง MySQL และ Ext4


แล้วการใช้ hbase เป็น datalake สำหรับข้อมูลจำนวนมาก (ไฟล์ขนาดเล็ก) ล่ะ? เขาสามารถจัดการข้อมูลได้มากเท่า hdfs หรือไม่?
Mehdi TAZI

@MehdiTAZI แน่นอน. HBase ทำงานบน HDFS จึงไม่ต้องกังวลเรื่องความสามารถในการปรับขนาด คุณต้องแน่ใจว่าคุณใช้ HBase ตามที่ควรจะใช้เพื่อให้ได้ประสิทธิภาพสูงสุด
Tariq

แล้วปัญหาการดำเนินงานล่ะ?
Mehdi TAZI

ฉันจะไม่บอกว่า HBase เป็นฝันร้ายของทีมงาน แต่ก็มีบางส่วนที่ยังมีขอบเขตของการปรับปรุงอยู่บ้างและชุมชนกำลังทำงานอย่างหนักเพื่อแก้ไขปัญหานั้น แต่นั่นเป็นเรื่องจริงสำหรับซอฟต์แวร์ใด ๆ ไม่มีเครื่องมือ / เทคโนโลยีพิสูจน์ปัญหา IMHO หากตรงกับความต้องการของคุณคุณควรทดลองใช้อย่างแน่นอน เป็นเครื่องมือที่น่าทึ่งในการจัดการความต้องการในการอ่าน / เขียนแบบเรียลไทม์แบบสุ่มของคุณ
Tariq

22

โครงการApache Hadoopประกอบด้วยโมดูลหลักสี่โมดูล

  1. Hadoop Common : ยูทิลิตี้ทั่วไปที่รองรับโมดูล Hadoop อื่น ๆ
  2. Hadoop Distributed File System (HDFS ™) : ระบบไฟล์แบบกระจายที่ให้การเข้าถึงข้อมูลแอพพลิเคชั่นปริมาณสูง
  3. Hadoop YARN : กรอบสำหรับการจัดตารางงานและการจัดการทรัพยากรคลัสเตอร์
  4. Hadoop MapReduce : ระบบฐานYARNสำหรับการประมวลผลชุดข้อมูลขนาดใหญ่แบบขนาน

HBaseเป็นฐานข้อมูลแบบกระจายที่ปรับขนาดได้ซึ่งรองรับการจัดเก็บข้อมูลที่มีโครงสร้างสำหรับตารางขนาดใหญ่ เช่นเดียวกับการBigtableใช้ประโยชน์จากพื้นที่จัดเก็บข้อมูลแบบกระจายที่จัดเตรียมโดย Google File System Apache HBase ให้ความสามารถที่เหมือน Bigtable เหนือ Hadoop และ HDFS

เมื่อใดควรใช้ HBase:

  1. หากแอปพลิเคชันของคุณมีสคีมาตัวแปรที่แต่ละแถวแตกต่างกันเล็กน้อย
  2. หากคุณพบว่าข้อมูลของคุณถูกเก็บไว้ในคอลเลกชั่นนั่นจะถูกคีย์ด้วยค่าเดียวกันทั้งหมด
  3. หากคุณต้องการการเข้าถึงแบบสุ่มอ่าน / เขียนแบบเรียลไทม์สำหรับข้อมูลขนาดใหญ่ของคุณ
  4. หากคุณต้องการการเข้าถึงข้อมูลตามคีย์เมื่อจัดเก็บหรือเรียกค้น
  5. หากคุณมีข้อมูลจำนวนมากกับคลัสเตอร์ Hadoop ที่มีอยู่

แต่ HBase มีข้อ จำกัด บางประการ

  1. ไม่สามารถใช้กับแอปพลิเคชันธุรกรรมแบบคลาสสิกหรือแม้แต่การวิเคราะห์เชิงสัมพันธ์
  2. นอกจากนี้ยังไม่สามารถทดแทน HDFS ได้อย่างสมบูรณ์เมื่อทำ MapReduce ชุดใหญ่
  3. ไม่พูดถึง SQL มีเครื่องมือเพิ่มประสิทธิภาพรองรับธุรกรรมบันทึกข้ามหรือรวม
  4. ไม่สามารถใช้กับรูปแบบการเข้าถึงที่ซับซ้อน (เช่นการรวม)

สรุป:

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

ดูสิ่งที่ควรทำและสิ่งที่ไม่ควรทำของ HBase จากบล็อกของcloudera


แล้วการใช้ hbase เป็น datalake สำหรับข้อมูลจำนวนมาก (ไฟล์ขนาดเล็ก) ล่ะ? เขาสามารถจัดการข้อมูลได้มากเท่า hdfs หรือไม่?
Mehdi TAZI

1
หากคุณกำลังสร้างไฟล์ขนาดเล็กจำนวนมากดังนั้นขึ้นอยู่กับรูปแบบการเข้าถึงที่เก็บข้อมูลประเภทอื่นอาจเหมาะสมกว่า HBase เก็บข้อมูลใน MapFiles (Indexed SequenceFiles) และเป็นตัวเลือกที่ดีหากคุณต้องการสตรีมสไตล์ MapReduce วิเคราะห์ด้วยการค้นหาแบบสุ่มเป็นครั้งคราว
Ravindra babu

4

Hadoop ใช้ระบบไฟล์แบบกระจายเช่น HDFS สำหรับจัดเก็บ bigdata แต่มีข้อ จำกัด บางประการของ HDFS และ Inorder เพื่อเอาชนะข้อ จำกัด เหล่านี้ฐานข้อมูล NoSQL เช่น HBase, Cassandra และ Mongodb เริ่มมีอยู่

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

เช่นเดียวกับ FileSystems อื่น ๆ HDFS ให้พื้นที่เก็บข้อมูลแก่เรา แต่ในลักษณะที่ทนต่อความผิดพลาดที่มีปริมาณงานสูงและความเสี่ยงต่อการสูญหายของข้อมูลที่ต่ำลง (เนื่องจากการจำลองแบบ) แต่การเป็นระบบไฟล์ HDFS ขาดการเข้าถึงการอ่านและเขียนแบบสุ่ม นี่คือที่มาของภาพ HBase เป็นที่เก็บข้อมูลขนาดใหญ่แบบกระจายปรับขนาดได้ซึ่งจำลองแบบมาจาก BigTable ของ Google Cassandra ค่อนข้างคล้ายกับ hbase


4

ทั้ง HBase และ HDFS ในภาพเดียว

ทั้ง HBase และ HDFS ในภาพเดียว

บันทึก:

ตรวจสอบปีศาจ HDFS (ไฮไลต์เป็นสีเขียว) เช่นDataNode (เซิร์ฟเวอร์ภูมิภาคที่จัดเรียง)และ NameNode ในคลัสเตอร์ที่มีทั้ง HBase และ Hadoop HDFS

HDFSเป็นระบบไฟล์แบบกระจายที่เหมาะสำหรับการจัดเก็บไฟล์ขนาดใหญ่ ซึ่งไม่ได้ให้การค้นหาบันทึกแต่ละรายการอย่างรวดเร็วในไฟล์

ในทางกลับกันHBaseสร้างขึ้นบน HDFS และให้การค้นหาบันทึกที่รวดเร็ว (และการอัปเดต) สำหรับตารางขนาดใหญ่ บางครั้งสิ่งนี้อาจเป็นจุดของความสับสนทางแนวคิด HBase ทำให้ข้อมูลของคุณอยู่ใน "StoreFiles" ที่จัดทำดัชนีไว้ภายในซึ่งมีอยู่บน HDFS สำหรับการค้นหาความเร็วสูง

ลักษณะนี้เป็นอย่างไร?

ในระดับโครงสร้างพื้นฐานเครื่องช่วยกู้แต่ละเครื่องในคลัสเตอร์มีปีศาจติดตาม

  • เซิร์ฟเวอร์ภูมิภาค - HBase
  • โหนดข้อมูล - HDFS

เครื่องทาส

การค้นหามันเร็วแค่ไหน?

HBase ประสบความสำเร็จในการค้นหาอย่างรวดเร็วบน HDFS (บางครั้งระบบไฟล์แบบกระจายอื่น ๆ ด้วย) เป็นที่เก็บข้อมูลพื้นฐานโดยใช้โมเดลข้อมูลต่อไปนี้

  • ตาราง

    • ตาราง HBase ประกอบด้วยหลายแถว
  • แถว

    • แถวใน HBase ประกอบด้วยคีย์แถวและคอลัมน์อย่างน้อยหนึ่งคอลัมน์ที่มีค่าที่เกี่ยวข้อง แถวจะเรียงตามตัวอักษรตามคีย์แถวตามที่จัดเก็บ ด้วยเหตุนี้การออกแบบคีย์แถวจึงมีความสำคัญมาก เป้าหมายคือการจัดเก็บข้อมูลในลักษณะที่แถวที่เกี่ยวข้องอยู่ใกล้กัน รูปแบบคีย์แถวทั่วไปคือโดเมนเว็บไซต์ หากคีย์แถวของคุณเป็นโดเมนคุณควรจัดเก็บไว้ในแบบย้อนกลับ (org.apache.www, org.apache.mail, org.apache.jira) วิธีนี้โดเมน Apache ทั้งหมดจะอยู่ใกล้กันในตารางแทนที่จะกระจายตามตัวอักษรตัวแรกของโดเมนย่อย
  • คอลัมน์

    • คอลัมน์ใน HBase ประกอบด้วยตระกูลคอลัมน์และตัวระบุคอลัมน์ซึ่งคั่นด้วยอักขระ: (โคลอน)
  • คอลัมน์ครอบครัว

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

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

    • เซลล์คือการรวมกันของแถวตระกูลคอลัมน์และตัวระบุคอลัมน์และมีค่าและการประทับเวลาซึ่งแสดงถึงเวอร์ชันของค่า
  • การประทับเวลา

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

ขั้นตอนการร้องขอการอ่านของลูกค้า:

ขั้นตอนการร้องขอการอ่านของลูกค้า

ตารางเมตาในภาพด้านบนคืออะไร?

ตารางเมตา

หลังจากข้อมูลทั้งหมดขั้นตอนการอ่าน HBase มีไว้สำหรับการค้นหาที่สัมผัสกับเอนทิตีเหล่านี้

  1. ขั้นแรกเครื่องสแกนจะมองหาเซลล์แถวในบล็อคแคช - แคชสำหรับอ่าน ค่าคีย์ที่อ่านล่าสุดจะถูกแคชไว้ที่นี่และใช้น้อยที่สุดจะถูกขับไล่เมื่อจำเป็นต้องใช้หน่วยความจำ
  2. จากนั้นสแกนเนอร์จะค้นหาในMemStoreซึ่งเป็นแคชการเขียนในหน่วยความจำที่มีการเขียนล่าสุด
  3. หากเครื่องสแกนไม่พบเซลล์แถวทั้งหมดใน MemStore และ Block Cache HBase จะใช้ดัชนี Block Cache และตัวกรองBloomเพื่อโหลดHFilesลงในหน่วยความจำซึ่งอาจมีเซลล์แถวเป้าหมาย

แหล่งที่มาและข้อมูลเพิ่มเติม:

  1. แบบจำลองข้อมูล HBase
  2. HBase architecute

1

อ้างอิง: http://www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop

Hadoop เป็นชื่อทั่วไปสำหรับระบบย่อยต่างๆ: 1) HDFS ระบบไฟล์แบบกระจายที่กระจายข้อมูลไปยังคลัสเตอร์ของเครื่องที่ดูแลความซ้ำซ้อน ฯลฯ 2) Map Reduce ระบบการจัดการงานที่อยู่เหนือ HDFS - เพื่อจัดการงานลดแผนที่ (และประเภทอื่น ๆ ) ที่ประมวลผลข้อมูลที่จัดเก็บบน HDFS

โดยทั่วไปหมายถึงระบบออฟไลน์ - คุณจัดเก็บข้อมูลบน HDFS และคุณสามารถประมวลผลได้โดยการเรียกใช้งาน

ในทางกลับกัน HBase ในฐานข้อมูลแบบคอลัมน์ มันใช้ HDFS เป็นที่เก็บข้อมูลซึ่งดูแลการสำรองข้อมูล \ ซ้ำซ้อน \ etc แต่เป็น "ร้านค้าออนไลน์" ซึ่งหมายความว่าคุณสามารถค้นหาเฉพาะ row \ row ฯลฯ และรับค่าได้ทันที


0

HDFS เป็นระบบไฟล์แบบกระจายบน Java ที่ช่วยให้คุณจัดเก็บข้อมูลขนาดใหญ่ในหลายโหนดในคลัสเตอร์ Hadoop ในขณะที่ HBase เป็นฐานข้อมูล NoSQL (คล้ายกับ NTFS และ MySQL)

เนื่องจากทั้ง HDFS และ HBase เก็บข้อมูลทุกประเภทเช่นโครงสร้างกึ่งโครงสร้างและไม่มีโครงสร้างในสภาพแวดล้อมแบบกระจาย

ความแตกต่างระหว่าง HDFS และ HBase

  • HBase ให้เวลาแฝงต่ำในการเข้าถึงข้อมูลจำนวนน้อยภายในชุดข้อมูลขนาดใหญ่ในขณะที่ HDFS ให้การดำเนินการแฝงสูง
  • HBase รองรับการอ่านและเขียนแบบสุ่มในขณะที่ HDFS รองรับ WORM (เขียนครั้งเดียวอ่านหลายครั้งหรือหลายครั้ง)
  • HDFS นั้นเข้าถึงได้โดยทั่วไปหรือเป็นหลักผ่านงาน MapReduce ในขณะที่ HBase เข้าถึงผ่านคำสั่งเชลล์, Java API, REST, Avro หรือ Thrift API

HDFS จัดเก็บชุดข้อมูลขนาดใหญ่ในสภาพแวดล้อมแบบกระจายและใช้ประโยชน์จากการประมวลผลแบบแบตช์กับข้อมูลนั้น

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

ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.