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
