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
- HBase Master: Coordina el clúster HBase, gestionant la distribució de regions i la càrrega de treball.
 - RegionServer: Gestiona les operacions de lectura i escriptura per a les regions que té assignades.
 - Zookeeper: Proporciona serveis de coordinació i gestió de la configuració per al clúster HBase.
 - 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ó
- Descarregar HBase: Descarrega la versió més recent d'Apache HBase des del lloc oficial.
 - Descomprimir l'arxiu: Descomprimeix l'arxiu descarregat en el directori desitjat.
 - Configurar HBase: Edita els fitxers de configuració 
hbase-site.xmlihbase-env.shper ajustar-los a la teva configuració. - 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
- Crea una taula anomenada 
studentsamb una família de columnesinfo. - Insereix una fila amb clau 
student1i les següents columnes:info:name= "John Doe"info:age= "20"
 - Llegeix les dades de la fila 
student1i 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.
Curs de Hadoop
Mòdul 1: Introducció a Hadoop
- Què és Hadoop?
 - Visió general de l'ecosistema Hadoop
 - Hadoop vs Bases de dades tradicionals
 - Configuració de l'entorn Hadoop
 
Mòdul 2: Arquitectura de Hadoop
- Components bàsics de Hadoop
 - HDFS (Sistema de fitxers distribuït de Hadoop)
 - Marc MapReduce
 - YARN (Yet Another Resource Negotiator)
 
Mòdul 3: HDFS (Sistema de fitxers distribuït de Hadoop)
Mòdul 4: Programació MapReduce
- Introducció a MapReduce
 - Flux de treball d'una feina MapReduce
 - Escriure un programa MapReduce
 - Tècniques d'optimització de MapReduce
 
Mòdul 5: Eines de l'ecosistema Hadoop
Mòdul 6: Conceptes avançats de Hadoop
- Seguretat de Hadoop
 - Gestió de clústers de Hadoop
 - Ajust de rendiment de Hadoop
 - Serialització de dades de Hadoop
 
Mòdul 7: Aplicacions reals i estudis de cas
- Hadoop en emmagatzematge de dades
 - Hadoop en aprenentatge automàtic
 - Hadoop en processament de dades en temps real
 - Estudis de cas d'implementacions de Hadoop
 
