首页 > 解决方案 > FIWARE Cygnus:文件存在于 HDFS 中,但无法写入数据

问题描述

我正在使用 NGSIHDFSSink 通过 Cygnus 在 HDFS 上持久化。当收到 Orion 的第一个通知时,它会创建目录和包含数据的正确文件:

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

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

当前端点存在问题,正在尝试其他端点。详细信息: CygnusPersistenceError。/user/hdfs/openioLamp/Lamp_001_Lamp.txt 文件存在于 HDFS 中,但无法写入数据。服务器响应:403 禁止。

这是我的接收器配置:

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

有任何想法吗?

太感谢了

标签: hadoophdfsfiwarefiware-cygnus

解决方案


根据HDFS sink 文档,Cygnus 使用WebHDFS写入 HDFS。

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

我建议在没有 Cygnus 的情况下尝试 WebHDFS 本​​身(即使用 Postman 或 curl)以确保 WebHDFS 正常工作。


推荐阅读