HBase ve Hadoop / HDFS arasındaki fark


130

Bu biraz saf bir soru ama NoSQL paradigmasında yeniyim ve bu konuda pek bir şey bilmiyorum. Yani birisi HBase ve Hadoop arasındaki farkı anlamama yardımcı olabilirse veya farkı anlamama yardımcı olabilecek bazı ipuçları verebilirse.

Şimdiye kadar biraz araştırma yaptım ve doğruladım. Anladığım kadarıyla Hadoop, HDFS'deki ham veri yığınlarıyla (dosyalar) çalışmak için bir çerçeve sağlar ve HBase, temelde ham veri yığınları yerine yapılandırılmış verilerle çalışan Hadoop'un üzerindeki veritabanı motorudur. Hbase, tıpkı SQL gibi HDFS üzerinde mantıksal bir katman sağlar. Doğru mu?

Pls beni düzeltmekten çekinmeyin.

Teşekkürler.


7
Belki de soru başlığı "HBase ve HDFS arasındaki fark" olmalıdır?
Matt Ball

Yanıtlar:


248

Hadoop temelde 3 şeydir, bir FS (Hadoop Dağıtılmış Dosya Sistemi), bir hesaplama çerçevesi (MapReduce) ve bir yönetim köprüsü (Yine Bir Başka Kaynak Müzakereci). HDFS, büyük miktarda veriyi dağıtılmış (daha hızlı okuma / yazma erişimi sağlar) ve yedekli (daha iyi kullanılabilirlik sağlar) bir şekilde depolamanıza olanak tanır. Ve MapReduce, bu devasa verileri dağıtılmış ve paralel bir şekilde işlemenizi sağlar. Ancak MapReduce yalnızca HDFS ile sınırlı değildir. FS olarak, HDFS rastgele okuma / yazma özelliğinden yoksundur. Sıralı veri erişimi için iyidir. Ve HBase burada devreye giriyor. Hadoop kümenizin üzerinde çalışan ve verilerinize rastgele gerçek zamanlı okuma / yazma erişimi sağlayan bir NoSQL veritabanıdır.

Hem yapılandırılmış hem de yapılandırılmamış verileri Hadoop ve HBase'de de depolayabilirsiniz. Her ikisi de, verilere erişmek için kabuk ve diğer API'ler gibi birden fazla mekanizma sağlar. Ve HBase, verileri sütun biçiminde anahtar / değer çiftleri olarak saklarken, HDFS verileri düz dosyalar olarak depolar. Her iki sistemin de göze çarpan özelliklerinden bazıları şunlardır:

Hadoop

  1. Büyük dosyaların akış erişimi için optimize edilmiştir.
  2. Bir kez yaz-çok-oku ideolojisini takip eder.
  3. Rastgele okuma / yazmayı desteklemez.

HBase

  1. Anahtar / değer çiftlerini sütun biçiminde saklar (sütunlar, sütun aileleri olarak bir araya getirilir).
  2. Büyük bir veri kümesinden küçük miktarda veriye düşük gecikmeli erişim sağlar.
  3. Esnek veri modeli sağlar.

Hadoop en çok çevrimdışı toplu işleme gibi şeyler için uygundur, HBase ise gerçek zamanlı ihtiyaçlarınız olduğunda kullanılır.

Benzer bir karşılaştırma MySQL ve Ext4 arasında olacaktır.


hbase'i çok büyük miktarda veri (küçük dosyalar) için datalake olarak kullanmaya ne dersiniz? hdfs kadar veriyi yönetebilir mi?
Mehdi TAZI

@MehdiTAZI kesinlikle. HBase, HDFS'nin üzerinde çalışır, bu nedenle ölçeklenebilirlik konusunda endişelenmenize gerek yoktur. maksimum performans elde etmek için kullanılması gerektiği için HBase kullandığınızdan emin olmanız yeterlidir
Tariq

operasyonel sorunlar ne olacak?
Mehdi TAZI

