如何在 docker cassandra 实例中启用用户定义的函数?

How to enable user defined functions in docker instance of cassandra?

当我尝试在 cassandra 中创建一个简单的减法函数时出现以下错误:

user defined functions are disabled in cassandra.yaml set enable user defined functions=true

我不知道如何将其设置为 true。我该去哪里做这件事?我是 运行 一个 docker 的 cassandra 实例,这使得它变得更加困难。

您需要修改 Docker 文件中的 cassandra.yaml 文件。 您可以创建一个单独的层作为原始 Cassandra 图像的扩展(更多 here)。

假设您使用的是 Cassandra 3,并且您是从包安装中安装的,其位置是:

/etc/cassandra/cassandra.yaml

记录了不同安装选项(tarball 等)的其他可能位置 here. If you are running this Docker 图片,您应该可以在 /etc/cassandra.

一旦确定了安装路径,就可以使用 sed 就地更改文件。 运行 它与 Docker 的 运行 命令:

RUN sed -i -r 's/enable_user_defined_functions=false/enable_user_defined_functions=true/' /etc/cassandra/cassandra.yaml

然后重启一个节点。

在您的 docker-compose.yaml 文件中,根据您的环境添加以下内容:

environment:
    - CASSANDRA_ENABLE_USER_DEFINED_FUNCTIONS=true

然后,修改docker-entrypoint.sh(可以从here获取),添加 enable_user_defined_functions

for yaml in \
        broadcast_address \
        broadcast_rpc_address \
        cluster_name \
        endpoint_snitch \
        listen_address \
        num_tokens \
        rpc_address \
        start_rpc \
        enable_user_defined_functions \

此外,您需要使用修改后的版本覆盖 docker-entrypoint.sh:

volumes:
- ./db/Cassandra/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh