Hbase API通过sock代理

时间:2013-09-08 00:22:39

标签: hbase apache-zookeeper socks

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

如果你有源代码,请检查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;
    }
}

如果你想让它适用于socks,你需要通过扩展ClientCnxnSocket来提供你自己的实现,并使用系统变量zookeeper.clientCnxnSocket指定它。