Diferença entre HBase e Hadoop / HDFS

130

Essa é uma pergunta ingênua, mas eu sou novo no paradigma NoSQL e não sei muito sobre isso. Portanto, se alguém puder me ajudar a entender claramente a diferença entre o HBase e o Hadoop ou se fornecer alguns indicadores que possam me ajudar a entender a diferença.

Até agora, eu fiz algumas pesquisas e acc. no meu entender, o Hadoop fornece uma estrutura para trabalhar com grande parte dos dados (arquivos) no HDFS e o HBase é um mecanismo de banco de dados acima do Hadoop, que basicamente trabalha com dados estruturados em vez de grandes quantidades de dados brutos. O Hbase fornece uma camada lógica sobre o HDFS, assim como o SQL. Está correto?

Pls sinta-se livre para me corrigir.

Obrigado.

Dhaval Shah
fonte
7
Talvez o título da pergunta deva ser "Diferença entre HBase e HDFS", então?
Matt Bola

Respostas:

248

O Hadoop é basicamente três coisas, um FS (Hadoop Distributed File System), uma estrutura de computação (MapReduce) e uma ponte de gerenciamento (Yet Another Resource Negotiator). O HDFS permite armazenar grandes quantidades de dados de maneira distribuída (fornece acesso de leitura / gravação mais rápido) e redundante (fornece melhor disponibilidade). E o MapReduce permite processar esses enormes dados de maneira distribuída e paralela. Mas o MapReduce não se limita apenas ao HDFS. Sendo um FS, o HDFS não possui o recurso de leitura / gravação aleatória. É bom para acesso sequencial a dados. E é aí que o HBase entra em cena. É um banco de dados NoSQL que é executado no topo do cluster Hadoop e fornece acesso aleatório de leitura / gravação em tempo real aos seus dados.

Você pode armazenar dados estruturados e não estruturados no Hadoop e no HBase também. Ambos fornecem vários mecanismos para acessar os dados, como o shell e outras APIs. E, o HBase armazena dados como pares de chave / valor de maneira colunar, enquanto o HDFS armazena dados como arquivos simples. Algumas das principais características de ambos os sistemas são:

Hadoop

  1. Otimizado para acesso de streaming a arquivos grandes.
  2. Segue a ideologia de escrever uma vez e ler muitos.
  3. Não suporta leitura / gravação aleatória.

HBase

  1. Armazena pares de chave / valor de maneira colunar (as colunas são agrupadas como famílias de colunas).
  2. Fornece acesso de baixa latência a pequenas quantidades de dados de um grande conjunto de dados.
  3. Fornece modelo de dados flexível.

O Hadoop é mais adequado para o processamento de lotes offline, enquanto o HBase é usado quando você precisa em tempo real.

Uma comparação análoga seria entre MySQL e Ext4.

Tariq
fonte
que tal usar o hbase como datalake para grandes quantidades de dados (arquivos pequenos)? ele pode gerenciar tantos dados quanto hdfs?
Mehdi TAZI
@MehdiTAZI definitivamente. O HBase é executado em cima do HDFS, portanto, não se preocupe com a escalabilidade. você só precisa ter certeza de que você está usando HBase como ele deve ser usado, a fim de obter o máximo desempenho
Tariq
e quanto a questões operacionais?
Mehdi TAZI
Eu não diria que o HBase é o pesadelo da equipe de operações, mas ele tem algumas áreas em que ainda há algum escopo de melhoria, e a comunidade está trabalhando muito para corrigir isso. Mas isso é verdade para qualquer software. Não há ferramenta à prova de problemas / tecnologia IMHO. Se ele se encaixa nos seus requisitos, você definitivamente deve experimentá-lo. É uma ferramenta de labirinto para lidar com suas necessidades aleatórias de leitura / gravação em tempo real.
Tariq
22

O projeto Apache Hadoop inclui quatro módulos principais

  1. Hadoop Comum : os utilitários comuns que oferecem suporte aos outros módulos do Hadoop.
  2. Sistema de arquivos distribuídos do Hadoop (HDFS ™) : um sistema de arquivos distribuídos que fornece acesso de alta taxa de transferência aos dados do aplicativo.
  3. Hadoop YARN : Uma estrutura para agendamento de tarefas e gerenciamento de recursos de cluster.
  4. Hadoop MapReduce : um sistema baseado em YARN para processamento paralelo de grandes conjuntos de dados.

HBase é um banco de dados distribuído e escalável que suporta armazenamento de dados estruturados para tabelas grandes. Assim como Bigtableaproveita o armazenamento de dados distribuído fornecido pelo Google File System, o Apache HBase fornece recursos do tipo Bigtable sobre o Hadoop e o HDFS.

