O HBase é um banco de dados distribuído otimizado para o desempenho de leitura. O desempenho ótimo de leitura vem da existência de um arquivo por família de coluna. Nem sempre é possível ter um arquivo por coluna durante uma gravação muito pesada. É por isso que o HBase tenta combinar todos os HFiles em um único HFile maior para reduzir o número máximo de pesquisas no disco necessárias para a leitura. Esse processo é conhecido como compactação.

A compactação é um processo pelo qual o HBase se “limpa”. Acontece de duas formas: minor compaction (menor compactação) e major compaction (maior compactação).

A menor compactação é o processo de combinar o número configurável de HFiles menores em um HFile grande. Esse processo é muito importante pois, sem ele, a leitura de linhas específicas demandaria muitas leituras de disco e com isso reduziria o desempenho geral.

Data Locality

Os conjuntos de dados no Hadoop estão armazenados no HDFS. São divididos em blocos e armazenados através de nós de dados em um cluster Hadoop. Quando uma tarefa MapReduce é executada no conjunto de dados, os mapeadores individuais irão processar os blocos (splits de entrada ou input splits). Quando os dados não estão disponíveis para o mapeador no mesmo nó, precisam então ser copiados através da rede a partir do nó de dados que possui dados para o nó de dados que está executando a tarefa de mapeador. Isso é conhecido como Data Locality.

O Data Locality no Hadoop é dividido em 3 categorias:

Data Local Data Locality

Quando os dados estão localizados no mesmo nó que o mapeador que trabalha sob os dados, são chamados de data local data locality. Neste caso, a proximidade dos dados está muito próxima da computação. Esse é o cenário mais favorável.

Intra-Rack Data Locality

É sempre possível executar o mapeador no mesmo nó que os dados devido a restrições de recursos. Nesses casos, o mapeador é executado em outro nó dentro do mesmo rack que o nó que possui dados. É uma ação conhecida como intra-rack data locality.

Inter-Rack Data Locality

Nem sempre é possível obter o data locality ou o intra-rack locality, devido a restrições de recursos. Nesses casos, o mapeador é executado em nós em racks diferentes e os dados são copiados do nó que têm dados para o nó que executa o mapeador entre racks. É uma ação conhecida como inter-rack data locality. Esse é o cenário mais favorável.

Fonte: DZone.com