我正在使用NGSIHDFSSink通过Cygnus保留在HDFS上。收到来自Orion的第一条通知时,它将创建目录和包含数据的正确文件:

/user/hdfs/openiot/Lamp_001_Lamp/Lamp_001_Lamp.txt

但是,对于收到的下一个通知,它显示以下错误:



这是我的接收器配置:
cygnus-ngsi.sinks.hdfs-sink.type = com.telefonica.iot.cygnus.sinks.NGSIHDFSSink
cygnus-ngsi.sinks.hdfs-sink.channel = hdfs-channel
cygnus-ngsi.sinks.hdfs-sink.enable_encoding = false
cygnus-ngsi.sinks.hdfs-sink.enable_grouping = false
cygnus-ngsi.sinks.hdfs-sink.enable_lowercase = false
cygnus-ngsi.sinks.hdfs-sink.enable_name_mappings = false
cygnus-ngsi.sinks.hdfs-sink.data_model = dm-by-entity
cygnus-ngsi.sinks.hdfs-sink.file_format = json-column
cygnus-ngsi.sinks.hdfs-sink.backend.impl = rest
cygnus-ngsi.sinks.hdfs-sink.backend.max_conns = 500
cygnus-ngsi.sinks.hdfs-sink.backend.max_conns_per_route = 100
cygnus-ngsi.sinks.hdfs-sink.hdfs_host = my_hdfs_ip
cygnus-ngsi.sinks.hdfs-sink.hdfs_port = 50070
cygnus-ngsi.sinks.hdfs-sink.hdfs_username = hdfs
cygnus-ngsi.sinks.hdfs-sink.hdfs_password =
cygnus-ngsi.sinks.hdfs-sink.oauth2_token =
cygnus-ngsi.sinks.hdfs-sink.service_as_namespace = false
cygnus-ngsi.sinks.hdfs-sink.batch_size = 100
cygnus-ngsi.sinks.hdfs-sink.batch_timeout = 30
cygnus-ngsi.sinks.hdfs-sink.batch_ttl = 10
cygnus-ngsi.sinks.hdfs-sink.batch_retry_intervals = 5000
cygnus-ngsi.sinks.hdfs-sink.hive = false
cygnus-ngsi.sinks.hdfs-sink.krb5_auth = false

有任何想法吗?

非常感谢

最佳答案

根据HDFS sink documentation,天鹅座使用WebHDFS在HDFS中写入。

我不确定,但是WebHDFS可能会将“创建”和“写入”视为不同的权限,因此您的WebHDFS实例配置为仅允许前者,而不允许后者。在这种情况下,WebHDFS服务器的权限将是一个问题。

我建议尝试不使用Cygnus的WebHDFS本身(即使用Postman或curl),以确保WebHDFS正常工作。

关于hadoop - FIWARE Cygnus:HDFS中存在文件,但无法写入数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55039350/

10-16 16:53