Quando usar o HBase:

  1. Se seu aplicativo tiver um esquema variável em que cada linha seja ligeiramente diferente
  2. Se você achar que seus dados estão armazenados em coleções, tudo será digitado no mesmo valor
  3. Se você precisar de acesso aleatório e de leitura / gravação em tempo real ao seu Big Data.
  4. Se você precisar de acesso baseado em chave aos dados ao armazenar ou recuperar.
  5. Se você tiver uma quantidade enorme de dados com o cluster Hadoop existente

Mas o HBase tem algumas limitações

  1. Ele não pode ser usado para aplicativos transacionais clássicos nem para análises relacionais.
  2. Também não é um substituto completo do HDFS ao executar o MapReduce em lotes grandes.
  3. Ele não fala SQL, possui um otimizador, suporta transações entre registros ou associações.
  4. Não pode ser usado com padrões de acesso complicados (como junções)

Resumo:

Considere o HBase quando estiver carregando dados por chave, pesquisando dados por chave (ou intervalo), servindo dados por chave, consultando dados por chave ou ao armazenar dados por linha que não estejam em conformidade com um esquema.

Veja o que fazer e o que não fazer do HBase no blog cloudera .

Ravindra babu
fonte
que tal usar o hbase como datalake para grandes quantidades de dados (arquivos pequenos)? ele pode gerenciar tantos dados quanto hdfs?
Mehdi TAZI
1
Se você estiver produzindo muitos arquivos pequenos, dependendo do padrão de acesso, um tipo diferente de armazenamento poderá ser mais apropriado. O HBase armazena dados no MapFiles (SequenceFiles indexados) e é uma boa opção se você precisar executar o estilo de MapReduce analisa com ocasional pesquisa aleatória
Ravindra babu
4

O Hadoop usa o sistema de arquivos distribuído, ou seja, o HDFS para armazenar dados grandes. Mas existem algumas limitações do HDFS e do Inorder para superar essas limitações, os bancos de dados NoSQL, como HBase, Cassandra e Mongodb, surgiram.

O Hadoop pode executar apenas o processamento em lote, e os dados serão acessados ​​apenas de maneira sequencial. Isso significa que é preciso pesquisar em todo o conjunto de dados, mesmo nos trabalhos mais simples. Um grande conjunto de dados quando processado resulta em outro grande conjunto de dados, que também deve ser processado sequencialmente. Nesse ponto, é necessária uma nova solução para acessar qualquer ponto de dados em uma única unidade de tempo (acesso aleatório).

Como todos os outros sistemas de arquivos, o HDFS fornece armazenamento, mas de maneira tolerante a falhas, com alto rendimento e menor risco de perda de dados (devido à replicação) .Mas, como sistema de arquivos, o HDFS não possui acesso aleatório de leitura e gravação. É aqui que o HBase entra em cena. É um armazenamento de big data distribuído, escalável e modelado com base no BigTable do Google. Cassandra é um pouco semelhante ao hbase.

Praveen Mulchandani
fonte
4

HBase e HDFS em uma imagem

HBase e HDFS em uma imagem

Nota:

Verifique os demônios do HDFS (destacados em verde) como DataNode (servidores de região colocados) e NameNode no cluster com o HDase HBase e Hadoop

HDFS é um sistema de arquivos distribuído adequado para o armazenamento de arquivos grandes. que não fornece pesquisas rápidas de registros individuais em arquivos.

O HBase , por outro lado, é construído sobre o HDFS e fornece pesquisas rápidas de registros (e atualizações) para tabelas grandes. Às vezes, isso pode ser um ponto de confusão conceitual. O HBase coloca seus dados internamente em "StoreFiles" indexados que existem no HDFS para pesquisas de alta velocidade.

Como isso se parece?

Bem, no nível da infraestrutura, cada máquina de salve no cluster tem os seguintes demônios

  • Servidor de região - HBase
  • Nó de dados - HDFS

Máquina escrava

Como é rápido com as pesquisas?

