You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Drill:同一服务器部署多Drillbit启动失败求助

本地搭建多Drillbit节点Apache Drill集群启动失败问题

问题背景

在本地搭建包含3个Drillbit节点的Apache Drill集群,已部署3个ZooKeeper节点(192.168.1.2:2181、192.168.1.3:2181、192.168.1.4:2181),并为每个Drillbit准备独立配置目录,包含不同的drill-env.sh和统一的drill-override.conf:

各节点drill-env.sh配置

  • node1配置:
export DRILL_HOST_NAME=node1
export DRILL_IDENT_STRING="node1"
export DRILL_PID_DIR=${DRILL_PID_DIR:-"<path_to_pid_dir>/pid_dir1/"}
  • node2配置:
export DRILL_HOST_NAME=node2
export DRILL_IDENT_STRING="node2"
export DRILL_PID_DIR=${DRILL_PID_DIR:-"<path_to_pid_dir>/pid_dir2/"}
  • node3配置:
export DRILL_HOST_NAME=node3
export DRILL_IDENT_STRING="node3"
export DRILL_PID_DIR=${DRILL_PID_DIR:-"<path_to_pid_dir>/pid_dir3/"}

drill-override.conf配置

drill.exec: {
  cluster-id: "mycluster",
  zk.connect: "192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181",
}

/etc/hosts配置

192.168.1.2 node1
192.168.1.3 node2
192.168.1.4 node3

启动命令

/bin/drillbit.sh --config <path_to_conf>/conf1/ start
/bin/drillbit.sh --config <path_to_conf>/conf2/ start
/bin/drillbit.sh --config <path_to_conf>/conf3/ start

问题现象

仅第一个Drillbit能正常启动,其余启动失败,抛出端口绑定异常:

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:590)
    at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:556)
    at org.apache.drill.exec.server.Drillbit.main(Drillbit.java:552)
Caused by: org.apache.drill.common.exceptions.UserException: RESOURCE ERROR: Drillbit could not bind to port 31010.

Server type: UserServer

[Error Id: bb497859-bf3e-43b7-bad7-dfa295122068 ]
    at org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:688)
    at org.apache.drill.exec.rpc.BasicServer.bind(BasicServer.java:211)
    at org.apache.drill.exec.service.ServiceEngine.start(ServiceEngine.java:100)
    at org.apache.drill.exec.server.Drillbit.run(Drillbit.java:227)
    at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:586)
    ... 2 more
Caused by: java.net.BindException: Address already in use
    at java.base/sun.nio.ch.Net.bind0(Native Method)
    at java.base/sun.nio.ch.Net.bind(Net.java:555)

已确认ZooKeeper运行正常,尝试设置allow_loopback_address_binding: true无效,希望使用相同端口而非为每个节点分配不同端口。

解决方案说明

目前在Drill 1.21.1版本之前,Drillbit默认会绑定到0.0.0.0(所有可用IP),导致同一机器上多个Drillbit无法使用相同端口启动。官方已在DRILL-8409问题中修复该问题,即将发布的Drill 1.21.1版本将支持为每个Drillbit绑定特定IP地址。

在等待新版本发布期间,若要在同一机器上用相同端口启动多Drillbit节点,可采用以下临时方案:

  • 方案1:使用不同端口
    在每个节点的drill-override.conf中为各服务指定不同端口,示例:

    drill.exec: {
      cluster-id: "mycluster",
      zk.connect: "192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181",
      user.port: 31010,
      control.port: 31011,
      data.port: 31012,
      http.port: 8047
    }
    

    每个节点对应修改上述端口值,确保不冲突。

  • 方案2:使用网络命名空间(Linux环境)
    为每个Drillbit节点创建独立的网络命名空间,分配不同的虚拟IP,这样每个节点可绑定各自的虚拟IP和相同端口,避免端口冲突。


内容的提问来源于stack exchange,提问作者ztv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:22:30