之前在CDH上安装好了服务HDFS,这里观察一下HDFS包括数据持久化和文件读写在内的一些工作流程。

目录

1. 数据持久化观察

 2. HDFS文件读写观察

2.1 新建文件目录 

2.2 上传文件

2.3 下载文件 



1. 数据持久化观察

        进入HaDoop页面观察其启动过程:

  1.             加载镜像文件fsimage
  2.             加载日志文件edits
  3.             保留checkpoint
  4.             退出安全模式 

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法

        进入node0:/dfs/nn/current,观察editlog的id在fsimage的id之后,即editlog记录的是保存镜像之后的操作信息(截图之后了,这是启动后经历过依次checkpoint了)。 

hdfs dfs cp 用法 hdfs dfs cd_HDFS_02

        进入node1:/dfs/nn/current,观察可得,SNN从NN拷贝最后时点的Fsimage和增量的Editlog,合并成最新时点的Fsimage,并将其发送给NN(截图之后了,这是启动后经历过依次checkpoint了)。

hdfs dfs cp 用法 hdfs dfs cd_hdfs_03

 2. HDFS文件读写观察

        从CDH的”文件浏览器”或从Hadoop页面”Utilities”-->”Browse the file system”可查看HDFS文件。此时只有一个CDH启动HDFS时写入的测试文件。

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_04

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_05

2.1 新建文件目录 

        尝试在HDFS根目录下创建一个bigdata路径

        补充知识点 (hadoop fs、hadoop dfs与hdfs dfs命令的区别及hadoop fs命令说明)

hadoop fs -mkdir /bigdata

        报如下权限错误

mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_06

        参考下面两篇文章可解决权限问题,要么关闭HDFS的权限检查,要么每次切换成hdfs用户执行命令,要么用hdfs建立路径后更改权限为root。

【HDFS】mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

 HDFS上传文件错误:Permission denied: user=root, access=WRITE, inode="/user"

        我这里直接在CDH上关闭HDFS权限检查了,保存更改后重启HDFS服务。 

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_07

         重启服务后执行命令,创建文件目录。

hadoop fs -mkdir /bigdata
hadoop fs -mkdir -p /user/root

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_08

2.2 上传文件

        在node0里挑两个文件,一个大小为2.22M,一个大小为176.42M,上传到/user/root目录,默认的块大小为128M,可以借此观察下文件分块情况。

        执行命令,可以看到文件被上传到了HDFS对应路径下。

        ps:这里把副本数量从3修改为2,因为只有两个datanode节点。

hadoop fs -put /opt/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm /user/root
hadoop fs -put /opt/mysql-connector-java.jar /user/root

hdfs dfs cp 用法 hdfs dfs cd_hadoop_09

        进入Hadoop文件系统页面,可点击文件名查看分块情况。 

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_10

         首先查看大小为2.22M的mysql文件,可以看到只有一个块block0,且这个块在node1和node2都可以获取,即两个副本分别存储在node1和node2上。

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_11

         再看另一个176. 42M的文件,可见文件被切分成了大小为134217728B(128MB)的Block0和大小为50770613B(48.42MB)的Block1。

hdfs dfs cp 用法 hdfs dfs cd_HDFS_12

 

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_13

        进入node1的对应路径下查看所保存的block,进入datanode,找到保存刚上传的Oracle文件的目录,可见如下对应的block文件块以及其.meta的校验文件。

我的路径:

 node1:/dfs/dn/current/BP-1562683945-192.168.137.100-1628072094899/current/finalized/subdir0/subdir2

 

hdfs dfs cp 用法 hdfs dfs cd_hdfs dfs cp 用法_14

2.3 下载文件 

hadoop fs  -get /user/root/mysql-connector-java.jar   /home
hadoop fs  -get /user/root/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm   /home

        将HDFS上的文件下载至本地/home目录下。

hdfs dfs cp 用法 hdfs dfs cd_hadoop_15