我正在尝试设置一个使用单独的 ZooKeeper 集群的 Accumulo 集群。我已将 accumulo-site.xml 文件配置为包括 instance.zookeeper.host 属性以及我的 ZooKeeper 节点的主机名或 IP 地址,但是当我尝试使用 accumulo init 命令初始化 Accumulo 时,我收到以下错误消息:
ZOOKEEPER_HOME is not set or is not a directory. Please make sure it's set globally or in conf/accumulo-env.sh.
我已经验证 ZooKeeper 客户端安装在 Accumulo 节点上并且配置正确,并且我已经检查了节点之间的网络连接。我确定我已经在 accumulo-site.xml .file 中正确设置了 instance.zookeeper.host 属性
是什么导致了这个错误,我该如何解决?
了解您使用的是哪个版本的 Accumulo 和 ZooKeeper 会有所帮助。根据错误消息,我猜 Accumulo 是 1.x(希望是最新的 1.x,目前是 1.10.3,因为所有早期版本都被最新版本淘汰了)。
Apache Accumulo 通常与其所有依赖项捆绑在一起Apache Hadoop 和 Apache ZooKeeper 除外,它们预计由用户单独提供。需要设置
instance.zookeeper.host
属性以确保 Accumulo 知道 ZooKeeper 在哪里运行,因此它可以与之对话。然而,在你到达那一点之前,你需要确保 Accumulo 的所有依赖项都在它的CLASSPATH
上,因此它可以使用 ZooKeeper 自己的 jar 中的 ZooKeeper 客户端代码与其通信。
Accumulo 附带的默认脚本使用环境脚本
conf/accumulo-env.sh
,帮助配置其CLASSPATH
,以便在Accumulo 进程启动时所有依赖项都可用。该脚本将 Accumulo 自己的 lib/
目录中的 jar 添加到 CLASSPATH
,用于捆绑的依赖项,并且还尝试定位 Hadoop 和 ZooKeeper,通过在安装位置检测它们将它们添加到 CLASSPATH
,HADOOP_HOME
和 ZOOKEEPER_HOME
.
要解决此问题,您需要将
ZOOKEEPER_HOME
设置为指向ZooKeeper 安装的位置,或者您需要编辑conf/accumulo-env.sh
脚本以将ZooKeeper jar 以另一种方式放在CLASSPATH
上。
Accumulo 1.10 假定您使用的是 ZooKeeper 3.4,它在与新版本 ZooKeeper 不同的位置包含它的 jar。根据您的 ZooKeeper 版本,您可能需要将
$ZOOKEEPER_HOME/lib
添加到 CLASSPATH
而不是 $ZOO_KEEPER_HOME
或者除此之外,这取决于您的 ZooKeeper 版本。
这只是一般信息。要获取有关您的具体情况的详细信息,最好的办法是联系Accumulo 用户邮件列表以获得更多帮助/建议。