HBase Java-val
1. Áttekintés
Ebben a cikkben megnézzük a HBase adatbázis Java kliens könyvtár. A HBase egy elosztott adatbázis, amely a Hadoop fájlrendszert használja adatok tárolására.
Létrehozunk egy Java példaprogramot és egy táblázatot, amelyhez hozzáadunk néhány egyszerű rekordot.
2. HBase adatstruktúra
A HBase-ben az adatok oszlopcsaládokba vannak csoportosítva. Az oszlopcsalád összes oszloptagjának ugyanaz az előtagja.
Például az oszlopok család1: minősítő1 és család1: minősítő2 mindketten a család1 oszlopcsalád. Az összes oszlopcsaládtag együtt van tárolva a fájlrendszerben.
Az oszlopcsaládon belül elhelyezhetünk egy sort, amely rendelkezik egy meghatározott minősítővel. A minősítőt egyfajta oszlopnévnek gondolhatjuk.
Lássunk egy példa rekordot a Hbase-től:
Family1: {'Qualifier1': 'row1: cell_data', 'Qualifier2': 'row2: cell_data', 'Qualifier3': 'row3: cell_data'} Family2: {'Qualifier1': 'row1: cell_data', 'Qualifier2': 'row2: celladatok', 'Qualifier3': 'row3: cell_data'}
Két oszlopcsaládunk van, mindegyiknek három minősítője van, néhány sejtadattal. Minden sorhoz tartozik egy sorkulcs - ez egy egyedi sorazonosító. A sor billentyűvel fogjuk beilleszteni, lekérni és törölni az adatokat.
3. HBase Client Maven függőség
Mielőtt csatlakoznánk a HBase-hez, hozzá kell adnunk hbase-kliens és hbase függőségek:
org.apache.hbase hbase-client $ {hbase.version} org.apache.hbase hbase $ {hbase.version}
4. A HBase beállítása
Be kell állítanunk a HBase-t, hogy egy Java kliens könyvtárból tudjunk csatlakozni hozzá. A telepítés nem tartozik a cikk hatálya alá, de online megtekintheti a HBase telepítési útmutatóit.
Ezután a HBase mesteret helyben kell elindítanunk a következő végrehajtással:
hbase master start
5. Csatlakozás a HBase-hez Java-ról
A Java-ról a HBase-hez való programozott csatlakozáshoz meg kell határoznunk egy XML konfigurációs fájlt. A HBase példányt a localhoston indítottuk el, így ezt be kell írnunk egy konfigurációs fájlba:
hbase.zookeeper.quorum localhost hbase.zookeeper.property.clientPort 2181
Most egy HBase klienst kell mutatnunk arra a konfigurációs fájlra:
Konfiguráció config = HBaseConfiguration.create (); Karakterlánc útvonala = this.getClass () .getClassLoader () .getResource ("hbase-site.xml") .getPath (); config.addResource (új elérési út (útvonal));
Ezután ellenőrizzük, hogy a HBase-hez való csatlakozás sikeres volt-e - hiba esetén a MasterNotRunningException dobni fogják:
HBaseAdmin.checkHBaseAvailable (config);
6. Adatbázis-struktúra létrehozása
Mielőtt elkezdenénk adatot hozzáadni a HBase-hez, létre kell hoznunk az adatstruktúrát a sorok beszúrásához. Hozunk létre egy táblázatot két oszlopcsaláddal:
privát TableName tábla1 = TableName.valueOf ("Table1"); privát húrcsalád1 = "Család1"; privát húrcsalád2 = "Család2";
Először is létre kell hoznunk egy kapcsolatot az adatbázissal és be kell szereznünk admin objektum, amelyet egy adatbázis-struktúra manipulálására használunk:
Csatlakozási kapcsolat = ConnectionFactory.createConnection (config) Adminisztrátor admin = connection.getAdmin ();
Ezután létrehozhatunk egy táblázatot a HTableDescriptor osztály a táblázat létrehozása() módszer a admin tárgy:
HTableDescriptor desc = új HTableDescriptor (1. táblázat); desc.addFamily (új HColumnDescriptor (család1)); desc.addFamily (új HColumnDescriptor (család2)); admin.createTable (desc);
7. Elemek hozzáadása és visszakeresése
A létrehozott táblával új adatokat adhatunk hozzá a Tedd objektum és hívás a put () módszer a asztal tárgy:
bájt [] 1. sor = Bájtok - Bájtok ("1. sor") Tedd p = új Tedd (1. sor); p.addImmutable (family1.getBytes (), qualifier1, Bytes.toBytes ("celladat")); táblázat1.put (p);
A korábban létrehozott sor lekérése az a használatával érhető el Kap osztály:
Get g = new Get (1. sor); Eredmény r = table1.get (g); bájt [] érték = r.getValue (család1.getBytes (), minősítő1);
A sor1 egy sorazonosító - használhatjuk egy adott sor lekérésére az adatbázisból. Híváskor:
Bytes.bytesToString (érték)
a visszaküldött eredmény korábban be lesz illesztve cell_data.
8. Szkennelés és szűrés
Szkennelhetjük a táblázatot, az a segítségével használhatjuk az adott selejtező összes elemét Letapogatás objektum (vegye figyelembe, hogy ResultScanner kiterjed Bezárható, ezért mindenképpen hívjon Bezárás() rajta, ha kész vagy):
Scan scan = új Scan (); scan.addColumn (család1.getBytes (), minősítő1); ResultScanner szkenner = table.getScanner (szkennelés); for (Eredmény eredménye: szkenner) {System.out.println ("Talált sor:" + eredmény); }
Ez a művelet minden sort kinyomtat a minősítő1 néhány további információval, például időbélyegzővel:
Talált sor: keyvalues = {Row1 / Family1: Qualifier1 / 1488202127489 / Put / vlen = 9 / seqid = 0}
Szűrők segítségével lekérhetünk bizonyos rekordokat.
Először két szűrőt hozunk létre. A szűrő1 megadja, hogy a szkennelési lekérdezés nagyobb elemeket fog beolvasni, mint 1. sor, és szűrő2 meghatározza, hogy csak azok a sorok érdekelnek bennünket, amelyek egyenlő minősítővel rendelkeznek minősítő1:
Filter filter1 = new PrefixFilter (1. sor); Filter filter2 = new QualifierFilter (CompareOp.GREATER_OR_EQUAL, new BinaryComparator (qualifier1)); Lista szűrők = Arrays.asList (szűrő1, szűrő2);
Ekkor eredményhalmazt kaphatunk az a-ból Letapogatás lekérdezés:
Scan scan = új Scan (); scan.setFilter (új FilterList (Operator.MUST_PASS_ALL, szűrők)); próbáld meg (ResultScanner scanner = table.getScanner (scan)) {for (Eredmény eredménye: szkenner) {System.out.println ("Talált sor:" + eredmény); }}
A FilterList elhaladtunk egy Operator.MUST_PASS_ALL - ez azt jelenti, hogy minden szűrőnek meg kell felelnie. Választhatunk egy Művelet.MUST_PASS_ONE ha csak egy szűrőt kell kielégíteni. A kapott halmazban csak a megadott szűrőknek megfelelő sorok lesznek.
9. Sorok törlése
Végül egy sor törléséhez használhatjuk a Töröl osztály:
Törlés törlés = új Törlés (1. sor); delete.addColumn (család1.getBytes (), minősítő1); table.delete (törlés);
Törölünk egy sor1 hogy belül lakik a család1.
10. Következtetés
Ebben a gyors bemutatóban a HBase adatbázissal való kommunikációra összpontosítottunk. Láttuk, hogyan lehet csatlakozni a HBase-hez a Java kliens könyvtárból, és hogyan lehet futtatni különféle alapvető műveleteket.
Mindezen példák és kódrészletek megvalósítása megtalálható a GitHub projektben; ez egy Maven projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.