我有一个连接到HBase的外部Java客户端。我们主要通过批处理mapreduce加载数据:TableOutputFormat。数据已通过该方法成功推送到Hbasetable。 Java客户端已被用作扫描数据并通过REST API提供数据的方法。
我们要求通过REST API添加Put;但是,一旦我们做了看跌,它就会挂起。相同的HBase Client可以访问HBaseAdmin对象并创建通道。我们可以运行Get和Scan命令,但是一旦我们运行Put命令,它就会失败。以下相关代码
Configuration config = HBaseConfiguration.create(new org.apache.hadoop.conf.Configuration());
config.set("hbase.zookeeper.quorum", props.getProperty("hbase.zookeeper.quorum"));
config.set("hbase.zookeeper.property.clientPort", "2181");
config.set("zookeeper.znode.parent", props.getProperty("zookeeper.znode.parent", "/hbase"));
confResourceAsInputStream = this.getClass().getClassLoader().getResource("hbase-site.xml").openStream();
InputStream hdfsResourceStream = this.getClass().getClassLoader().getResourceAsStream("hdfs-site.xml");
InputStream coreSiteStream = this.getClass().getClassLoader().getResourceAsStream("core-site.xml");
config.addResource(confResourceAsInputStream);
config.addResource(hdfsResourceStream);
config.addResource(coreSiteStream);
HConnection connection = HConnectionManager.createConnection(config);
HTableInterface putTable = connection.getTable(tableName.getBytes(), null);
try {
putTable.put(put);
} finally {
putTable.flushCommits();
putTable.close();
}
结果:我不知道为什么但是HTableInterface putTable = connection.getTable(tableName.getBytes(),null);只适用于获取。我不得不将其更改为以下内容并且有效:
HTableInterface putTable = connection.getTable(Bytes.toBytes(tableName);