最近刚好又重新了解了一下hdfs的一些内容,想通过这篇内容总结和记录一下。Hadoop分布式文件系统HDFS配置及示例运行。
作者使用的是hadoop3.2.1的版本,以下示例都是以hadoop-3.2.1为基础目录进行介绍。

1、文件配置

首先,进入hadoop配置目录: ./etc/hadoop

$ cd etc/hadoop/

(1) 配置core-site.xml文件

vi 进入编辑模式

$ vi core-site.xml

下面是hadoop官网给出的配置信息,主要是配置默认文件系统的地址,即namenode的地址信息

hadoop hdfs 使用 hadoop hdfs配置_大数据


官网给出的fs.defaultFS的解释如下:

hadoop hdfs 使用 hadoop hdfs配置_hadoop_02


作者这里配置的是伪分布式的主机名,除此之外,还配置了hadoop.tmp.dir,主要作用是hadoop运行时使用的一个临时目录,可以不指定,默认为/tmp目录。

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/moudle/hadoop-3.2.1/data/tmp</value>
    </property>
</configuration>

官网关于core-site.xml的所有配置项信息链接如下:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml

(2) 配置hdfs-site.xml文件

vi进入编辑模式

$ vi hdfs-site.xml

下面是hadoop官网给出的主要配置信息:

dfs.replication,hdfs文件存储的默认副本数目,默认为3

hadoop hdfs 使用 hadoop hdfs配置_hadoop hdfs 使用_03


官网给出的解释如下:

hadoop hdfs 使用 hadoop hdfs配置_hdfs_04


大致意思:可以指定文件创建时的副本数目,如果没指定,就使用默认值。

作者配置的信息如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
        <description>配置文件副本数</description>
    </property>

     <property>
        <name>dfs.permissions</name>
        <value>false</value>
        <description>关掉文件操作时的权限检查</description>
    </property>
</configuration>

官网所有配置项链接:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

至此,hdfs的文件基本配置已经完成,下面将启动并使用。

2、HDFS启动

重新进入到hadoop-3.2.1目录下

(1) 初始化namenode

执行命令

$ hdfs namenode -format

hadoop hdfs 使用 hadoop hdfs配置_官网_05


中间如果没有提示的话,一般都是初始化成功了的。

(2) 启动namenode

执行命令启动namenode,jps命令查看进程是否存在,启动是否成功。

$ hdfs --daemon start namenode
$ jps
3536 NameNode
3558 Jps

(3) 启动datanode

命令和启动namenode差不多,如下:

$ hdfs --daemon start datanode
$ jps
3536 NameNode
3668 DataNode
3700 Jps

至此,namenode和datanode都已经启动完成。

3、文件测试

(1) hdfs相关命令测试

  • 建目录
$ hdfs dfs -mkdir -p /user/taylor/data
  • 查看目录结构
$ hdfs dfs -ls -R /
drwxr-xr-x   - taylor supergroup          0 2020-05-31 09:24 /user
drwxr-xr-x   - taylor supergroup          0 2020-05-31 09:24 /user/taylor
drwxr-xr-x   - taylor supergroup          0 2020-05-31 09:24 /user/taylor/data
  • 上传文件
$ hdfs dfs -put wcinput/wc.input /user/taylor/data
$ hdfs dfs -ls /user/taylor/data
Found 1 items
-rw-r--r--   1 taylor supergroup         67 2020-05-31 09:25 /user/taylor/data/wc.input

文件上传成功!

  • 查看文件内容
$ hdfs dfs -cat /user/taylor/data/wc.input
zhangsan lisi wangwu zhaoliu
zhangsan wangwu
lisi
wuqi
sunba sunba

通过上面一系列的测试,hdfs目前使用起来是没有任何问题的,说明配置的没问题。

4、程序测试

(1) wordCount

  • 仍然测试wordcount程序,执行命令:
    其中input和output的文件和目录都是hdfs上面的文件和目录。
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /user/taylor/data/wc.input /user/taylor/output
  • 查看执行结果
$ hdfs dfs -ls /user/taylor/output
Found 2 items
-rw-r--r--   1 taylor supergroup          0 2020-05-31 09:30 /user/taylor/output/_SUCCESS
-rw-r--r--   1 taylor supergroup         52 2020-05-31 09:30 /user/taylor/output/part-r-00000
$ hdfs dfs -cat /user/taylor/output/part-r-00000
lisi    2
sunba   2
wangwu  2
wuqi    1
zhangsan        2
zhaoliu 1

根据标志文件 _SUCCESS 判断,我们执行的是成功的!hadoop程序可以在hdfs上面执行了!

5、HDFS的web界面

  • web页面的地址格式如下
http://hadoop001:9870

其中hadoop001是作者配置的hostname,也可以直接使用ip地址信息。值得注意的是,hadoop3.2.1默认的端口是 9870,和此前的一些版本不太一样,此前的一些版本使用的是 50070.
也可以使用dfs.namenode.http-address参数进行配置指定端口。

  • web界面如下

    我们通过web界面也可以很清晰的看到我们在hdfs上面的目录结构,也可以下载和查看web页面文件的开头和结尾部分。

    文件从web页面下载,打开后如下:

    ps:如果web页面无法下载的话,可能是没有配置 C:\Windows\System32\drivers\etc\hosts文件。

总结,其实hdfs的基本配置和使用还是很简单的,并且配置的项也很丰富,支持我们多项拓展和使用,非常方便。