【问题标题】:Purpose of fs.hdfs.hadoopconf in flink-conf.yamlflink-conf.yaml 中 fs.hdfs.hadoopconf 的用途
【发布时间】:2016-07-13 01:47:48
【问题描述】:

Flink 的新手。
我可以在远程 hdfs 集群中存在的文件上运行示例 wordcount.jar,而无需在 flink conf 中声明 fs.hdfs.hadoopconf 变量。

所以想知道上述变量的目的到底是什么。
声明它会改变运行示例 jar 的方式吗?

命令:

flink-cluster.vm ~]$ /opt/flink/bin/flink run  /opt/flink/examples/batch/WordCount.jar --input hdfs://hadoop-master:9000/tmp/test-events

输出:

.......
07/13/2016 00:50:13 Job execution switched to status FINISHED.
(foo,1)
.....
(bar,1)
(one,1)

设置:

  • hdfs://hadoop-master.vm:9000 上的远程 HDFS 集群
  • 在 flink-cluster.vm 上运行的 Flink 集群

谢谢

更新
正如 Serhiy 所指出的,在 conf 中声明 fs.hdfs.hadoopconf 但在使用更新的参数hdfs:///tmp/test-events.1468374669125 运行作业时出现以下错误

flink-conf.yaml

# You can also directly specify the paths to hdfs-default.xml and hdfs-site.xml
# via keys 'fs.hdfs.hdfsdefault' and 'fs.hdfs.hdfssite'.
#
fs.hdfs.hadoopconf: hdfs://hadoop-master:9000/
fs.hdfs.hdfsdefault :  hdfs://hadoop-master:9000/

命令:

flink-cluster.vm ~]$ /opt/flink/bin/flink run  /opt/flink/examples/batch/WordCount.jar --input hdfs:///tmp/test-events

输出:

Caused by: org.apache.flink.runtime.JobException: Creating the input splits caused an error: The given HDFS file URI (hdfs:///tmp/test-events.1468374669125) did not describe the HDFS NameNode. The attempt to use a default HDFS configuration, as specified in the 'fs.hdfs.hdfsdefault' or 'fs.hdfs.hdfssite' config parameter failed due to the following problem: Either no default file system was registered, or the provided configuration contains no valid authority component (fs.default.name or fs.defaultFS) describing the (hdfs namenode) host and port.
    at org.apache.flink.runtime.executiongraph.ExecutionJobVertex.<init>(ExecutionJobVertex.java:172)
    at org.apache.flink.runtime.executiongraph.ExecutionGraph.attachJobGraph(ExecutionGraph.java:679)
    at org.apache.flink.runtime.jobmanager.JobManager.org$apache$flink$runtime$jobmanager$JobManager$$submitJob(JobManager.scala:1026)
    ... 19 more

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    来自documentation

    fs.hdfs.hadoopconf: Hadoop 文件系统的绝对路径 (HDFS) 配置目录(可选值)。指定此值 允许程序使用短 URI 引用 HDFS 文件 (hdfs:///path/to/files, 不包括地址和端口 文件 URI 中的 NameNode)。如果没有这个选项,HDFS 文件可以 已访问,但需要完全限定的 URI,例如 hdfs://address:port/path/to/files。此选项还会导致文件 编写者获取 HDFS 的块大小的默认值和 复制因子。 Flink 将寻找“core-site.xml”和 指定目录下的“hdfs-site.xml”文件。

    【讨论】:

    • 感谢您的快速回复,即使我正在考虑相同的行,但声明变量并使用更新的命令行参数会引发错误。请检查原始问题中的更新部分。谢谢
    • @coredump fs.hdfs.hadoopconf 应该指向包含 hadoop 配置(core-site.xml 和 hdfs-site.xml)的目录,而不是指向 namenode 的 url :)。正在执行作业的节点应该在某处定义这些文件,否则它没有关于远程集群端点的信息。
    • 啊,这是有道理的,因为我正在一个独立的 flink 集群上运行作业,该集群带有一个独立的 HDFS 集群(No Yarn)。所以变量的值应该是 /opt/hadoop/etc/hadoop/ 。知道应该在哪里声明 namenode 吗?我在 flink conf 目录中看不到任何地方。再次感谢。
    • @coredump 通常 Hadoop 配置放在/etc/hadoop/conf 中(在安装 Hadoop 的集群上)。 namenode配置一般放在hdfs-site.xml。如果您在提交作业的机器中没有 hdfs-site.xml,您应该将该文件复制到该机器并将fs.hdfs.hadoopconf 指向它。
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多