我使用ngsihdfssink通过cygnus在hdfs上持久化。当收到orion的第一个通知时,它将创建目录和包含以下数据的正确文件:
/user/hdfs/openiot/Lamp_001_Lamp/Lamp_001_Lamp.txt
但是,对于收到的下一个通知,它显示以下错误:
当前终结点出现问题,正在尝试其他终结点。细节:天鹅座/hdfs中存在user/hdfs/openiolamp/lamp\u 001\u lamp.txt文件,但无法写入数据。服务器响应: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
有什么想法吗?
非常感谢
1条答案
按热度按时间a0zr77ik1#
根据hdfs sink文档,cygnus使用webhdfs来编写hdfs。
我不确定,但也许webhdfs认为“create”和“write”是不同的权限,所以您的webhdfs示例配置为只允许前者,而不允许后者。在这种情况下,webhdfs服务器上的权限将出现问题。
我建议在不使用cygnus的情况下尝试webhdfs本身(即使用postman或curl),以确保webhdfs正常工作。