HBase'in operasyon ekibinin kabusu olduğunu söyleyemem, ancak hala bazı iyileştirme kapsamlarının olduğu birkaç alanı var ve topluluk bunu düzeltmek için gerçekten çok çalışıyor. Ancak bu, herhangi bir yazılım için geçerlidir. IMHO sorunu kanıtlama aracı / teknolojisi yoktur. Gereksinimlerinize uyuyorsa, kesinlikle denemelisiniz. Rastgele gerçek zamanlı okuma / yazma ihtiyaçlarınızı karşılayan bir labirent aracıdır.
Tarık

22

Apache Hadoop projesi dört temel modül içerir

  1. Hadoop Common : Diğer Hadoop modüllerini destekleyen yaygın yardımcı programlar.
  2. Hadoop Dağıtılmış Dosya Sistemi (HDFS ™) : Uygulama verilerine yüksek verimli erişim sağlayan dağıtılmış bir dosya sistemi.
  3. Hadoop YARN : İş planlaması ve küme kaynak yönetimi için bir çerçeve.
  4. Hadoop MapReduce : Büyük veri kümelerinin paralel işlenmesi için YARN tabanlı bir sistem.

HBase , büyük tablolar için yapılandırılmış veri depolamayı destekleyen ölçeklenebilir, dağıtılmış bir veritabanıdır. BigtableGoogle Dosya Sistemi tarafından sağlanan dağıtılmış veri depolamasından yararlandığı gibi , Apache HBase de Hadoop ve HDFS'nin yanı sıra Bigtable benzeri yetenekler sağlar.

HBase ne zaman kullanılır:

  1. Uygulamanızda her satırın biraz farklı olduğu bir değişken şeması varsa
  2. Verilerinizin koleksiyonlarda depolandığını fark ederseniz, hepsi aynı değerde anahtarlanır
  3. Büyük Verilerinize rastgele, gerçek zamanlı okuma / yazma erişimine ihtiyacınız varsa.
  4. Verileri depolarken veya alırken anahtar tabanlı erişime ihtiyacınız varsa.
  5. Mevcut Hadoop kümesiyle büyük miktarda veriniz varsa

Ancak HBase'nin bazı sınırlamaları vardır

  1. Klasik işlem uygulamaları ve hatta ilişkisel analitik için kullanılamaz.
  2. Ayrıca, büyük toplu MapReduce işlemi yaparken HDFS'nin tam bir ikamesi değildir.
  3. SQL'den bahsetmez, bir optimize ediciye sahip değildir, kayıtlar arası işlemleri veya birleştirmeleri desteklemez.
  4. Karmaşık erişim düzenleriyle (birleştirmeler gibi) kullanılamaz

Özet:

Verileri anahtara göre yüklerken, anahtara (veya aralığa) göre veri ararken, anahtara göre veri sunarken, verileri anahtara göre sorgularken veya bir şemaya uymayan verileri satıra göre saklarken HBase'i düşünün.

Cloudera blogundan Do's and Don't of HBase'e göz atın .


hbase'i çok büyük miktarda veri (küçük dosyalar) için datalake olarak kullanmaya ne dersiniz? hdfs kadar veriyi yönetebilir mi?
Mehdi TAZI

1
Çok sayıda küçük dosya oluşturuyorsanız, erişim modeline bağlı olarak farklı bir depolama türü daha uygun olabilir.HBase, verileri MapFiles (dizine alınmış SequenceFiles) olarak depolar ve MapReduce tarzı akış yapmanız gerekiyorsa iyi bir seçimdir. ara sıra rastgele bakışla analizler
Ravindra babu

4

Hadoop, büyük verileri depolamak için dağıtılmış dosya sistemi yani HDFS kullanır. Ancak bu sınırlamaların üstesinden gelmek için HDFS ve Inorder'ın belirli Sınırlamaları vardır, HBase, Cassandra ve Mongodb gibi NoSQL veritabanları ortaya çıkmıştır.

Hadoop yalnızca toplu işlem gerçekleştirebilir ve verilere yalnızca sıralı bir şekilde erişilir. Bu, bir kişinin en basit işler için bile tüm veri kümesini araştırması gerektiği anlamına gelir. İşlendiğinde büyük bir veri kümesi, sıralı olarak da işlenmesi gereken başka bir büyük veri kümesiyle sonuçlanır. Bu noktada, herhangi bir veri noktasına tek bir zaman biriminde erişmek için yeni bir çözüme ihtiyaç vardır (rastgele erişim).

