Introducció a Apache HBase

Apache HBase és una base de dades NoSQL distribuïda i escalable que s'executa a sobre de l'Hadoop Distributed File System (HDFS). Està dissenyada per gestionar grans quantitats de dades estructurades i semi-estructurades, proporcionant accés ràpid a les dades mitjançant operacions de lectura i escriptura en temps real.

Característiques clau d'Apache HBase

  • Model de dades basat en columnes: HBase emmagatzema dades en format de columnes, el que permet una major flexibilitat i eficiència en l'accés a les dades.
  • Escalabilitat horitzontal: Pot escalar-se fàcilment afegint més nodes al clúster.
  • Alta disponibilitat: Utilitza HDFS per a la replicació de dades, assegurant la tolerància a fallades.
  • Accés en temps real: Proporciona operacions de lectura i escriptura en temps real, a diferència de Hadoop que està més orientat a processament per lots.

Arquitectura d'Apache HBase

Components principals

  1. HBase Master: Coordina el clúster HBase, gestionant la distribució de regions i la càrrega de treball.
  2. RegionServer: Gestiona les operacions de lectura i escriptura per a les regions que té assignades.
  3. Zookeeper: Proporciona serveis de coordinació i gestió de la configuració per al clúster HBase.
  4. HDFS: Emmagatzema les dades de HBase de manera distribuïda.

Estructura de dades

  • Taula: Conjunt de files, similar a una taula en una base de dades relacional.
  • Fila: Identificada per una clau de fila única.
  • Família de columnes: Agrupació de columnes que comparteixen una configuració comuna.
  • Columna: Identificada per una combinació de família de columnes i qualificatiu de columna.
  • Cel·la: Unitat bàsica d'emmagatzematge, identificada per una clau de fila, família de columnes, qualificatiu de columna i marca de temps.

Instal·lació i configuració d'Apache HBase

Requisits previs

  • Java JDK 8 o superior
  • Hadoop instal·lat i configurat

Passos per a la instal·lació

  1. Descarregar HBase: Descarrega la versió més recent d'Apache HBase des del lloc oficial.
  2. Descomprimir l'arxiu: Descomprimeix l'arxiu descarregat en el directori desitjat.
  3. Configurar HBase: Edita els fitxers de configuració hbase-site.xml i hbase-env.sh per ajustar-los a la teva configuració.
  4. Iniciar HBase: Executa els scripts d'inici per posar en marxa el clúster HBase.

Exemple de configuració bàsica (hbase-site.xml)

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://localhost:9000/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>localhost</value>
  </property>
</configuration>

Operacions bàsiques amb HBase

Crear una taula

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.TableName;

public class CreateTable {
    public static void main(String[] args) throws Exception {
        org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
        try (Connection connection = ConnectionFactory.createConnection(config);
             Admin admin = connection.getAdmin()) {

            HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("my_table"));
            tableDescriptor.addFamily(new HColumnDescriptor("my_family"));

            admin.createTable(tableDescriptor);
            System.out.println("Taula creada amb èxit.");
        }
    }
}

Inserir dades

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

public class InsertData {
    public static void main(String[] args) throws Exception {
        org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
        try (Connection connection = ConnectionFactory.createConnection(config);
             Table table = connection.getTable(TableName.valueOf("my_table"))) {

            Put put = new Put(Bytes.toBytes("row1"));
            put.addColumn(Bytes.toBytes("my_family"), Bytes.toBytes("my_column"), Bytes.toBytes("my_value"));

            table.put(put);
            System.out.println("Dades inserides amb èxit.");
        }
    }
}

Llegir dades

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.client.Result;

public class ReadData {
    public static void main(String[] args) throws Exception {
        org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
        try (Connection connection = ConnectionFactory.createConnection(config);
             Table table = connection.getTable(TableName.valueOf("my_table"))) {

            Get get = new Get(Bytes.toBytes("row1"));
            Result result = table.get(get);
            byte[] value = result.getValue(Bytes.toBytes("my_family"), Bytes.toBytes("my_column"));

            System.out.println("Valor llegit: " + Bytes.toString(value));
        }
    }
}

Exercicis pràctics

Exercici 1: Crear i gestionar una taula HBase

  1. Crea una taula anomenada students amb una família de columnes info.
  2. Insereix una fila amb clau student1 i les següents columnes:
    • info:name = "John Doe"
    • info:age = "20"
  3. Llegeix les dades de la fila student1 i mostra-les per pantalla.

Solució

// Crear la taula
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("students"));
tableDescriptor.addFamily(new HColumnDescriptor("info"));
admin.createTable(tableDescriptor);

// Inserir dades
Put put = new Put(Bytes.toBytes("student1"));
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("John Doe"));
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes("20"));
table.put(put);

// Llegir dades
Get get = new Get(Bytes.toBytes("student1"));
Result result = table.get(get);
byte[] name = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
byte[] age = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age"));
System.out.println("Nom: " + Bytes.toString(name));
System.out.println("Edat: " + Bytes.toString(age));

Conclusió

Apache HBase és una eina poderosa per gestionar grans volums de dades amb necessitats d'accés en temps real. La seva integració amb l'ecosistema Hadoop i la seva capacitat d'escalabilitat horitzontal la fan ideal per a aplicacions que requereixen alta disponibilitat i rendiment. Amb els coneixements adquirits en aquest mòdul, ara estàs preparat per començar a treballar amb HBase i explorar les seves capacitats avançades.

© Copyright 2024. Tots els drets reservats