Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从通过配置单元插入的hbase读取数据时出现问题_Java_Hadoop_Hbase_Hive_Apache Zookeeper - Fatal编程技术网

Java 从通过配置单元插入的hbase读取数据时出现问题

Java 从通过配置单元插入的hbase读取数据时出现问题,java,hadoop,hbase,hive,apache-zookeeper,Java,Hadoop,Hbase,Hive,Apache Zookeeper,我已经创建了一个hbase配置单元表。在其中,我通过配置单元插入数据 CREATE TABLE hivetest(cookie string, timespent string, pageviews string, visit string, logdate string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = "m

我已经创建了一个hbase配置单元表。在其中,我通过配置单元插入数据

CREATE TABLE hivetest(cookie string, timespent string, pageviews string, visit string, logdate string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "m:timespent, m:pageviews, m:visit, m:logdate")
TBLPROPERTIES ("hbase.table.name" = "hbasetest");
正确插入数据。我可以使用hbase外壳访问相同的数据。但是,我创建了一个hbase客户端,它在访问相同数据时返回空点异常

现在的问题是,如果我创建一个虚拟hbase表,并通过hbase shell而不是通过HIVE放置一些数据,然后尝试从hbase客户端获取这些数据。它不会给出错误并返回数据。 同样,如果我尝试通过hbase客户端将数据放入hbasetest表的某一行,然后尝试获取同一行,也会发生同样的情况。现在这一次它给了我数据

那么,我的问题是,通过hive和hbase外壳写入数据有什么区别?

Hbase客户端:

Configuration conf = HBaseConfiguration.create();
   Map variables = System.getenv();
   conf.set("hbase.zookeeper.quorum","192.168.0.92");
   HTable table;
   byte family[];
   byte qualifier[];           
   table = new HTable(conf, "hivetest");
   family = Bytes.toBytes("m");
   qualifier = Bytes.toBytes("logdate");             
   Get get = new Get(Bytes.toBytes("cookie_value"));    
   Result r = table.get(get);         
   byte  valueObj[] = r.getValue(family, qualifier);     
   byte  keyObj[] = r.getRow();
   String key = new String(keyObj);  
   String value = new String(valueObj);   /* line where exception occur */
   System.out.println((new StringBuilder(String.valueOf(key))).append(" = ").append(value).toString());
例外情况:

Exception in thread "main" java.lang.NullPointerException
    at java.lang.String.<init>(Unknown Source)
    at com.hbase.test.HbaseExample.main(HbaseExample.java:51)
线程“main”java.lang.NullPointerException中的异常 位于java.lang.String。(未知源) 位于com.hbase.test.HbaseExample.main(HbaseExample.java:51)
您使用的是hive版本0.9.0吗? 如果是这样,那么这个版本就有一个bughbastoragehandler的SerDe不会忽略逗号和列族之间的空格。这使得存储的列族的名称与预期的不同

HbaseExample类中的第51行是吗

 byte  valueObj[] = r.getValue(family, qualifier); 
尝试在SerdeProperty映射中去掉逗号符号和列族之间的空格

见: