# Dockerfile
FROM cassandra:3.11
# override default disabled user defined functions
RUN sed -i -r 's/enable_user_defined_functions: false/enable_user_defined_functions: true/' /etc/cassandra/cassandra.yaml
~ docker-compose exec -it n1 egrep "enable_user_defined_functions" /etc/cassandra/cassandra.yaml
enable_user_defined_functions: true
# Java UDFs are always enabled, if enable_user_defined_functions is true.
# This option has no effect, if enable_user_defined_functions is false.
docker-compose exec n1 cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.14 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
// our user defined function "MAX_VALUE"
CREATE OR REPLACE FUNCTION MAX_VALUE (num1 int, num2 int)
RETURNS NULL ON NULL INPUT
RETURNS int
LANGUAGE java
AS $$
return Math.max(num1, num2);
$$;
// overview our table
// appending results
with max number from our udf function
SELECT
id, num1, num2, MAX_VALUE(num1, num2)
FROM UDF_FUNCTION_TEST_DATA
WHERE id IN(1, 2, 3, 4);
id | num1 | num2 | foo.max_value(num1, num2)
----+------+------+---------------------------
1 | 400 | 600 | 600
2 | 500 | 400 | 500
3 | null | 900 | null
4 | 500 | null | null
// now that we tested udf successfully,
// we can exit cqlsh
exit
3条答案
按热度按时间slsn1g291#
在您的
docker-compose.yaml
文件中,在您的环境下添加以下内容:然后,修改
docker-entrypoint.sh
(可以从here中获取),并添加enable_user_defined_functions
此外,您还需要docker-entrypoint.sh使用修改后的版本覆盖www.example.com:
gdrx4gfi2#
你需要修改你的Dockerfile中的cassandra.yaml文件。你可以创建一个单独的图层作为你原来的Cassandra图片的扩展(更多信息在这里)。
假设您使用的是Cassandra 3,并且是从软件包安装中安装的,则其位置为:
不同安装选项(tarball等)的其他可能位置记录在here中。如果您正在运行this Docker映像,您可能会在 /etc/cassandra 中找到它。
找到安装路径后,可以使用sed来修改文件,然后使用Docker的RUN命令运行该文件:
然后重新启动节点。
laawzig23#
根据@Edmon的回答和相关的@Ravi的评论,我在我的示例“cassandra 3.11”docker示例中启用了用户定义的函数,并成功运行测试。我将这个答案作为一个应用示例发布,就像迷你教程一样。
重现步骤
先决条件
1.“docker-compose.yml”文件内容
2.“Dockerfile”文件内容
3.重建映像,然后重新创建相应服务的容器,并基于提供的Dockerfile + docker-compose.yml文件在后台运行。
4.检查是否已启用用户定义的功能,默认值为false
5.连接到cassandra节点并与cassandra交互
cqlsh是使用CQL(Cassandra查询语言)与Cassandra交互的命令行界面
6.现在我们进入cassandra cli。我们将创建一个键空间和一个表,在这个键空间中填充测试数据
7.现在仍然停留在cassandra cli,我们将使用java创建一个用户定义的函数,它返回2个给定数字中的最大值。如果发现任何null,则返回null
8.停止并删除容器、网络