【问题标题】:Hbase API through sock proxy通过 sock 代理的 Hbase API
【发布时间】:2013-09-11 19:36:56
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: hbase apache-zookeeper socks


    【解决方案1】:

    我也有同样的要求,发现 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;
        }
    }
    

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

    【讨论】:

    • 当前的 ZooKeeper 实现很烦人。您需要扩展的 ClientCnxnSocket 类具有“包”范围,因此如果您想添加自己的实现,您必须将其放入 org.apache.zookeeper 包中。
    • 这方面有什么进展吗?还是我们还需要破解它来让 zk/hbase 连接通过 socks 代理工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多