HBase med Java

1. Oversikt

I denne artikkelen ser vi på HBase database Java Client-bibliotek. HBase er en distribuert database som bruker Hadoop-filsystemet til å lagre data.

Vi oppretter en Java-eksempelklient og en tabell som vi vil legge til noen enkle poster.

2. HBase datastruktur

I HBase er data gruppert i kolonnefamilier. Alle kolonnemedlemmer i en kolonnefamilie har samme prefiks.

For eksempel kolonnene familie1: kvalifisering1 og familie1: kvalifisering2 er begge medlemmer av familie1 kolonnefamilie. Alle kolonnefamiliemedlemmer er lagret sammen på filsystemet.

Inne i kolonnefamilien kan vi sette en rad som har en spesifisert kvalifisering. Vi kan tenke på en kvalifisering som et slags kolonnenavn.

La oss se et eksempel fra Hbase:

Family1: {'Qualifier1': 'row1: cell_data', 'Qualifier2': 'row2: cell_data', 'Qualifier3': 'row3: cell_data'} Family2: {'Qualifier1': 'row1: cell_data', 'Qualifier2': 'row2: cell_data', 'Qualifier3': 'row3: cell_data'}

Vi har to kolonnefamilier, hver av dem har tre kvalifikasjoner med noen celledata i. Hver rad har en radnøkkel - det er en unik radidentifikator. Vi bruker radetasten til å sette inn, hente og slette dataene.

3. HBase Client Maven Avhengighet

Før vi kobler til HBase, må vi legge til hbase-klient og hbase avhengigheter:

 org.apache.hbase hbase-client $ {hbase.version} org.apache.hbase hbase $ {hbase.version} 

4. HBase-oppsett

Vi må sette opp HBase for å kunne koble fra et Java-klientbibliotek til det. Installasjonen er utenfor omfanget av denne artikkelen, men du kan sjekke ut noen av HBase installasjonsveiledninger online.

Deretter må vi starte en HBase-mester lokalt ved å utføre:

hbase master start

5. Koble til HBase fra Java

For å koble programmatisk fra Java til HBase, må vi definere en XML-konfigurasjonsfil. Vi startet HBase-forekomsten vår på localhost, så vi må legge den inn i en konfigurasjonsfil:

  hbase.zookeeper.quorum localhost hbase.zookeeper.property.clientPort 2181 

Nå må vi peke en HBase-klient til den konfigurasjonsfilen:

Configuration config = HBaseConfiguration.create (); Strengsti = this.getClass () .getClassLoader () .getResource ("hbase-site.xml") .getPath (); config.addResource (ny sti (sti)); 

Deretter sjekker vi om en forbindelse til HBase var vellykket - i tilfelle en feil, MasterNotRunningException vil bli kastet:

HBaseAdmin.checkHBaseAvailable (config);

6. Opprette en databasestruktur

Før vi begynner å legge til data i HBase, må vi opprette datastrukturen for å sette inn rader. Vi lager en tabell med to kolonnefamilier:

private TableName table1 = TableName.valueOf ("Table1"); private String family1 = "Family1"; private String family2 = "Family2";

For det første må vi opprette en forbindelse til databasen og få admin objekt, som vi vil bruke til å manipulere en databasestruktur:

Connection connection = ConnectionFactory.createConnection (config) Admin admin = connection.getAdmin ();

Deretter kan vi lage en tabell ved å sende en forekomst av HTableDescriptor klasse til en createTable () metoden på admin gjenstand:

HTableDescriptor desc = ny HTableDescriptor (tabell1); desc.addFamily (ny HColumnDescriptor (familie1)); desc.addFamily (ny HColumnDescriptor (familie2)); admin.createTable (desc);

7. Legge til og hente elementer

Når tabellen er opprettet, kan vi legge til nye data i den ved å opprette en Sette objekt og kaller en sette() metoden på Bord gjenstand:

byte [] rad1 = Bytes.toBytes ("rad1") Sett p = ny Put (rad1); p.addImmutable (family1.getBytes (), qualifier1, Bytes.toBytes ("cell_data")); table1.put (p);

Å hente tidligere opprettet rad kan oppnås ved å bruke a klasse:

Få g = ny Get (rad1); Resultat r = tabell1.get (g); byte [] verdi = r.getValue (familie1.getBytes (), kvalifiserings1);

De rad1 er en radidentifikator - vi kan bruke den til å hente en bestemt rad fra databasen. Når du ringer:

Bytes.bytesToString (verdi)

det returnerte resultatet blir tidligere satt inn cell_data.

8. Skanning og filtrering

Vi kan skanne tabellen og hente alle elementene i en gitt kvalifikasjon ved å bruke a Skann objekt (merk deg at ResultScanner strekker Lukkbar, så husk å ringe Lukk() på det når du er ferdig):

Skann skanning = ny skanning (); scan.addColumn (family1.getBytes (), qualifier1); ResultScanner skanner = table.getScanner (skanning); for (Resultatresultat: skanner) {System.out.println ("Funnet rad:" + resultat); } 

Denne operasjonen vil skrive ut alle rader inne i a kvalifisering1 med litt tilleggsinformasjon som tidsstempel:

Rad funnet: keyvalues ​​= {Row1 / Family1: Qualifier1 / 1488202127489 / Put / vlen = 9 / seqid = 0}

Vi kan hente spesifikke poster ved å bruke filtre.

For det første lager vi to filtre. De filter1 spesifiserer at skanningsforespørsel vil hente elementer som er større enn rad1, og filter2 angir at vi bare er interessert i rader som har en kvalifisering lik kvalifisering1:

Filter filter1 = nytt prefiksfilter (rad1); Filter filter2 = ny QualifierFilter (CompareOp.GREATER_OR_EQUAL, ny BinaryComparator (kvalifikator1)); Listefiltre = Arrays.asList (filter1, filter2);

Da kan vi få et resultatsett fra a Skann spørsmål:

Skann skanning = ny skanning (); scan.setFilter (ny FilterList (Operator.MUST_PASS_ALL, filtre)); prøv (ResultScanner skanner = table.getScanner (skanning)) {for (Resultat resultat: skanner) {System.out.println ("Funnet rad:" + resultat); }}

Når du oppretter en Filterliste vi passerte en Operatør.MUST_PASS_ALL - det betyr at alle filtre må oppfylles. Vi kan velge en Operasjon.MUST_PASS_ONE hvis bare ett filter må oppfylles. I det resulterende settet vil vi bare ha rader som samsvarer med spesifiserte filtre.

9. Slette rader

Til slutt, for å slette en rad, kan vi bruke en Slett klasse:

Slett slett = nytt Slett (rad1); delete.addColumn (family1.getBytes (), qualifier1); tabell. slett (slett);

Vi sletter en rad1 som ligger inne i en familie1.

10. Konklusjon

I denne raske opplæringen fokuserte vi på å kommunisere med en HBase-database. Vi så hvordan du kobler til HBase fra Java-klientbiblioteket og hvordan du kjører forskjellige grunnleggende operasjoner.

Implementeringen av alle disse eksemplene og kodebiter finner du i GitHub-prosjektet; dette er et Maven-prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found