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.xml
ihbase-env.sh
per 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
students
amb una família de columnesinfo
. - Insereix una fila amb clau
student1
i les següents columnes:info:name
= "John Doe"info:age
= "20"
- 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.
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