Dataproc 中的 Presto:配置 Kafka 目录

Presto in Dataproc: configure a Kafka catalog

我正在尝试使用 Presto 作为可选组件创建一个 dataproc 集群,我想向其中添加一个 kafka 目录。在 https://cloud.google.com/dataproc/docs/concepts/components/presto and https://prestodb.io/docs/current/connector/kafka.html#configuration-properties 之后,我正在使用以下命令:

gcloud beta dataproc clusters create mycluster \
    --region us-central1 \
    --no-address \
    --zone us-central1-a \
    --single-node \
    --master-machine-type n1-standard-4 \
    --master-boot-disk-size 500 \
    --project myproject \
    --optional-components=PRESTO \
    --enable-component-gateway \
    --properties="presto-catalog:kafkastream.connector.name=kafka,presto-catalog:kafkastream.kafka.tables-names=topicname,presto-catalog:kafkastream.kafka.nodes=kafkavm:9092,presto-catalog:kafkastream.kafka.default-schema=default,presto-catalog:kafkastream.kafka.hide-internal-columns=false"
   

所以,基本上我想设置 properties 来安装名为 kafkastream 的目录,该目录连接到端口 9092 上的 kafka 虚拟机并创建一个 table default.topicname.

但是,当我尝试创建集群时,状态变为错误。在日志中我发现了与 StructuredError{presto, Component presto failed to activate 相关的内容。 日志中的其他错误是

google-dataproc-startup[1129]: activate-component-presto[2447]: Query 12345 failed: Presto server is still initializing
google-dataproc-startup[1129]: activate-component-presto[2447]: 'get_node_information' attempt 6 failed! Sleeping 10s.
google-dataproc-startup[1129]: activate-component-presto[2447]: Error running command: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:8060

如果我删除 properties 部分 Presto 将完美运行。

设置kafka目录的正确方法是什么?有人可以帮助我吗?我在其他 Whosebug 主题和网上都找不到与此问题相关的信息。

可选组件 Presto 的 --properties 功能似乎有错误,无法按预期工作。但是,我找到了一种通过 GCS 存储桶中的初始化脚本 init-script.sh 设置 kafka 目录的方法:

#init-script.sh
function add_kafka-catalog() {
  cat > /etc/presto/conf/catalog/kafka.properties <<EOF
connector.name=kafka
kafka.nodes=my-vm:9092
kafka.table-names=my-topic
kafka.hide-internal-columns=false
EOF
}

# Restart presto to read new catalogs
function restart_presto() {
    sudo /usr/lib/presto/bin/launcher restart
}

function main() {
add_kafka-catalog
restart_presto
}
main

并通过

启动集群
gcloud beta dataproc clusters create mycluster \
    --region us-central1 \
    --no-address \
    --zone us-central1-a \
    --single-node \
    --master-machine-type n1-standard-4 \
    --master-boot-disk-size 500 \
    --project myproject \
    --optional-components=PRESTO \
    --enable-component-gateway
    --initialization-actions 'gs://mybucket/init-script.sh

属性 名称中有错别字 kafka.tables-names:

$ cat /var/log/presto/server.log | grep Exception -A 10

...
1) Error: Configuration property 'kafka.tables-names' was not used

1 error
    at io.airlift.bootstrap.Bootstrap.initialize(Bootstrap.java:238)
    at io.prestosql.plugin.kafka.KafkaConnectorFactory.create(KafkaConnectorFactory.java:73)
    at io.prestosql.connector.ConnectorManager.createConnector(ConnectorManager.java:349)
    at io.prestosql.connector.ConnectorManager.createCatalog(ConnectorManager.java:208)
    at io.prestosql.connector.ConnectorManager.createCatalog(ConnectorManager.java:200)
    at io.prestosql.connector.ConnectorManager.createCatalog(ConnectorManager.java:186)

应该是kafka.table-namestable后没有s)。您在 init 操作中正确执行,但在 --properties 标志中错误。