O HBase consegue pesquisas rápidas no HDFS (às vezes também em outros sistemas de arquivos distribuídos) como armazenamento subjacente, usando o seguinte modelo de dados

  • Tabela

    • Uma tabela HBase consiste em várias linhas.
  • Linha

    • Uma linha no HBase consiste em uma chave de linha e uma ou mais colunas com valores associados a elas. As linhas são classificadas em ordem alfabética pela chave da linha à medida que são armazenadas. Por esse motivo, o design da chave de linha é muito importante. O objetivo é armazenar dados de maneira que as linhas relacionadas se aproximem. Um padrão de chave de linha comum é um domínio de site. Se suas chaves de linha são domínios, você provavelmente deve armazená-las ao contrário (org.apache.www, org.apache.mail, org.apache.jira). Dessa forma, todos os domínios do Apache estão próximos um do outro na tabela, em vez de serem espalhados com base na primeira letra do subdomínio.
  • Coluna

    • Uma coluna no HBase consiste em uma família de colunas e um qualificador de coluna, delimitados por um caractere: (dois pontos).
  • Família de colunas

    • As famílias de colunas colocam fisicamente um conjunto de colunas e seus valores, geralmente por motivos de desempenho. Cada família de colunas possui um conjunto de propriedades de armazenamento, como se seus valores devem ser armazenados em cache na memória, como seus dados são compactados ou suas chaves de linha são codificadas, entre outras. Cada linha de uma tabela possui as mesmas famílias de colunas, embora uma determinada linha possa não armazenar nada em uma determinada família de colunas.
  • Qualificador de coluna

    • Um qualificador de coluna é adicionado a uma família de colunas para fornecer o índice para um dado pedaço de dados. Dado o conteúdo da família de colunas, um qualificador de coluna pode ser content: html e outro pode ser content: pdf. Embora as famílias de colunas sejam fixas na criação da tabela, os qualificadores de coluna são mutáveis ​​e podem diferir bastante entre as linhas.
  • Célula

    • Uma célula é uma combinação da linha, família da coluna e qualificador da coluna e contém um valor e um carimbo de data / hora, que representa a versão do valor.
  • Registro de data e hora

    • Um registro de data e hora é escrito ao lado de cada valor e é o identificador para uma determinada versão de um valor. Por padrão, o registro de data e hora representa a hora no RegionServer em que os dados foram gravados, mas você pode especificar um valor diferente para registrar os dados na célula.

Fluxo de solicitação de leitura do cliente:

Fluxo de solicitação de leitura do cliente

Qual é a meta tabela na imagem acima?

meta tabela

Após todas as informações, o fluxo de leitura do HBase é para consulta que toca nessas entidades

  1. Primeiro, o scanner procura as células Row no cache do bloco - o cache de leitura. Os valores-chave de leitura recente são armazenados em cache aqui e Menos usados ​​recentemente são removidos quando é necessária memória.
  2. Em seguida, o scanner procura na MemStore , o cache de gravação na memória que contém as gravações mais recentes.
  3. Se o scanner não encontrar todas as células da linha no MemStore e no Block Cache, o HBase usará os índices de cache do bloco e os filtros de bloom para carregar HFiles na memória, que pode conter as células da linha de destino.

fontes e mais informações:

  1. Modelo de dados HBase
  2. HBase architecute
mrsrinivas
fonte
1

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

Hadoop é um nome geral para vários subsistemas: 1) HDFS. Um sistema de arquivos distribuídos que distribui dados através de um cluster de máquinas, cuidando da redundância, etc. 2) Mapa Reduzir. Um sistema de gerenciamento de tarefas sobre o HDFS - para gerenciar tarefas de redução de mapa (e outros tipos) que processam os dados armazenados no HDFS.

Basicamente, significa um sistema offline - você armazena dados no HDFS e pode processá-los executando trabalhos.

HBase, por outro lado, em um banco de dados baseado em coluna. Ele usa o HDFS como armazenamento - que cuida de backup \ redundência \ etc, mas é uma "loja on-line" - o que significa que você pode consultá-lo por linhas \ linhas etc específicas e obter um valor imediato.

Jiaji Li
fonte
0

O HDFS é um sistema de arquivos distribuído baseado em Java que permite armazenar grandes dados em vários nós em um cluster Hadoop. Enquanto o HBase é um banco de dados NoSQL (semelhante ao NTFS e MySQL).

Como o HDFS e o HBase armazenam todos os tipos de dados, como estruturados, semiestruturados e não estruturados em um ambiente distribuído.

Diferenças entre HDFS e HBase

  • O HBase fornece acesso de baixa latência a pequenas quantidades de dados em grandes conjuntos de dados, enquanto o HDFS fornece operações de alta latência.
  • O HBase suporta leitura e gravação aleatória, enquanto o HDFS suporta WORM (Escreva uma vez Leia várias ou Várias vezes).
  • O HDFS é acessado basicamente ou principalmente por meio de tarefas do MapReduce, enquanto o HBase é acessado por comandos de shell, API Java, REST, Avro ou API Thrift.

O HDFS armazena grandes conjuntos de dados em um ambiente distribuído e aproveita o processamento em lote nesses dados.

Enquanto o HBase armazena dados de maneira orientada a colunas, onde cada coluna é armazenada em conjunto, para que a leitura se torne mais rápida, alavancando o processamento em tempo real.

insira a descrição da imagem aqui

Ghulam Dastgeer
fonte