5

有没有办法通过 sock 代理调用 HbaseAdmin/Htable?我想使用 localhost:1080 socks 代理映射到集群中的其中一个框,然后与 Hbase(Zookeeper,Master,RegionServer)交谈。有没有办法做到这一点?

谢谢。

4

1 回答 1

4

我也有同样的要求,并发现 ZooKeeper 客户端连接是通过 NIO (org.apache.zookeeper.ClientCnxnSocketNIO) 实现的。而且 NIO 不支持通过 socks 连接

如果您有源代码,请查看 ZooKeeper.java 上的 getClientCnxnSocket() 方法。

private static ClientCnxnSocket getClientCnxnSocket() throws IOException {
    String clientCnxnSocketName = System
            .getProperty(ZOOKEEPER_CLIENT_CNXN_SOCKET);
    if (clientCnxnSocketName == null) {
        clientCnxnSocketName = ClientCnxnSocketNIO.class.getName();
    }
    try {
        return (ClientCnxnSocket) Class.forName(clientCnxnSocketName)
                .newInstance();
    } catch (Exception e) {
        IOException ioe = new IOException("Couldn't instantiate "
                + clientCnxnSocketName);
        ioe.initCause(e);
        throw ioe;
    }
}

如果你想让它在袜子上工作,你需要通过扩展 ClientCnxnSocket 来提供你自己的实现,并使用系统变量 zookeeper.clientCnxnSocket 指定它)。

于 2013-11-11T06:11:25.857 回答