Hadoop core-site.xml配置:start-dfs.sh与MapReduce运行问题咨询
问题解决方案
两个需求的冲突本质是全局配置的作用域问题:fs.default.name(3.x版本对应参数名为fs.defaultFS,旧版本兼容原参数名)是HDFS启动的必填核心配置,作用是指定NameNode的RPC服务地址,直接全局屏蔽该配置会导致start-dfs.sh无法获取NameNode地址,自然启动失败。
正确处理方式如下:
- 保留全局
core-site.xml中fs.default.name的配置值为hdfs://localhost:8020,不要修改或屏蔽,保证HDFS集群启动脚本可以正常读取配置运行。 - 运行不需要连接HDFS的本地模式MapReduce作业时,通过配置优先级覆盖全局参数即可,无需修改全局配置文件:
- 命令行提交作业时追加参数
-D fs.defaultFS=file:///,该参数优先级高于全局配置,仅对当前提交的作业生效,作业运行时会将默认文件系统设置为本地文件系统,不会访问HDFS。示例命令:hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount -D fs.defaultFS=file:/// /home/xxx/input /home/xxx/output - 自行编写MapReduce代码时,可以在作业提交逻辑中主动设置配置覆盖全局值:
Configuration jobConf = new Configuration(); jobConf.set("fs.defaultFS", "file:///"); // 后续作业初始化、提交逻辑
- 命令行提交作业时追加参数
- 如果需要长期在多套配置间切换,可以为不同使用场景创建独立的配置目录,比如分别创建
conf-hdfs、conf-local目录存放对应场景的全套配置文件,切换场景时通过设置HADOOP_CONF_DIR环境变量指定加载的配置目录即可,不需要反复修改同一套配置文件的内容。
Hadoop配置文件规则说明
- 不支持在同一类路径下存放多个同名的
core-site.xml文件,类路径加载时重名文件会被优先级更高的路径下的文件直接覆盖,不会自动合并多个重名文件里的配置项。 - 允许不同配置来源存在重复配置项,配置加载优先级从高到低为:命令行
-D传入的参数 > 代码中手动设置的参数 > 自定义类路径下引入的配置文件 > Hadoop安装目录etc/hadoop下的用户配置文件 > Hadoop内置的默认参数值。高优先级配置会自动覆盖低优先级的同key参数。
内容的提问来源于stack exchange,提问作者Moin
相关产品推荐
相关产品推荐

