【问题标题】:Apache Drill: Failure setting up ZK for clientApache Drill:为客户端设置 ZK 失败
【发布时间】:2016-08-01 21:25:15
【问题描述】:

我正在使用两个服务器集群测试 Apache Drill。

假设他们的外部 IP 是:

1.1.1.1
2.2.2.2

我首先将 Zookeeper 设置为在两者上运行,当我执行 status 命令时,我得到了肯定的响应:

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader

我的 zoo.cfg 让它工作的方式是这样的:

服务器 1:

// other default values omitted
clientPort=2181
server.1=0.0.0.0:2888:3888
server.2=2.2.2.2:2888:3888

服务器 2:

// other default values omitted
clientPort=2181
server.1=1.1.1.1:2888:3888
server.2=0.0.0.0:2888:3888

接下来我想让 Drill 在这个集群上运行,所以我修改了 2 个服务器的 Drill-override.conf 文件,如下所示:

服务器 1:

drill.exec: {
  cluster-id: "test",
  zk.connect: "1.1.1.1:2181,2.2.2.2:2181"
}

服务器 2:

drill.exec: {
  cluster-id: "test",
  zk.connect: "2.2.2.2:2181,1.1.1.1:2181"
}

我可以在两台服务器上启动钻头,当我做状态时,我在两台服务器上都得到这个响应:

drillbit is running.

但是当我尝试通过 bin/drill-conf 打开控制台时,我得到了这个堆栈跟踪:

Error: Failure in connecting to Drill: org.apache.drill.exec.rpc.RpcException: Failure setting up ZK for client. (state=,code=0)
java.sql.SQLException: Failure in connecting to Drill: org.apache.drill.exec.rpc.RpcException: Failure setting up ZK for client.
        at org.apache.drill.jdbc.impl.DrillConnectionImpl.<init>(DrillConnectionImpl.java:159)
        at org.apache.drill.jdbc.impl.DrillJdbc41Factory.newDrillConnection(DrillJdbc41Factory.java:64)
        at org.apache.drill.jdbc.impl.DrillFactory.newConnection(DrillFactory.java:69)
        at net.hydromatic.avatica.UnregisteredDriver.connect(UnregisteredDriver.java:126)
        at org.apache.drill.jdbc.Driver.connect(Driver.java:72)
        at sqlline.DatabaseConnection.connect(DatabaseConnection.java:167)
        at sqlline.DatabaseConnection.getConnection(DatabaseConnection.java:213)
        at sqlline.Commands.connect(Commands.java:1083)
        at sqlline.Commands.connect(Commands.java:1015)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:36)
        at sqlline.SqlLine.dispatch(SqlLine.java:742)
        at sqlline.SqlLine.initArgs(SqlLine.java:528)
        at sqlline.SqlLine.begin(SqlLine.java:596)
        at sqlline.SqlLine.start(SqlLine.java:375)
        at sqlline.SqlLine.main(SqlLine.java:268)
Caused by: org.apache.drill.exec.rpc.RpcException: Failure setting up ZK for client.
        at org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:208)
        at org.apache.drill.jdbc.impl.DrillConnectionImpl.<init>(DrillConnectionImpl.java:151)
        ... 18 more
Caused by: java.io.IOException: Failure to connect to the zookeeper cluster service within the allotted time of 10000 milliseconds.
        at org.apache.drill.exec.coord.zk.ZKClusterCoordinator.start(ZKClusterCoordinator.java:123)
        at org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:206)
        ... 19 more
apache drill 1.7.0
"start your sql engine"

为什么 Drill 无法连接到运行良好的 ZK 集群?

这两个盒子之间的所有端口都是开放的。

【问题讨论】:

    标签: apache-drill apache-zookeeper


    【解决方案1】:

    先决条件

    Prerequisites以分布式模式开始训练:

    • (必需)运行 Oracle JDK 版本 7
    • (必需)运行 ZooKeeper 仲裁
    • (推荐)运行 Hadoop 集群
    • (推荐)使用 DNS

    配置

    作为你的服务器IP地址:

    • 服务器 1 - 1.1.1.1
    • 服务器 2 - 2.2.2.2

    在服务器 1 和服务器 2 中的 zoo.cfg 中放置相同的配置

    clientPort=2181
    server.1=1.1.1.1:2888:3888
    server.2=2.2.2.2:2888:3888
    

    drill-override.conf两台服务器

    的配置相同
    drill.exec: {
      cluster-id: "test",
      zk.connect: "1.1.1.1:2181,2.2.2.2:2181"
    }
    

    开始训练

    使用

    所有集群节点上启动drillbit
    bin/drillbit.sh start
    

    使用钻

    • 网页界面:

      使用任何节点地址打开 Web UI。例如:

      1.1.1.1:8047

    • 通过外壳:

      触发bin/drill-localhost命令,会出现drill shell。


    验证安装

    来自钻壳或 UI 触发

    SELECT * FROM sys.drillbits;
    

    Drill 列出了正在运行的 Drillbits 的信息


    停钻

    开火命令

    bin/drillbit.sh stop
    

    【讨论】:

    • 尝试在两台服务器中为 zookeeper 放置相同的 cfg 会导致失败 - zk 节点无法找到彼此。我尝试过使用外部 ip、内部 ip 和主机名。两个节点唯一能找到彼此的时间是当我为 cfg 文件所在的服务器放置 0.0.0.0 时。当我尝试启动仲裁时,我会得到 SocketTimeoutException 或 BindException。
    • @Trant 你有没有尝试启动 Drillbit (bin/drillbit.sh start)
    • 使用我原来的 zookeeper 配置?是的,我做到了——那是我写的地方,我可以看到“drillbit 正在运行”的状态。但是当我尝试打开一个钻取控制台时,我得到了关于未能连接到 zookeeper 集群的堆栈跟踪。
    • 你是在用./drill-localhost查看控制台吗
    • 不,我使用了 bin/drill-conf。如果我运行drill-localhost,我会得到这个而不是原始帖子中显示的堆栈跟踪:.ConnectTimeoutException: connection timed out: localhost/127.0.0.1:31010
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2014-03-01
    相关资源
    最近更新 更多