From eb3f3accbc14e8f86273cdca1a119e8dc23347e6 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Fri, 24 Feb 2017 10:09:21 +0100 Subject: [PATCH 1/9] BAEL-655 add client --- hbase/pom.xml | 15 ++ .../baeldung/hbase/HbaseClientExample.java | 7 + .../main/java/org/baeldung/hbase/Sample.java | 213 ++++++++++++++++++ hbase/src/main/resources/hbase-site.xml | 0 4 files changed, 235 insertions(+) create mode 100644 hbase/pom.xml create mode 100644 hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java create mode 100644 hbase/src/main/java/org/baeldung/hbase/Sample.java create mode 100644 hbase/src/main/resources/hbase-site.xml diff --git a/hbase/pom.xml b/hbase/pom.xml new file mode 100644 index 000000000000..2ecaf4697cbb --- /dev/null +++ b/hbase/pom.xml @@ -0,0 +1,15 @@ + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + hbase + + + \ No newline at end of file diff --git a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java new file mode 100644 index 000000000000..d80e7ef2617a --- /dev/null +++ b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java @@ -0,0 +1,7 @@ +package org.baeldung.hbase; + +/** + * Created by tomasz.lelek on 23/02/17. + */ +public class HbaseClientExample { +} diff --git a/hbase/src/main/java/org/baeldung/hbase/Sample.java b/hbase/src/main/java/org/baeldung/hbase/Sample.java new file mode 100644 index 000000000000..50cc02ac3355 --- /dev/null +++ b/hbase/src/main/java/org/baeldung/hbase/Sample.java @@ -0,0 +1,213 @@ +package org.baeldung.hbase; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.HColumnDescriptor; +import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.client.Delete; +import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.HBaseAdmin; +import org.apache.hadoop.hbase.client.HTableFactory; +import org.apache.hadoop.hbase.client.HTableInterface; +import org.apache.hadoop.hbase.client.Put; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.ResultScanner; +import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.filter.BinaryComparator; +import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; +import org.apache.hadoop.hbase.filter.Filter; +import org.apache.hadoop.hbase.filter.FilterList; +import org.apache.hadoop.hbase.filter.FilterList.Operator; +import org.apache.hadoop.hbase.filter.PrefixFilter; +import org.apache.hadoop.hbase.filter.QualifierFilter; +import org.apache.hadoop.hbase.util.Bytes; + +public class Sample { + private final static byte[] cellData = Bytes.toBytes("cell_data"); + + /** Drop tables if this value is set true. */ + static boolean INITIALIZE_AT_FIRST = false; + + private static void p(String msg) { + System.out.println(msg); + } + + /** + * + * + * Row1Family1:Qualifier1Family1:Qualifier2 + * + * + * Row2Family1:Qualifier1Family2:Qualifier3 + * + * + * Row3Family1:Qualifier1Family2:Qualifier3 + * + *
+ */ + private final byte[] table1 = Bytes.toBytes("Table1"), // + row1 = Bytes.toBytes("Row1"), // + row2 = Bytes.toBytes("Row2"), // + row3 = Bytes.toBytes("Row3"), // + family1 = Bytes.toBytes("Family1"), // + family2 = Bytes.toBytes("Family2"), // + qualifier1 = Bytes.toBytes("Qualifier1"), // + qualifier2 = Bytes.toBytes("Qualifier2"), // + qualifier3 = Bytes.toBytes("Qualifier3"); + + private void createTable(HBaseAdmin admin) throws IOException { + HTableDescriptor desc = new HTableDescriptor(table1); + desc.addFamily(new HColumnDescriptor(family1)); + desc.addFamily(new HColumnDescriptor(family2)); + admin.createTable(desc); + } + + private void delete(HBaseAdmin admin, HTableInterface table) throws IOException { + p("\n*** DELETE ~Insert data and then delete it~ ***"); + + p("Inserting a data to be deleted later."); + Put put = new Put(row1); + put.add(family1, qualifier1, cellData); + table.put(put); + + Get get = new Get(row1); + Result result = table.get(get); + byte[] value = result.getValue(family1, qualifier1); + p("Fetch the data: " + Bytes.toString(value)); + assert Arrays.equals(cellData, value); + + p("Deleting"); + Delete delete = new Delete(row1); + delete.deleteColumn(family1, qualifier1); + table.delete(delete); + + result = table.get(get); + value = result.getValue(family1, qualifier1); + p("Fetch the data: " + Bytes.toString(value)); + assert Arrays.equals(cellData, value); + + p("Done. "); + } + + private void deleteTable(HBaseAdmin admin) throws IOException { + if (admin.tableExists(table1)) { + admin.disableTable(table1); + try { + admin.deleteTable(table1); + } finally { + } + } + } + + private void filters(HBaseAdmin admin, HTableInterface table) throws IOException { + p("\n*** FILTERS ~ scanning with filters to fetch a row of which key is larget than \"Row1\"~ ***"); + Filter filter1 = new PrefixFilter(row2); + Filter filter2 = new QualifierFilter(CompareOp.GREATER_OR_EQUAL, new BinaryComparator( + qualifier1)); + + List filters = Arrays.asList(filter1, filter2); + Filter filter3 = new FilterList(Operator.MUST_PASS_ALL, filters); + + Scan scan = new Scan(); + scan.setFilter(filter3); + + ResultScanner scanner = table.getScanner(scan); + try { + int i = 0; + for (Result result : scanner) { + p("Filter " + scan.getFilter() + " matched row: " + result); + i++; + } + assert i == 1 : "This filtering sample should return 1 row but was " + i + "."; + } finally { + scanner.close(); + } + p("Done. "); + } + + private void get(HBaseAdmin admin, HTableInterface table) throws IOException { + p("\n*** GET example ~fetching the data in Family1:Qualifier1~ ***"); + + Get g = new Get(row1); + Result r = table.get(g); + byte[] value = r.getValue(family1, qualifier1); + + p("Fetched value: " + Bytes.toString(value)); + assert Arrays.equals(cellData, value); + p("Done. "); + } + + private void put(HBaseAdmin admin, HTableInterface table) throws IOException { + p("\n*** PUT example ~inserting \"cell-data\" into Family1:Qualifier1 of Table1 ~ ***"); + + // Row1 => Family1:Qualifier1, Family1:Qualifier2 + Put p = new Put(row1); + p.add(family1, qualifier1, cellData); + p.add(family1, qualifier2, cellData); + table.put(p); + + // Row2 => Family1:Qualifier1, Family2:Qualifier3 + p = new Put(row2); + p.add(family1, qualifier1, cellData); + p.add(family2, qualifier3, cellData); + table.put(p); + + // Row3 => Family1:Qualifier1, Family2:Qualifier3 + p = new Put(row3); + p.add(family1, qualifier1, cellData); + p.add(family2, qualifier3, cellData); + table.put(p); + + admin.disableTable(table1); + try { + HColumnDescriptor desc = new HColumnDescriptor(row1); + admin.addColumn(table1, desc); + p("Success."); + } catch (Exception e) { + p("Failed."); + } finally { + admin.enableTable(table1); + } + p("Done. "); + } + + public void run(Configuration config) throws IOException { + HBaseAdmin admin = new HBaseAdmin(config); + HTableFactory factory = new HTableFactory(); + + if (INITIALIZE_AT_FIRST) { + deleteTable(admin); + } + + if (!admin.tableExists(table1)) { + createTable(admin); + } + + HTableInterface table = factory.createHTableInterface(config, table1); + put(admin, table); + get(admin, table); + scan(admin, table); + filters(admin, table); + delete(admin, table); + factory.releaseHTableInterface(table); // Disconnect + } + + private void scan(HBaseAdmin admin, HTableInterface table) throws IOException { + p("\n*** SCAN example ~fetching data in Family1:Qualifier1 ~ ***"); + + Scan scan = new Scan(); + scan.addColumn(family1, qualifier1); + + ResultScanner scanner = table.getScanner(scan); + try { + for (Result result : scanner) + p("Found row: " + result); + } finally { + scanner.close(); + } + p("Done."); + } +} \ No newline at end of file diff --git a/hbase/src/main/resources/hbase-site.xml b/hbase/src/main/resources/hbase-site.xml new file mode 100644 index 000000000000..e69de29bb2d1 From 2ca001d4d66e7f840d0e81df746c8ae16579472d Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Fri, 24 Feb 2017 10:09:39 +0100 Subject: [PATCH 2/9] BAEL-655 add client --- hbase/pom.xml | 29 ++++++++++++++ .../baeldung/hbase/HbaseClientExample.java | 39 +++++++++++++++++-- hbase/src/main/resources/hbase-site.xml | 12 ++++++ pom.xml | 1 + 4 files changed, 77 insertions(+), 4 deletions(-) diff --git a/hbase/pom.xml b/hbase/pom.xml index 2ecaf4697cbb..3f648b83c809 100644 --- a/hbase/pom.xml +++ b/hbase/pom.xml @@ -11,5 +11,34 @@ hbase + + + org.apache.hbase + hbase-client + ${hbase.version} + + + org.apache.hbase + hbase + ${hbase.version} + + + org.apache.hadoop + hadoop-core + 2.6.0-mr1-cdh5.10.0 + + + junit + junit + ${junit.version} + test + + + + + 1.3.0 + 4.12 + + \ No newline at end of file diff --git a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java index d80e7ef2617a..d9fbfd87b0b6 100644 --- a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java +++ b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java @@ -1,7 +1,38 @@ package org.baeldung.hbase; -/** - * Created by tomasz.lelek on 23/02/17. - */ + +import com.google.protobuf.ServiceException; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hbase.HBaseConfiguration; +import org.apache.hadoop.hbase.MasterNotRunningException; +import org.apache.hadoop.hbase.client.HBaseAdmin; + +import java.io.IOException; + public class HbaseClientExample { -} + + public static void main(String[] args) throws IOException, ServiceException { + new HbaseClientExample().connect(); + } + + private void connect() throws IOException, ServiceException { + Configuration config = HBaseConfiguration.create(); + + String path = this.getClass().getClassLoader().getResource("hbase-site.xml").getPath(); + + config.addResource(new Path(path)); + + + try { + HBaseAdmin.checkHBaseAvailable(config); + } catch (MasterNotRunningException e) { + System.out.println("HBase is not running."); + System.exit(1); + } + + Sample sample = new Sample(); + sample.run(config); + } + +} \ No newline at end of file diff --git a/hbase/src/main/resources/hbase-site.xml b/hbase/src/main/resources/hbase-site.xml index e69de29bb2d1..895529161cce 100644 --- a/hbase/src/main/resources/hbase-site.xml +++ b/hbase/src/main/resources/hbase-site.xml @@ -0,0 +1,12 @@ + + + + + hbase.zookeeper.quorum + localhost + + + hbase.zookeeper.property.clientPort + 2181 + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index ad6043615190..2b9c2c068746 100644 --- a/pom.xml +++ b/pom.xml @@ -197,6 +197,7 @@ struts2 apache-velocity apache-solrj + hbase From 8c2980cdfc7c2961bc36f03b37e2cf9670517357 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Fri, 24 Feb 2017 11:33:38 +0100 Subject: [PATCH 3/9] BAEL-655 module in an alfabetic order --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2b9c2c068746..5e75b5dcc32d 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,7 @@ handling-spring-static-resources hazelcast + hbase httpclient hystrix @@ -197,7 +198,6 @@ struts2 apache-velocity apache-solrj - hbase From 9c1806b69fb51349ad60dd7b148a549994b23390 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Fri, 24 Feb 2017 13:33:33 +0100 Subject: [PATCH 4/9] BAEL-655 add todo section --- hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java index d9fbfd87b0b6..0c22cf1e851b 100644 --- a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java +++ b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java @@ -10,6 +10,7 @@ import java.io.IOException; +//install hbase locally & hbase master start public class HbaseClientExample { public static void main(String[] args) throws IOException, ServiceException { @@ -23,7 +24,6 @@ private void connect() throws IOException, ServiceException { config.addResource(new Path(path)); - try { HBaseAdmin.checkHBaseAvailable(config); } catch (MasterNotRunningException e) { From 4173e5ebbcbec23351bce85c14fd312ed416852a Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Sun, 26 Feb 2017 11:53:46 +0100 Subject: [PATCH 5/9] BAEL-655 refactor-use newest API of hbase, do not use deprecated operations --- .../main/java/org/baeldung/hbase/Sample.java | 124 ++++++++---------- 1 file changed, 55 insertions(+), 69 deletions(-) diff --git a/hbase/src/main/java/org/baeldung/hbase/Sample.java b/hbase/src/main/java/org/baeldung/hbase/Sample.java index 50cc02ac3355..38d951c089c8 100644 --- a/hbase/src/main/java/org/baeldung/hbase/Sample.java +++ b/hbase/src/main/java/org/baeldung/hbase/Sample.java @@ -1,39 +1,26 @@ package org.baeldung.hbase; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.hadoop.hbase.client.Delete; -import org.apache.hadoop.hbase.client.Get; -import org.apache.hadoop.hbase.client.HBaseAdmin; -import org.apache.hadoop.hbase.client.HTableFactory; -import org.apache.hadoop.hbase.client.HTableInterface; -import org.apache.hadoop.hbase.client.Put; -import org.apache.hadoop.hbase.client.Result; -import org.apache.hadoop.hbase.client.ResultScanner; -import org.apache.hadoop.hbase.client.Scan; -import org.apache.hadoop.hbase.filter.BinaryComparator; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.*; +import org.apache.hadoop.hbase.filter.*; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; -import org.apache.hadoop.hbase.filter.Filter; -import org.apache.hadoop.hbase.filter.FilterList; import org.apache.hadoop.hbase.filter.FilterList.Operator; -import org.apache.hadoop.hbase.filter.PrefixFilter; -import org.apache.hadoop.hbase.filter.QualifierFilter; import org.apache.hadoop.hbase.util.Bytes; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + public class Sample { private final static byte[] cellData = Bytes.toBytes("cell_data"); - /** Drop tables if this value is set true. */ - static boolean INITIALIZE_AT_FIRST = false; - - private static void p(String msg) { - System.out.println(msg); - } + /** + * Drop tables if this value is set true. + */ + static boolean INITIALIZE_AT_FIRST = true; /** * @@ -48,15 +35,16 @@ private static void p(String msg) { * *
*/ - private final byte[] table1 = Bytes.toBytes("Table1"), // - row1 = Bytes.toBytes("Row1"), // - row2 = Bytes.toBytes("Row2"), // - row3 = Bytes.toBytes("Row3"), // - family1 = Bytes.toBytes("Family1"), // - family2 = Bytes.toBytes("Family2"), // - qualifier1 = Bytes.toBytes("Qualifier1"), // - qualifier2 = Bytes.toBytes("Qualifier2"), // - qualifier3 = Bytes.toBytes("Qualifier3"); + private final TableName table1 = TableName.valueOf("Table1"); + private final String family1 = "Family1"; + private final String family2 = "Family2"; + + private final byte[] row1 = Bytes.toBytes("Row1"); + private final byte[] row2 = Bytes.toBytes("Row2"); + private final byte[] row3 = Bytes.toBytes("Row3"); + private final byte[] qualifier1 = Bytes.toBytes("Qualifier1"); + private final byte[] qualifier2 = Bytes.toBytes("Qualifier2"); + private final byte[] qualifier3 = Bytes.toBytes("Qualifier3"); private void createTable(HBaseAdmin admin) throws IOException { HTableDescriptor desc = new HTableDescriptor(table1); @@ -66,44 +54,41 @@ private void createTable(HBaseAdmin admin) throws IOException { } private void delete(HBaseAdmin admin, HTableInterface table) throws IOException { - p("\n*** DELETE ~Insert data and then delete it~ ***"); + System.out.println("\n*** DELETE ~Insert data and then delete it~ ***"); - p("Inserting a data to be deleted later."); + System.out.println("Inserting a data to be deleted later."); Put put = new Put(row1); - put.add(family1, qualifier1, cellData); + put.addColumn(family1.getBytes(), qualifier1, cellData); table.put(put); Get get = new Get(row1); Result result = table.get(get); - byte[] value = result.getValue(family1, qualifier1); - p("Fetch the data: " + Bytes.toString(value)); + byte[] value = result.getValue(family1.getBytes(), qualifier1); + System.out.println("Fetch the data: " + Bytes.toString(value)); assert Arrays.equals(cellData, value); - p("Deleting"); + System.out.println("Deleting"); Delete delete = new Delete(row1); - delete.deleteColumn(family1, qualifier1); + delete.addColumn(family1.getBytes(), qualifier1); table.delete(delete); result = table.get(get); - value = result.getValue(family1, qualifier1); - p("Fetch the data: " + Bytes.toString(value)); + value = result.getValue(family1.getBytes(), qualifier1); + System.out.println("Fetch the data: " + Bytes.toString(value)); assert Arrays.equals(cellData, value); - p("Done. "); + System.out.println("Done. "); } private void deleteTable(HBaseAdmin admin) throws IOException { if (admin.tableExists(table1)) { admin.disableTable(table1); - try { - admin.deleteTable(table1); - } finally { - } + admin.deleteTable(table1); } } private void filters(HBaseAdmin admin, HTableInterface table) throws IOException { - p("\n*** FILTERS ~ scanning with filters to fetch a row of which key is larget than \"Row1\"~ ***"); + System.out.println("\n*** FILTERS ~ scanning with filters to fetch a row of which key is larget than \"Row1\"~ ***"); Filter filter1 = new PrefixFilter(row2); Filter filter2 = new QualifierFilter(CompareOp.GREATER_OR_EQUAL, new BinaryComparator( qualifier1)); @@ -118,60 +103,61 @@ private void filters(HBaseAdmin admin, HTableInterface table) throws IOException try { int i = 0; for (Result result : scanner) { - p("Filter " + scan.getFilter() + " matched row: " + result); + System.out.println("Filter " + scan.getFilter() + " matched row: " + result); i++; } assert i == 1 : "This filtering sample should return 1 row but was " + i + "."; } finally { scanner.close(); } - p("Done. "); + System.out.println("Done. "); } private void get(HBaseAdmin admin, HTableInterface table) throws IOException { - p("\n*** GET example ~fetching the data in Family1:Qualifier1~ ***"); + System.out.println("\n*** GET example ~fetching the data in Family1:Qualifier1~ ***"); Get g = new Get(row1); Result r = table.get(g); - byte[] value = r.getValue(family1, qualifier1); + byte[] value = r.getValue(family1.getBytes(), qualifier1); - p("Fetched value: " + Bytes.toString(value)); + System.out.println("Fetched value: " + Bytes.toString(value)); assert Arrays.equals(cellData, value); - p("Done. "); + System.out.println("Done. "); } private void put(HBaseAdmin admin, HTableInterface table) throws IOException { - p("\n*** PUT example ~inserting \"cell-data\" into Family1:Qualifier1 of Table1 ~ ***"); + System.out.println("\n*** PUT example ~inserting \"cell-data\" into Family1:Qualifier1 of Table1 ~ ***"); // Row1 => Family1:Qualifier1, Family1:Qualifier2 Put p = new Put(row1); - p.add(family1, qualifier1, cellData); - p.add(family1, qualifier2, cellData); + p.addImmutable(family1.getBytes(), qualifier1, cellData); + p.addImmutable(family1.getBytes(), qualifier2, cellData); table.put(p); // Row2 => Family1:Qualifier1, Family2:Qualifier3 p = new Put(row2); - p.add(family1, qualifier1, cellData); - p.add(family2, qualifier3, cellData); + p.addImmutable(family1.getBytes(), qualifier1, cellData); + p.addImmutable(family2.getBytes(), qualifier3, cellData); table.put(p); // Row3 => Family1:Qualifier1, Family2:Qualifier3 p = new Put(row3); - p.add(family1, qualifier1, cellData); - p.add(family2, qualifier3, cellData); + p.addImmutable(family1.getBytes(), qualifier1, cellData); + p.addImmutable(family2.getBytes(), qualifier3, cellData); table.put(p); admin.disableTable(table1); try { HColumnDescriptor desc = new HColumnDescriptor(row1); admin.addColumn(table1, desc); - p("Success."); + System.out.println("Success."); } catch (Exception e) { - p("Failed."); + System.out.println("Failed."); + System.out.println(e.getMessage()); } finally { admin.enableTable(table1); } - p("Done. "); + System.out.println("Done. "); } public void run(Configuration config) throws IOException { @@ -186,7 +172,7 @@ public void run(Configuration config) throws IOException { createTable(admin); } - HTableInterface table = factory.createHTableInterface(config, table1); + HTableInterface table = factory.createHTableInterface(config, table1.getName()); put(admin, table); get(admin, table); scan(admin, table); @@ -196,18 +182,18 @@ public void run(Configuration config) throws IOException { } private void scan(HBaseAdmin admin, HTableInterface table) throws IOException { - p("\n*** SCAN example ~fetching data in Family1:Qualifier1 ~ ***"); + System.out.println("\n*** SCAN example ~fetching data in Family1:Qualifier1 ~ ***"); Scan scan = new Scan(); - scan.addColumn(family1, qualifier1); + scan.addColumn(family1.getBytes(), qualifier1); ResultScanner scanner = table.getScanner(scan); try { for (Result result : scanner) - p("Found row: " + result); + System.out.println("Found row: " + result); } finally { scanner.close(); } - p("Done."); + System.out.println("Done."); } } \ No newline at end of file From 5e9e233f1aa42c5367d8c97f76cb4f299518756b Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Mon, 27 Feb 2017 14:29:52 +0100 Subject: [PATCH 6/9] BAEL-655 use newest hbase api --- hbase/pom.xml | 17 ++++-- ...Sample.java => HBaseClientOperations.java} | 56 +++++++++---------- .../baeldung/hbase/HbaseClientExample.java | 8 +-- 3 files changed, 41 insertions(+), 40 deletions(-) rename hbase/src/main/java/org/baeldung/hbase/{Sample.java => HBaseClientOperations.java} (81%) diff --git a/hbase/pom.xml b/hbase/pom.xml index 3f648b83c809..2382e47af285 100644 --- a/hbase/pom.xml +++ b/hbase/pom.xml @@ -10,6 +10,18 @@ 4.0.0 hbase + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + @@ -22,11 +34,6 @@ hbase ${hbase.version} - - org.apache.hadoop - hadoop-core - 2.6.0-mr1-cdh5.10.0 - junit junit diff --git a/hbase/src/main/java/org/baeldung/hbase/Sample.java b/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java similarity index 81% rename from hbase/src/main/java/org/baeldung/hbase/Sample.java rename to hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java index 38d951c089c8..21a3314dec7c 100644 --- a/hbase/src/main/java/org/baeldung/hbase/Sample.java +++ b/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java @@ -14,7 +14,7 @@ import java.util.Arrays; import java.util.List; -public class Sample { +public class HBaseClientOperations { private final static byte[] cellData = Bytes.toBytes("cell_data"); /** @@ -46,14 +46,14 @@ public class Sample { private final byte[] qualifier2 = Bytes.toBytes("Qualifier2"); private final byte[] qualifier3 = Bytes.toBytes("Qualifier3"); - private void createTable(HBaseAdmin admin) throws IOException { + private void createTable(Admin admin) throws IOException { HTableDescriptor desc = new HTableDescriptor(table1); desc.addFamily(new HColumnDescriptor(family1)); desc.addFamily(new HColumnDescriptor(family2)); admin.createTable(desc); } - private void delete(HBaseAdmin admin, HTableInterface table) throws IOException { + private void delete(Table table) throws IOException { System.out.println("\n*** DELETE ~Insert data and then delete it~ ***"); System.out.println("Inserting a data to be deleted later."); @@ -80,14 +80,14 @@ private void delete(HBaseAdmin admin, HTableInterface table) throws IOException System.out.println("Done. "); } - private void deleteTable(HBaseAdmin admin) throws IOException { + private void deleteTable(Admin admin) throws IOException { if (admin.tableExists(table1)) { admin.disableTable(table1); admin.deleteTable(table1); } } - private void filters(HBaseAdmin admin, HTableInterface table) throws IOException { + private void filters(Table table) throws IOException { System.out.println("\n*** FILTERS ~ scanning with filters to fetch a row of which key is larget than \"Row1\"~ ***"); Filter filter1 = new PrefixFilter(row2); Filter filter2 = new QualifierFilter(CompareOp.GREATER_OR_EQUAL, new BinaryComparator( @@ -99,21 +99,18 @@ private void filters(HBaseAdmin admin, HTableInterface table) throws IOException Scan scan = new Scan(); scan.setFilter(filter3); - ResultScanner scanner = table.getScanner(scan); - try { + try (ResultScanner scanner = table.getScanner(scan)) { int i = 0; for (Result result : scanner) { System.out.println("Filter " + scan.getFilter() + " matched row: " + result); i++; } assert i == 1 : "This filtering sample should return 1 row but was " + i + "."; - } finally { - scanner.close(); } System.out.println("Done. "); } - private void get(HBaseAdmin admin, HTableInterface table) throws IOException { + private void get(Table table) throws IOException { System.out.println("\n*** GET example ~fetching the data in Family1:Qualifier1~ ***"); Get g = new Get(row1); @@ -125,7 +122,7 @@ private void get(HBaseAdmin admin, HTableInterface table) throws IOException { System.out.println("Done. "); } - private void put(HBaseAdmin admin, HTableInterface table) throws IOException { + private void put(Admin admin, Table table) throws IOException { System.out.println("\n*** PUT example ~inserting \"cell-data\" into Family1:Qualifier1 of Table1 ~ ***"); // Row1 => Family1:Qualifier1, Family1:Qualifier2 @@ -161,38 +158,35 @@ private void put(HBaseAdmin admin, HTableInterface table) throws IOException { } public void run(Configuration config) throws IOException { - HBaseAdmin admin = new HBaseAdmin(config); - HTableFactory factory = new HTableFactory(); + try (Connection connection = ConnectionFactory.createConnection(config)) { - if (INITIALIZE_AT_FIRST) { - deleteTable(admin); - } + Admin admin = connection.getAdmin(); + if (INITIALIZE_AT_FIRST) { + deleteTable(admin); + } - if (!admin.tableExists(table1)) { - createTable(admin); - } + if (!admin.tableExists(table1)) { + createTable(admin); + } - HTableInterface table = factory.createHTableInterface(config, table1.getName()); - put(admin, table); - get(admin, table); - scan(admin, table); - filters(admin, table); - delete(admin, table); - factory.releaseHTableInterface(table); // Disconnect + Table table = connection.getTable(table1); + put(admin, table); + get(table); + scan(table); + filters(table); + delete(table); + } } - private void scan(HBaseAdmin admin, HTableInterface table) throws IOException { + private void scan(Table table) throws IOException { System.out.println("\n*** SCAN example ~fetching data in Family1:Qualifier1 ~ ***"); Scan scan = new Scan(); scan.addColumn(family1.getBytes(), qualifier1); - ResultScanner scanner = table.getScanner(scan); - try { + try (ResultScanner scanner = table.getScanner(scan)) { for (Result result : scanner) System.out.println("Found row: " + result); - } finally { - scanner.close(); } System.out.println("Done."); } diff --git a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java index 0c22cf1e851b..07cb7df48077 100644 --- a/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java +++ b/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java @@ -27,12 +27,12 @@ private void connect() throws IOException, ServiceException { try { HBaseAdmin.checkHBaseAvailable(config); } catch (MasterNotRunningException e) { - System.out.println("HBase is not running."); - System.exit(1); + System.out.println("HBase is not running." + e.getMessage()); + return; } - Sample sample = new Sample(); - sample.run(config); + HBaseClientOperations HBaseClientOperations = new HBaseClientOperations(); + HBaseClientOperations.run(config); } } \ No newline at end of file From c81d90145bc31a876bc67361bc285135febecb32 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Mon, 27 Feb 2017 18:53:55 +0100 Subject: [PATCH 7/9] BAEL-655 cleaner scan filter code --- .../java/org/baeldung/hbase/HBaseClientOperations.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java b/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java index 21a3314dec7c..03eeb283c603 100644 --- a/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java +++ b/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java @@ -89,15 +89,14 @@ private void deleteTable(Admin admin) throws IOException { private void filters(Table table) throws IOException { System.out.println("\n*** FILTERS ~ scanning with filters to fetch a row of which key is larget than \"Row1\"~ ***"); - Filter filter1 = new PrefixFilter(row2); + Filter filter1 = new PrefixFilter(row1); Filter filter2 = new QualifierFilter(CompareOp.GREATER_OR_EQUAL, new BinaryComparator( qualifier1)); List filters = Arrays.asList(filter1, filter2); - Filter filter3 = new FilterList(Operator.MUST_PASS_ALL, filters); Scan scan = new Scan(); - scan.setFilter(filter3); + scan.setFilter(new FilterList(Operator.MUST_PASS_ALL, filters)); try (ResultScanner scanner = table.getScanner(scan)) { int i = 0; @@ -105,7 +104,7 @@ private void filters(Table table) throws IOException { System.out.println("Filter " + scan.getFilter() + " matched row: " + result); i++; } - assert i == 1 : "This filtering sample should return 1 row but was " + i + "."; + assert i == 2 : "This filtering sample should return 1 row but was " + i + "."; } System.out.println("Done. "); } From 534cdff1bcfe6331f2903a801f4e49e2261ff511 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Thu, 2 Mar 2017 09:58:50 +0100 Subject: [PATCH 8/9] BAEL-311 fix delete example --- .../java/org/baeldung/hbase/HBaseClientOperations.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java b/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java index 03eeb283c603..c78eacc83447 100644 --- a/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java +++ b/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java @@ -54,28 +54,29 @@ private void createTable(Admin admin) throws IOException { } private void delete(Table table) throws IOException { + final byte[] rowToBeDeleted = Bytes.toBytes("RowToBeDeleted"); System.out.println("\n*** DELETE ~Insert data and then delete it~ ***"); System.out.println("Inserting a data to be deleted later."); - Put put = new Put(row1); + Put put = new Put(rowToBeDeleted); put.addColumn(family1.getBytes(), qualifier1, cellData); table.put(put); - Get get = new Get(row1); + Get get = new Get(rowToBeDeleted); Result result = table.get(get); byte[] value = result.getValue(family1.getBytes(), qualifier1); System.out.println("Fetch the data: " + Bytes.toString(value)); assert Arrays.equals(cellData, value); System.out.println("Deleting"); - Delete delete = new Delete(row1); + Delete delete = new Delete(rowToBeDeleted); delete.addColumn(family1.getBytes(), qualifier1); table.delete(delete); result = table.get(get); value = result.getValue(family1.getBytes(), qualifier1); System.out.println("Fetch the data: " + Bytes.toString(value)); - assert Arrays.equals(cellData, value); + assert Arrays.equals(null, value); System.out.println("Done. "); } From 6a4d4ca8a84ed4fd97d2be755651e7fae01e15ad Mon Sep 17 00:00:00 2001 From: pedja4 Date: Mon, 6 Mar 2017 11:03:53 +0100 Subject: [PATCH 9/9] Commented out hbase module from the main pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e75b5dcc32d..b1498530f737 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ handling-spring-static-resources hazelcast - hbase + httpclient hystrix