Diğer tüm FileSystems gibi, HDFS de bize depolama sağlar, ancak hataya dayanıklı bir şekilde yüksek verim ve daha düşük veri kaybı riski (çoğaltma nedeniyle). Ancak bir Dosya Sistemi olan HDFS, rastgele okuma ve yazma erişiminden yoksundur. HBase burada devreye giriyor. Google'ın BigTable'ına göre modellenmiş, dağıtılmış, ölçeklenebilir, büyük bir veri deposu. Cassandra biraz hbase'e benziyor.


4

Tek resimde hem HBase hem de HDFS

Tek resimde hem HBase hem de HDFS

Not:

Hem HBase hem de Hadoop HDFS'ye sahip olan küme içindeki DataNode (yan yana yerleştirilmiş Bölge Sunucuları) ve NameNode gibi HDFS iblislerini (yeşil renkle vurgulanmış) kontrol edin

HDFS , büyük dosyaların depolanması için çok uygun olan dağıtılmış bir dosya sistemidir. dosyalarda hızlı bireysel kayıt aramaları sağlamaz.

Öte yandan HBase , HDFS'nin üzerine inşa edilmiştir ve büyük tablolar için hızlı kayıt aramaları (ve güncellemeleri) sağlar. Bu bazen kavramsal bir kafa karışıklığı noktası olabilir. HBase, verilerinizi dahili olarak yüksek hızlı aramalar için HDFS'de bulunan dizinlenmiş "StoreFiles" dosyalarına koyar.

Bu nasıl görünüyor?

Altyapı düzeyinde, kümedeki her merhem makinesinde aşağıdaki şeytanlar var

  • Bölge Sunucusu - HBase
  • Veri Düğümü - HDFS

Köle makinesi

Aramalarda ne kadar hızlı?

HBase, aşağıdaki veri modelini kullanarak temel depolama alanı olarak HDFS'de (bazen diğer dağıtılmış dosya sistemlerinde de) hızlı aramalar gerçekleştirir

  • tablo

    • Bir HBase tablosu birden çok satırdan oluşur.
  • Kürek çekmek

    • HBase'deki bir satır, bir satır anahtarından ve bunlarla ilişkili değerlere sahip bir veya daha fazla sütundan oluşur. Satırlar, depolanırken satır anahtarına göre alfabetik olarak sıralanır. Bu nedenle satır anahtarının tasarımı çok önemlidir. Amaç, verileri ilgili satırlar birbirine yakın olacak şekilde depolamaktır. Yaygın bir satır anahtarı kalıbı, bir web sitesi alanıdır. Satır anahtarlarınız etki alanıysa, bunları muhtemelen ters olarak depolamalısınız (org.apache.www, org.apache.mail, org.apache.jira). Bu şekilde, tüm Apache etki alanları, alt etki alanının ilk harfine göre yayılmak yerine tabloda birbirine yakındır.
  • sütun

    • HBase'deki bir sütun, bir sütun ailesi ve bir: (iki nokta üst üste) karakteriyle ayrılmış bir sütun niteleyiciden oluşur.
  • Sütun Ailesi

    • Sütun aileleri, genellikle performans nedenleriyle bir dizi sütunu ve değerlerini fiziksel olarak birlikte konumlandırır. Her sütun ailesinin, değerlerinin bellekte önbelleğe alınması gerekip gerekmediği, verilerinin nasıl sıkıştırıldığı veya satır anahtarlarının kodlandığı ve diğerleri gibi bir dizi depolama özelliği vardır. Bir tablodaki her satır aynı sütun ailelerine sahiptir, ancak belirli bir satır belirli bir sütun ailesinde hiçbir şey depolamayabilir.
  • Sütun Niteleyici

    • Belirli bir veri parçası için dizin sağlamak üzere bir sütun ailesine bir sütun niteleyici eklenir. Bir sütun ailesi içeriği verildiğinde, bir sütun niteleyici content: html olabilir ve diğeri content: pdf olabilir. Sütun aileleri tablo oluşturmada sabitlenmiş olsa da, sütun niteleyicileri değiştirilebilir ve satırlar arasında büyük ölçüde farklılık gösterebilir.
  • Hücre

    • Hücre, satır, sütun ailesi ve sütun niteleyicinin bir kombinasyonudur ve değerin sürümünü temsil eden bir değer ve bir zaman damgası içerir.
  • Zaman Damgası

    • Her değerin yanında bir zaman damgası yazılır ve bir değerin belirli bir sürümü için tanımlayıcıdır. Varsayılan olarak, zaman damgası, verilerin yazıldığı sırada Bölge Sunucusunda geçen zamanı temsil eder, ancak hücreye veri koyduğunuzda farklı bir zaman damgası değeri belirtebilirsiniz.

