如何以分布式方式在本地启动drillbit?

How to start drillbit locally in distributed mode?

我下载了 Apache Drill v1.8,编辑 conf/drill-override.conf 有以下变化:

drill.exec: {
  cluster-id: "drillbits1",
  zk.connect: "10.178.23.140:2181,10.178.23.140:2182,10.178.23.140:2183,10.178.23.140:2184"
}

..zookeeper 集群实际上由在同一台机器上启动的 4 个 Zookeeper 实例组成,我正在尝试启动 Drill。 (即我只为 Apache Drill 和 Zookeeper 的集群使用一台机器,机器的 IP 是 10.178.23.140

所以我一直收到这个错误:

Exception in thread "main" org.apache.drill.exec.exception.DrillbitStartupException: Failure during initial startup of Drillbit.
    at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:295)
    at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:271)
    at org.apache.drill.exec.server.Drillbit.main(Drillbit.java:267)
Caused by: org.apache.drill.exec.exception.DrillbitStartupException: Drillbit is disallowed to bind to loopback address in distributed mode.
    at org.apache.drill.exec.service.ServiceEngine.checkLoopbackAddress(ServiceEngine.java:186)
    at org.apache.drill.exec.service.ServiceEngine.start(ServiceEngine.java:146)
    at org.apache.drill.exec.server.Drillbit.run(Drillbit.java:119)
    at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:291)
    ... 2 more

为什么 drillbit 抱怨被绑定到环回地址?!

  1. 我没有为 drillbit 配置 IP 绑定!
  2. 并且由于我在我的机器上启动 drillbit 进程,我的机器会尝试绑定到哪些其他 IP?!

问题是我的 /etc/hosts 文件有这个条目

127.0.1.1   mgelbana-machine

这使我的主机名可以解析为环回地址。要解决此问题,您可以执行以下任一操作

  • 删除此行解决了我的问题。
  • 将我的主机名解析为非环回 IP 地址。

Source

private void checkLoopbackAddress(String address) throws DrillbitStartupException, UnknownHostException {
  if (isDistributedMode && InetAddress.getByName(address).isLoopbackAddress()) {
    throw new DrillbitStartupException("Drillbit is disallowed to bind to loopback address in distributed mode.");
  }
}

Drill 在绑定到环回地址时拒绝启动的原因是 differentiate between Drill nodes registered in Zookeeper.