在当今的企业环境中,单台计算机的存储容量通常不足以应对海量数据的需求,因此需要跨机器进行存储。这种跨机器统一管理的文件系统被称为分布式文件系统。
HDFS(Hadoop Distributed File System)是Apache Hadoop项目的一部分,专门用于存储大规模数据(如TB和PB级别),它以HDFS作为其存储系统。HDFS通过多台计算机存储文件,并提供统一的访问接口。
HDFS的设计灵感来源于谷歌的论文《The Google File System》。
HDFS由四个基本组件组成:HDFS Client、NameNode、DataNode和Secondary NameNode。
客户端(Client)负责将文件分割成多个Block,并上传到HDFS。它还提供管理和访问HDFS的命令,如启动或关闭HDFS。
NameNode作为HDFS的管理者,负责管理元数据(文件路径、文件大小、文件名、文件权限和Block切片信息)。它还管理Block的副本策略,默认设置为3个副本,并处理客户端的读写请求。
DataNode是执行实际操作的节点,负责存储实际的数据块,执行数据块的读写操作,并定期向NameNode报告Block信息。
Secondary NameNode不是NameNode的备份,不能在NameNode故障时立即接替服务,但它能分担NameNode的工作量,并在紧急情况下辅助恢复NameNode。
HDFS设计为在庞大的集群中可靠地存储超大文件。每个文件被存储为多个数据块(Block),除了最后一个,所有的数据块大小相同。为了容错,每个文件的Block都有多个副本。文件的Block大小和副本系数是可配置的。在Hadoop 2中,文件的Block大小默认设置为128M(134217728字节)。
如图所示,一个300M的a.txt文件上传到HDFS时,会被分割成128M的Block,不足128M的部分会单独存储在一个Block中。
HDFS的基本命令如下:
| 命令 | 说明 |
|---|---|
| hadoop fs -mkdir /park | 在HDFS根目录下创建park目录 |
| hadoop fs -ls / | 查看HDFS根目录下的目录 |
| hadoop fs -put /root/1.txt /park | 将Linux系统root目录下的1.txt上传到HDFS的park目录 |
| hadoop fs -get /park/jdk /home | 从HDFS的park目录下载文件到Linux的home目录 |
| hadoop fs -rm /park/文件名 | 删除HDFS的park目录下的指定文件 |
| hadoop fs -rmdir /park | 删除park目录,但前提是目录内没有文件 |
| hadoop fs -rmr /park | 删除park目录,即使目录内有文件 |
| hadoop fs -cat /park/a.txt | 查看park目录下的a.txt文件内容 |
| hadoop fs -tail /park/a.txt | 查看park目录下a.txt文件末尾的数据 |
| hadoop jar xxx.jar | 执行jar包 |
HDFS的简单使用示例:假设我们的HDFS根目录是hdfs://192.168.147.128:9820,我们尝试在根目录下创建一个名为user的子目录,命令如下:
[hadoop@node01 ~]$ hadoop fs -mkdir /user
然后在Hadoop页面打开HDFS。
此时,你将看到新创建的user文件夹。
接下来,将一个大小为300M的文件上传到HDFS的user文件夹中。
然后在Hadoop页面上可以看到刚刚上传的文件。
此时,文件被分成了三个Block。
点击download按钮,即可下载文件。
以上就是二、分布式文件系统HDFS及其简单使用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号