简体   繁体   English

HBase读取的数据返回null

[英]HBase read data returns null

I have created a java application to read data from HBase. 我创建了一个Java应用程序以从HBase读取数据。 I checked link1 link2 link3 and link4 . 我检查了link1 link2 link3link4 Program returns null even there is data in my table. 即使我的表中有数据,程序也会返回null。

hbase shell: hbase shell:

 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

Code: 码:

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();
 }

Output: 输出:

username: null
password: null

Am I missing something, or do I need to edit somewhere in the code? 我是否缺少某些内容,还是需要在代码中的某处进行编辑?

Also, I need to implement this into Java Play Framework. 另外,我需要将其实现到Java Play Framework中。 Do you have any idea about it? 你有什么想法吗?

Thanks in advance. 提前致谢。

Try this: 尝试这个:

 // 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();

as @AdamSkywalker said that I needed to change names of column name and column family. 正如@AdamSkywalker所说,我需要更改列名称和列族的名称。 I was getting null return when their names were same. 当他们的名字相同时,我得到的是空值返回。 I renamed them and code works perfectly. 我重命名了它们,并且代码运行完美。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM