2016-02-28 2 views
1

Я создал приложение Java для чтения данных из HBase. Я проверил link1link2link3 и link4. Программа возвращает null, даже в моей таблице есть данные.HBase read data returns null

HBase оболочки:

hbase(main):009:0> get 'login','1' 
COLUMN    CELL              
password: password timestamp=1456588594424, value=hpassword      
username: username timestamp=1456588582413, value=husername      
2 row(s) in 0.0120 seconds 

Код:

Configuration config = HBaseConfiguration.create(); 
HTable table = new HTable(config, "login"); 
Get g = new Get(Bytes.toBytes("row1")); 
Result r = table.get(g); 

byte [] value = r.getValue(Bytes.toBytes("username"),Bytes.toBytes("username")); 
byte [] value1 = r.getValue(Bytes.toBytes("password"),Bytes.toBytes("password")); 

String valueStr = Bytes.toString(value); 
String valueStr1 = Bytes.toString(value1); 
System.out.println("username: "+ valueStr+"\npassword: "+valueStr1); 
Scan s = new Scan(); 
s.addColumn(Bytes.toBytes("username"), Bytes.toBytes("username")); 
s.addColumn(Bytes.toBytes("password"), Bytes.toBytes("password")); 
ResultScanner scanner = table.getScanner(s); 

try 
{ 
for (Result rnext = scanner.next(); rnext != null; rnext = scanner.next()) 
    { 
    System.out.println("Found row : " + rnext); 
    } 
}finally{ 
    scanner.close(); 
} 

Выход:

username: null 
password: null 

Am я что-то отсутствует, или мне нужно где-то изменить в коде?

Кроме того, мне нужно реализовать это в Java Play Framework. У вас есть представление об этом?

Заранее спасибо.

+0

Непонятно, какое семейство колонок используется для хранения данных. Вы используете «имя пользователя» для семейства столбцов и столбцов, это похоже на неправильное. – AdamSkywalker

+0

Благодарим за помощь. Я изменил их, а также изменил Bytes.toBytes («row1»)) «row1» на «1». –

+0

Почему вы используете сканирование и получаете в то же время? –

ответ

2

, как @AdamSkywalker сказал, что мне нужно изменить имена имени столбца и столбца семьи. Я получал нулевой доход, когда их имена были одинаковыми. Я переименовал их, и код работает отлично.

2

Попробуйте это:

// Instantiating Configuration class 
    Configuration config = HBaseConfiguration.create(); 

    // Instantiating HTable class 
    HTable table = new HTable(config, "tablename"); 

    // Instantiating the Scan class 
    Scan scan = new Scan(); 

    // Scanning the required columns 
    scan.addColumn(Bytes.toBytes("columnfamily"), Bytes.toBytes("column1")); 
    scan.addColumn(Bytes.toBytes("columnfamily"), Bytes.toBytes("column2")); 

    // Getting the scan result 
    ResultScanner scanner = table.getScanner(scan); 

    // Reading values from scan result 
    for (Result result = scanner.next(); result != null; result = scanner.next()) 

    System.out.println("Found row : " + result); 
    //closing the scanner 
    scanner.close(); 
+0

Название столбца и фамилия столбца имеют одинаковое имя, и я изменил их имена. Теперь он отлично работает. Благодарим вас за чистый код. –