hadoop - 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
有任何想法吗?
太感谢了
解决方案
根据HDFS sink 文档,Cygnus 使用WebHDFS写入 HDFS。
我不确定,但也许 WebHDFS 将“创建”和“写入”视为不同的权限,因此您的 WebHDFS 实例配置为仅允许前者但不允许后者。在这种情况下,这将是 WebHDFS 服务器上的权限问题。
我建议在没有 Cygnus 的情况下尝试 WebHDFS 本身(即使用 Postman 或 curl)以确保 WebHDFS 正常工作。
推荐阅读
- javascript - 有没有办法将 ngx bootstrap datepicker 放在输入框的右下角?
- android - SufficientlySecure/html-textview 库 HtmlTextView 拦截父点击事件
- python - Python比较>,<
- azure - 是否可以在 Azure DevOps 中显示 ARM 部署的进度?
- python - 将值附加到对象内的数组(循环对象)
- javascript - 运行时使用 JavaScript 错误的 Google API Geocode
- c# - Xamarin/WinForms 客户端在双线程架构中发送/接收时无法连接到套接字
- crystal-reports - 水晶报表字段资源管理器未在存储过程中显示新添加的字段
- c# - C# and SQLite; Optimal code for inserting into many-to-many relationship
- spring-kafka - 配置 Spring Kafka 以使用 DeadLetterPublishingRecoverer