İstemci okuma isteği akışı:

İstemci okuma isteği akışı

Yukarıdaki resimdeki meta tablo nedir?

meta tablo

Tüm bilgilerden sonra, HBase okuma akışı, bu varlıklara dokunmak için arama içindir.

  1. İlk olarak, tarayıcı Blok önbelleğinde - okuma önbelleğinde Satır hücrelerini arar . En Son Okunan Anahtar Değerler burada önbelleğe alınır ve En Son Kullanılanlar bellek gerektiğinde çıkarılır.
  2. Ardından, tarayıcı en son yazımları içeren bellekteki yazma önbelleği olan MemStore'a bakar .
  3. Tarayıcı, MemStore ve Blok Önbelleğindeki tüm satır hücrelerini bulamazsa, HBase, HFile'ları belleğe yüklemek için, hedef satır hücrelerini içerebilecek şekilde Blok Önbellek dizinlerini ve çiçek filtrelerini kullanır .

kaynaklar ve daha fazla bilgi:

  1. HBase veri modeli
  2. HBase mimarisi

1

Referans: http://www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop

Hadoop, birkaç alt sistem için genel bir addır: 1) HDFS. Verileri yedeklilik vb. İle ilgilenen bir makine kümesine dağıtan dağıtılmış bir dosya sistemi 2) Harita Azaltma. HDFS üzerinde depolanan verileri işleyen harita azaltma (ve diğer türler) işlerini yönetmek için HDFS üzerine bir iş yönetim sistemi.

Temel olarak, onun çevrimdışı bir sistem olduğu anlamına gelir - verileri HDFS'de depolarsınız ve işleri çalıştırarak işleyebilirsiniz.

HBase ise sütun tabanlı bir veritabanında. Depolama olarak HDFS kullanır - yedekleme \ yedeklilik \ vb. İle ilgilenir, ancak bir "çevrimiçi mağaza" - yani belirli satırlar vb. İçin sorgulayabilir ve anında bir değer elde edebilirsiniz.


0

HDFS, büyük verileri bir Hadoop kümesindeki birden çok düğümde depolamanıza olanak tanıyan Java tabanlı dağıtılmış bir dosya sistemidir. HBase ise bir NoSQL veritabanıdır (NTFS ve MySQL'e benzer).

Hem HDFS hem de HBase, yapılandırılmış, yarı yapılandırılmış ve yapılandırılmamış gibi her türlü veriyi dağıtılmış bir ortamda depolar.

HDFS ve HBase arasındaki farklar

  • HBase, büyük veri kümelerindeki küçük miktardaki verilere düşük gecikmeli erişim sağlarken, HDFS yüksek gecikmeli işlemler sağlar.
  • HBase rastgele okumayı ve yazmayı desteklerken, HDFS WORM'yi (Bir Kez Yaz, Birçok Kez Oku) destekler.
  • HDFS'ye temelde veya öncelikli olarak MapReduce işleri aracılığıyla erişilirken, HBase'ye kabuk komutları, Java API, REST, Avro veya Thrift API aracılığıyla erişilir.

HDFS, büyük veri kümelerini dağıtılmış bir ortamda depolar ve bu veriler üzerinde toplu işlemeyi kullanır.

HBase, verileri her bir sütunun birlikte depolandığı sütun odaklı bir şekilde saklarken, okuma gerçek zamanlı işlemden yararlanarak daha hızlı hale gelir.

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.