Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)

这一小节我们来学习:1.HDFS的设计,2.HDFS常用命令。

HDFS的设计
分布式文件系统

客户:帮我保存一下这几天的数据。

程序猿:好嘞,有多大呢?

客户:1T。

程序猿:好没问题,买个硬盘就搞定了。

一个月后…

客户:帮我保存下这几个月的数据。

程序猿:好嘞,这次有多大呢?

客户:1024T。

哇,这么大吗?没有这么大的硬盘买呀,而且好像也没听过一台计算机可以存放1024T的数据。

程序猿:哦,对了我可以部署1024台机器,然后将他们连接起来,让他们的数据可以共享,这不就可以了吗?hh,机智如我。

当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区并存储到若干台单独的计算机上,管理网络中跨多台计算机存储的文件系统称为分布式文件系统(Distributed FileSystem)。

Hadoop自带一个称为HDFS的分布式文件系统,即 HDFS(Hadoop Distributed FileSystem)。有时也称之为DFS,他们是一回事儿,

NameNode与DataNode

HDFS的构建思路是这样的:一次写入多次读取不可修改,这也是最高效的访问模式。

客户:你把1024台机器都组成了分布式文件系统,我要查数据,下载数据该怎么做呢?

程序猿:我准备了一套专门管理这些数据的工具,叫做namenode,您要查数据直接访问它就可以啦。

HDFS有两类节点用来管理集群的数据,即一个namenode(管理节点)和多个datanode(工作节点)。namenode管理文件系统的命名空间,它维护着系统数及整棵树内所有的文件和目录,这些信息以两个形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件,namenode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时根据节点信息重建。

客户端(client)代表用户通过与namenode和datanode交互来访问整个系统。客户端提供一个类似POSIX(可移植操作系统界面)的文件系统结构,因此用户编程时无需知道namenode和datanode也可以实现功能。

datanode是文件系统的工作节点,他们根据需要存储并检索数据块(blocks),并且定期向namenode发送他们所存储的数据块的列表。

Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)_第1张图片

客户:听不懂,说人话!

程序猿:额,我们现在将咱们的大数据机房设想成一个大仓库,仓库很大,有一本账单记录着仓库所有货架的商品,每一个货架上都放了很多货物,不过这些货物有一个特点,即大小都一致,并且货架也有一个本货架的清单,记录着本货架的商品,每当货架中的货物有变动,这个清单也会一起变,并且还会记录在主清单中。
在这里,namenode就类似仓库的主账单(保存了所有货物的记录),datanode就像是货架的清单(保存了本货架的物品记录),每个货架上的每一个货物就是数据块,数据块的大小是固定的(默认是128M)。

Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)_第2张图片

HDFS的常用命令

接下来我们来了解一下一些常用的文件系统操作,例如:读取文件,新建目录,移动文件,删除数据,列出目录,等等。你可以在命令行中输入hadoop fs -help命令读取每个命令的详细帮助文件。

现在请跟着我一起,在Linux环境下对Hadoop进行文件系统操作,来体验一下Hadoop的使用。

新建目录:

在本地和hadoop中分别创建文件夹:

本地创建目录:

image.png

hadoop创建目录:

Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)_第3张图片

上传文件至dfs:

切换到本地input目录下,创建文件并添加数据:hello hadoop

image.png

将该文件上传至hadoop:使用hadoop fs -put <要上传的文件> 命令

image.png

查看上传到HDFS的文件:

image.png

移动与删除

列出HDFS中的目录和文件:

Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)_第4张图片

Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)_第5张图片

helloworld.txt移动到根目录;

Hadoop大数据入门到实战(第四节) - HDFS文件系统(使用)_第6张图片

删除helloworld.txt

image.png

hadoop fs -rm 命令只能删除文件或者空文件夹,如果要用这个命令去删除非空文件夹就会非常麻烦。

和Linux中递归删除一致,我们在-rm之后加入一个-r即可,用-rmr也可。

下表列出了Hadoop常用的shell命令,在之后使用的时候可以作为参考。

选项名称 使用格式 含义
-ls -ls <路径> 查看指定路径的当前目录结构
-lsr -lsr <路径> 递归查看指定路径的目录结构
-du -du <路径> 统计目录下个文件大小
-dus -dus <路径> 汇总统计目录下文件(夹)大小
-count -count [-q] <路径> 统计文件(夹)数量
-mv -mv <源路径> <目的路径> 移动
-cp -cp <源路径> <目的路径> 复制
-rm -rm [-skipTrash] <路径> 删除文件/空白文件夹
-rmr -rmr [-skipTrash] <路径> 递归删除
-put -put <多个 linux 上的文件> 上传文件
-copyFromLocal -copyFromLocal <多个 linux 上的文件> 从本地复制
-moveFromLocal -moveFromLocal <多个 linux 上的文件> 从本地移动
-getmerge -getmerge <源路径> 合并到本地
-cat -cat 查看文件内容
-text -text 查看文件内容
-copyToLocal -copyToLocal [-ignoreCrc] [-crc] [hdfs 源路径] [linux 目的路径] 从HDFS复制到本地
-moveToLocal -moveToLocal [-crc] 从HDFS移动到本地
-mkdir -mkdir 创建空白文件夹
-setrep -setrep [-R] [-w] <副本数> <路径> 修改副本数量
-touchz -touchz <文件路径> 创建空白文件

学以致用

在命令行中启动Hadoop,进行如下操作。
- 在HDFS中创建/usr/output/文件夹;
- 在本地创建hello.txt文件并添加内容:“HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。”;
- 将hello.txt上传至HDFS的/usr/output/目录下;
- 删除HDFS的/user/hadoop目录;
- 将Hadoop上的文件hello.txt从HDFS复制到本地/usr/local目录。


未完待续…

你可能感兴趣的:(大数据,linux,Hadoop,hdfs,java)