hadoop运行wordcount的路径问题(Linux本地路径HDFS路径)

Posted ༺࿈ 海洋༒之心 ࿈༻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop运行wordcount的路径问题(Linux本地路径HDFS路径)相关的知识,希望对你有一定的参考价值。

发现了一个问题就是我们在执行官方案例的 wordcount 时,后面需要输入和输出路径两个参数,那么为什么后面的输入和输出路径默认是从HDFS进行读取,而不是我们的Linux本地路径呢?

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

先说一下,Hadoop有三种部署模式,分别是本地模式、伪分布模式(单机)、完全分布式

  • 本地模式:单机运行,文件系统一般为本地
  • 伪分布模式:只有一台服务器,但是该机器上具备了Hadoop所有的运行条件,只不过是将所有功能集一身,文件系统为HDFS
  • 完全分布式:多台服务器构成真正的分布式环境,文件系统为HDFS

对于本地模式,我们只不过将hadoop安装了一下,但是内部的配置此时我们并没有修改,使用的是hadoop默认配置文件(例core-default.xml),如果此时运行上述指令,那么我们的输入和输出路径为本地,具体原因如下:

<property>
  <name>fs.defaultFS</name>
  <value>file:///</value>
  <description>The name of the default file system.  A URI whose
  scheme and authority determine the FileSystem implementation.  The
  uri's scheme determines the config property (fs.SCHEME.impl) naming
  the FileSystem implementation class.  The uri's authority is used to
  determine the host, port, etc. for a filesystem.</description>
</property>

上述配置来源于 core-default.xml 为hadoop的默认配置文件,该配置中我们的文件系统配置为 file:/// ,代表着hadoop使用的文件系统为本地文件系统。

当执行Hadoop命令时,如果路径没有指定协议(例如 hdfs://file://),则 Hadoop 会根据默认配置来决定路径的协议。默认情况下,Hadoop 使用 fs.defaultFS 配置项指定的文件系统作为默认文件系统,如果该配置项的值以 hdfs:// 开头,则路径会被解释为 HDFS 路径;如果该配置项的值以 file:// 开头,则路径会被解释为本地文件系统路径。

当我们搭建集群时,我们会配置一个文件 core-site.xml

<!-- 指定NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop:8020</value>
</property>

此时我们重新配置了 fs.defaultFS 这个参数为 hdfs://*** ,所以此时Hadoop使用的文件系统为HDFS。

因此,如果您的 fs.defaultFS 配置项的值是以 file:// 开头的,则Hadoop会将路径解释为本地文件系统路径;如果 fs.defaultFS 的值是以 hdfs://开头的,则Hadoop会将路径解释为HDFS路径。

所以在执行 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 这条指令时,文件的输入和输出路径到底是Linux本地还是HDFS路径主要取决于配置文件中的 fs.defaultFS 到底配置的是什么。

以上是关于hadoop运行wordcount的路径问题(Linux本地路径HDFS路径)的主要内容,如果未能解决你的问题,请参考以下文章

windows 运行hadoop自带例子程序wordcount总是死在Map 0% Reduce0%

hadoop 输入路径用正则表达式被默认处理为多个参数的问题

MapReduce wordcount 输入路径为目录 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$

Hadoop2.6运行wordcount

在ubuntu上安装eclipse同时连接hadoop运行wordcount程序

运行Hadoop自带的wordcount单词统计程序