Witam, używam SQL, ale muszę odczytać dane z tabeli HBase. Każda pomoc w tej sprawie byłaby świetna. Książka lub może tylko przykładowy kod do odczytania ze stołu. Ktoś powiedział, że użycie skanera wystarczy, ale nie wiem, jak go użyć.Jak odczytać dane z Hbase?
5
A
Odpowiedz
9
Od the website:
// Sometimes, you won't know the row you're looking for. In this case, you
// use a Scanner. This will give you cursor-like interface to the contents
// of the table. To set up a Scanner, do like you did above making a Put
// and a Get, create a Scan. Adorn it with column names, etc.
Scan s = new Scan();
s.addColumn(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"));
ResultScanner scanner = table.getScanner(s);
try {
// Scanners return Result instances.
// Now, for the actual iteration. One way is to use a while loop like so:
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
// print out the row we found and the columns we were looking for
System.out.println("Found row: " + rr);
}
// The other approach is to use a foreach loop. Scanners are iterable!
// for (Result rr : scanner) {
// System.out.println("Found row: " + rr);
// }
} finally {
// Make sure you close your scanners when you are done!
// Thats why we have it inside a try/finally clause
scanner.close();
}
2
użyłem że jednak uzyskać wartość String trzeba użyć metody getValue z rezultatu.
byte[] bytes = rr.getValue(Bytes.toBytes("myLittleFamily"), Bytes.toBytes("someQualifier"));
System.out.println(new String(bytes));
3
Chciałbym zaoferować rozwiązanie bez przestarzałych metod
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
// list the tables
Arrays.stream(admin.listTables()).forEach(System.out::println);
// let's insert some data in 'mytable' and get the row
TableName tableName = TableName.valueOf("test_1");
Table table = connection.getTable(tableName);
//Put
Put thePut = new Put(Bytes.toBytes("rowkey1"));
String columnFamily = "m";
String columnQualifier1 = "col1";
String outValue1 = "value1";
String columnQualifier2 = "col2";
String outValue2 = "value2";
thePut.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier1), Bytes.toBytes(outValue1));
thePut.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier2), Bytes.toBytes(outValue2));
table.put(thePut);
//Get
Get theGet = new Get(Bytes.toBytes("rowkey1"));
Result result = table.get(theGet);
//get value first column
String inValue1 = Bytes.toString(result.value());
//get value by ColumnFamily and ColumnName
byte[] inValueByte = result.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier1));
String inValue2 = Bytes.toString(inValueByte);
//loop for result
for (Cell cell : result.listCells()) {
String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
String value = Bytes.toString(CellUtil.cloneValue(cell));
System.out.printf("Qualifier : %s : Value : %s%n", qualifier, value);
}
//create Map by result and print it
Map<String, String> getResult = result.listCells().stream().collect(Collectors.toMap(e -> Bytes.toString(CellUtil.cloneQualifier(e)), e -> Bytes.toString(CellUtil.cloneValue(e))));
getResult.entrySet().stream().forEach(e -> System.out.printf("Qualifier : %s : Value : %s%n", e.getKey(), e.getValue()));
System.out.println("---------Scan---------");
Scan scan = new Scan();
ResultScanner resultScan = table.getScanner(scan);
resultScan.forEach(e -> {
System.out.printf("Row \"%s\"%n", Bytes.toString(e.getRow()));
Map<String, String> getResultScan = e.listCells().stream().collect(Collectors.toMap(d -> Bytes.toString(CellUtil.cloneQualifier(d)), d -> Bytes.toString(CellUtil.cloneValue(d))));
getResultScan.entrySet().stream().forEach(d -> System.out.printf("column \"%s\", value \"%s\"%n", d.getKey(), d.getValue()));
System.out.println();
});
+0
która zależność maven zawiera ten api? – Normal
+1
Używam org.apache.hbase: hbase-client: 1.1.2 –
Powiązane problemy
- 1. odczytać plik tekstowy z System do Hbase MapReduce
- 2. Jak mogę odczytać dane binarne z wfstream?
- 3. jak odczytać dane z jednej kolumny datagridview
- 4. Jak odczytać dane portu szeregowego z JavaScript
- 5. Node.js jak odczytać dane json z żądania?
- 6. Jak odczytać dane z Arduino z Raspberry Pi z I2C
- 7. Jak mogę odczytać z jednej instancji HBase, ale piszę do innej?
- 8. Jak skutecznie skanować linie HBase
- 9. Jak odczytać dane z programu Excel za pomocą z PHPExcel
- 10. Jak odczytać dane z Arduino z Raspberry pi przez I2C
- 11. Jak odczytać dane żądanie POST w szafie
- 12. Jak przepłukać tabelę w HBase
- 13. Jak * faktycznie * odczytać dane CSV w TensorFlow?
- 14. Perl6: Jak odczytać surowe dane STDIN?
- 15. Jak mogę odczytać dane cx_Oracle.LOB w Pythonie?
- 16. Zintegruj Hbase z PHP
- 17. Jak odczytać dane wejściowe z konsoli w pliku wsadowym?
- 18. Jak odczytać dane wejściowe z wielu linii w Javie
- 19. Jak odczytać dane z pliku XLS (Excel) [Java, Android]
- 20. Jak odczytać dane z Firebase ONCE przy użyciu java/android?
- 21. Jak odczytać dane HttpRequest wysłane z klienta, na serwerze
- 22. Jak odczytać dane z pliku Excel za pomocą C#?
- 23. Jak mogę odczytać dane z pamięci flash USB?
- 24. Jak odczytać dane GET z adresu URL za pomocą JavaScript?
- 25. Jak można odczytać dane z nagłówka odpowiedzi w jQuery/javascript
- 26. Jak mogę odczytać dane obrazu z adresu URL w Pythonie?
- 27. Jak mogę odczytać dane z pliku tekstowego za pomocą VB6?
- 28. Jak można odczytać dane binarne z rejestru do tablicy bajtów
- 29. Jak odczytać dane z portu COM za pomocą pliku wsadowego?
- 30. Hbase: Jak określić nazwę hosta dla Hbase master
Dzięki za przykładowy kod. – WackoMax
Może się to okazać powolne, ponieważ zwraca jeden wiersz dla każdego 'scanner.next()', możesz najpierw włączyć buforowanie za pomocą 's.setCashing (numberOfRows)' jak opisano [tutaj] (http: //elsoufy.blogspot. fr/2014/06/gettint-started-with-hbase.html). – bachr