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

J4c*_*4ce 1 cql cassandra docker udf

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

user defined functions are disabled in cassandra.yaml set enable user defined functions=true
Run Code Online (Sandbox Code Playgroud)

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

Edm*_*mon 5

您将需要修改 Dockerfile 中的 cassandra.yaml 文件。您可以创建一个单独的图层作为原始 Cassandra 图像的扩展(更多信息请参见此处)。

假设您使用的是 Cassandra 3,并且是通过软件包安装进行安装的,则其位置为:

/etc/cassandra/cassandra.yaml
Run Code Online (Sandbox Code Playgroud)

此处记录了不同安装选项(压缩包等)的其他可能位置。如果您正在运行Docker 映像,您可能应该在/etc/cassandra中找到它。

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

RUN sed -i -r 's/enable_user_defined_functions=false/enable_user_defined_functions=true/' /etc/cassandra/cassandra.yaml
Run Code Online (Sandbox Code Playgroud)

然后重启一个节点。

  • 我必须使用下面的命令。`RUN sed -i -r 's/enable_user_define_functions: false/enable_user_define_functions: true/' /etc/cassandra/cassandra.yaml` (4认同)

Ham*_*wey 5

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

environment:
    - CASSANDRA_ENABLE_USER_DEFINED_FUNCTIONS=true
Run Code Online (Sandbox Code Playgroud)

然后,修改docker-entrypoint.sh(你可以从这里得到它),并添加 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 \
Run Code Online (Sandbox Code Playgroud)

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

volumes:
- ./db/Cassandra/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh
Run Code Online (Sandbox Code Playgroud)