美文网首页
Docker(java-api连接Hbase 卡住问题的解决方法

Docker(java-api连接Hbase 卡住问题的解决方法

作者: 冰菓_ | 来源:发表于2022-08-16 00:03 被阅读0次

一. 安装docker单机hbase

docker pull harisekhon/hbase

docker run -d -h hadoop100 -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 - -p 16301:16301 --name hbase docker.io/harisekhon/hbase

二. 现状

  1. 连接可以通过,但是java-api无法读写hbase数据
  2. 持续连接 org.apache.hbase.thirdparty.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information

三. 解决

排查了一下午人都晕了......

没有对外暴露 16020端口

docker run -d -h hadoop100 -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16020:16020 -p 16301:16301 --name hbase docker.io/harisekhon/hbase

其他问题参考:Java API远程连接服务器hbase报错:Connection refused: no further information: localhost/127.0.0.1:16000

四. 测试

public class Hbase_demo2 {

    public static void main(String[] args) throws IOException {
        System.setProperty("hadoop.home.dir", "F:\\hadoop\\hadoop-2.2.0-bin-master");
        Connection hbaseConnection = ConnectionUtils.getHbaseConnection();
        System.out.println("------");
        Table table = hbaseConnection.getTable(TableName.valueOf("profile"));
        System.out.println(table);
        //Scan所有数据
        Scan scan = new Scan();
        ResultScanner rss = table.getScanner(scan);
        System.out.println(rss);
        for (Result r : rss) {
            System.out.println("----");
            System.out.println("\n row: " + new String(r.getRow()));
        }
    }
}

public class UserProfileDataGen {

    public static void main(String[] args) throws IOException {

        System.setProperty("hadoop.home.dir", "F:\\hadoop\\hadoop-2.2.0-bin-master");
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "192.168.10.100:2181");
        Connection conn = ConnectionFactory.createConnection(conf);
        Table table = conn.getTable(TableName.valueOf("profile_test"));

        ArrayList<Put> puts = new ArrayList<>();
        for (int i = 0; i < 100000; i++) {

            // 生成一个用户的画像标签数据
            String deviceId = StringUtils.leftPad(i + "", 6, "0");
            Put put = new Put(Bytes.toBytes(deviceId));
            for (int k = 1; k <= 100; k++) {
                String key = "tag" + k;
                String value = "v" + RandomUtils.nextInt(1, 3);
                put.addColumn(Bytes.toBytes("f"), Bytes.toBytes(key), Bytes.toBytes(value));
            }

            // 将这一条画像数据,添加到list中
            puts.add(put);

            // 攒满100条一批
            if(puts.size()==100) {
                table.put(puts);
                puts.clear();
            }

        }

        // 提交最后一批
        if(puts.size()>0) table.put(puts);

        conn.close();
    }

}

五. 待解决

  1. 虚拟机挂起,重启,hbase无法连接的问题

相关文章

网友评论

      本文标题:Docker(java-api连接Hbase 卡住问题的解决方法

      本文链接:https://www.haomeiwen.com/subject/obqrgrtx.html