首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HBase API表接口不能将数据放入表中?

使用HBase API表接口不能将数据放入表中?
EN

Stack Overflow用户
提问于 2017-01-13 19:28:06
回答 1查看 624关注 0票数 0

当我将数据放入HBase表中时,出现了一个有趣的问题。在过去的时间里,代码可以很好地运行,没有任何问题。但现在它不能正常执行。下面的代码行抛出了一个奇怪的问题:

代码语言:javascript
复制
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.util.Date;

/**
 * Test HBase Java API functions
 *
 * @author elkan1788
 */
public class HBaseAPITest {

private static final Logger logger = LoggerFactory.getLogger(HBaseAPITest.class);

private Connection connect;

private byte[] family = Bytes.toBytes("lg");

@BeforeClass
public void init() throws Exception {
    Configuration config = HBaseConfiguration.create();
    config.set("hbase.zookeeper.quorum", "master01.office.sao.so,cluster02.office.sao.so");

    connect = ConnectionFactory.createConnection(config);
}

@Test
public void testPutRecord() throws Exception {

    byte[] rowKey = Bytes.toBytes(Long.toHexString(new Date().getTime()));
    byte[] ts = Bytes.toBytes("ts");
    byte[] c = Bytes.toBytes("c");
    byte[] oip = Bytes.toBytes("oip");

    logger.info("Start HBase Put method test...");

    Put put = new Put(rowKey);
    put.addColumn(family, ts, Bytes.toBytes("2017-01-11"));
    put.addColumn(family, c, Bytes.toBytes(1024));
    put.addColumn(family, oip, Bytes.toBytes("127.0.0.1"));

 //        HTable table = new HTable(connect.getConfiguration(), "test");
    Table table = connect.getTable(TableName.valueOf("test"));
    logger.info("Connect table success.");
    logger.info("{}", table.getName().getNameAsString());
    logger.info("{}", table.getConfiguration().toString());
    table.put(put);
    table.close();

    logger.info("End HBase Put method test...");
}

@AfterClass
public void destroy() throws Exception {
    connect.close();
}
}

它在table.put(put)上等待了很长一段时间,但现在抛出了任何异常。我试着向搜索引擎寻求帮助,但没有任何回应。有人说你的hbase client版本可能和HBase版本不匹配。然后我试着在相同的版本下使用它们,但仍然不能进入数据。

在做了一些尝试之后,我把调试信息放到了控制台上,它输出的消息如下:

代码语言:javascript
复制
18:48:36.908 [main-SendThread(master01.office.sao.so:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply sessionid:0x2599208a32c0260, packet:: clientPath:null serverPath:null finished:false header:: 8,4  replyHeader:: 8,38654779738,0  request:: '/hbase/meta-region-server,F  response:: #ffffffff0001a726567696f6e7365727665723a3136303230cffffffeacffffff931c23ffffffedffffff8f50425546a15a9636c7573746572303210ffffff947d18ffffffa8ffffff95ffffffe0ffffffb6ffffff992b100183,s{38654771300,38654771300,1484294512812,1484294512812,0,0,0,0,62,0,38654771300}

我也尝试过使用hbase shell命令执行put函数,它可以很好地工作。我的HBase版本是1.1.2.2.5.3.0-37, rcb8c969d1089f1a34e9df11b6eeb96e69bcf878d, Tue Nov 29 18:48:22 UTC 2016

那么,这个HBase服务出了什么问题呢?我怎么才能修好它。

有HBase配置设置:hbase-config

EN

回答 1

Stack Overflow用户

发布于 2017-01-16 17:25:33

使用HTable代替Table。也许你的问题可以解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41633624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档