当前位置: 移动技术网 > IT编程>开发语言>Java > Hadoop分布系统入门(一):HDFS篇

Hadoop分布系统入门(一):HDFS篇

2020年07月17日  | 移动技术网IT编程  | 我要评论

Hadoop是什么?

答:Hadoop 是一个由 Apache 基金会所开发的开源分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理。
Hadoop技术生态圈汇总

HDFS是什么?

答:Hadoop 生态圈的基本组成部分是 Hadoop 分布式文件系统(HDFS)。HDFS 是一种数据分布式保存机制,数据被保存在计算机集群上。数据写入一次,读取多次。

HDFS的特点

  • HDFS文件系统可以储存超大文件,每个磁盘都有默认的数据块大小,块一般为 512个字节。HDFS是一种文件系统,自身也有块(block)的概念,其文件块要比普通单一磁盘上文件系统大的多,默认是64MB。HDFS上的块之所以设计的如此之大,其目的是为了最小化寻址开销。
  • HDFS文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块并不需要存储在一个磁盘上,因此可以利用集群上任意一个磁盘进行存储,由于具备这种分布式存储的逻辑,所以可以存储超大的文件。
  • 一次写入,多次读取。一个文件经过创建、写入和关闭之后就不需要改变,这个假设简化了数据一致性的问题,同时提高数据访问的吞吐量。
  • Hadoop 的设计对硬件要求低,无需昂贵的高可用性机器上,因为在 HDFS 设计中充分考虑到了数据的可靠性、安全性和高可用性。
  • HDFS不适用于实时查询这种对延迟要求高的场景。
  • HDFS不适用于保存大量小文件(小于64MB)
  • 为了保证并发性,HDFS需要一次写入多次读取,目前不支持多用户写入,若要修改,也是通过追加的方式添加到文件的末尾处
  • HDFS适合存储半结构化和非结构化数据

如果数据刚好满足HDFS不适合的情况可以考虑使用HBase进行保存处理,比如低延迟、小文件、易更改、结构化、少量级数据更适合使用HBase。

HDFS的体系架构?

答:HDFS是一个主从体系架构,由于分布式储存的性质,所以集群拥有两类节点。

  • NamenNode:通常只有一个作为中心服务器的角色,负责管理存储和检索多个DataNode的实际数据所需要的所有元数据。
  • DataNode:文件系统中真正储存数据的地方,在NameNode 统一调度下进行数据块的创建、删除和复制。

在这里插入图片描述

HDFS读取和写入流程?

读文件的过程:

在这里插入图片描述

  1. 首先从Client通过File System的Open函数打开文件。
  2. Distributed File System(DFS)用RPC调用NameNode节点,NameNode 节点返回保存数据块的数据节点的地址。
  3. DFS返回FSDataInputStream给客户端,用来读取数据。
  4. 客户端调用stream的 **read()**函数开始读取数据。DFSInputStream连接保存此文件第一个数据块的最近的数据节点。
  5. DataNode 从数据节点读到客户端(client),当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
  6. 当客户端读取完毕数据的时候,调用FSDataInputStreamclose 函数。
  7. 在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。失败的数据节点将被记录,以后不再连接。

写文件的过程:

  1. 客户端调用 create()来创建文件,Distributed File System 用 RPC 调用 NameNode节点,在文件系统的命名空间中创建一个新的文件。NameNode 节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
  2. Distributed File System 返回 DFSOutputStream,客户端用于写数据。
  3. 客户端写入数据,DFSOutputStream 将数据分成块,写入 Data Queue。
  4. Data Queue 由 DataStreamer 读取,并通知 NameNode 节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个Pipeline 里。
  5. Data Streamer 将数据块写入Pipeline 中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。
  6. DFSOutputStream 为发出去的数据块保存了Ack Queue,等待Pipeline 中的数据节点告知数据已经写入成功。

HDFS的基础操作命令

打印文件列表:ls命令

hadoop fs -ls hdfs:/ # 标准写法
hadoop fs -ls / # 默认HDFS系统下的根目录
hadoop  fs -ls /package/test/ #打印HDFS系统下指定的子目录

上传文件、目录:put、copyFromLoal命令

# 上传新文件:
hdfs fs -put file:/root/test.txt hdfs: / #上传本地test.txt文件到HDFS根目录, HDFS 根目录须无同名文件,否则“File exists” 
hdfs fs -put test.txt /test2.txt #上传并重命名文件。 
hdfs fs -put test1.txt test2.txt hdfs:/ #一次上传多个文件到HDFS路径。

# 上传文件夹:
hdfs fs -put mypkg /newpkg #上传并重命名了文件夹。

#覆盖上传: 
hdfs fs -put -f /root/test.txt / #如果HDFS目录中有同名文件会被覆盖
#上传文件并重命名: 
hadoop fs -copyFromLocal file:/test.txt hdfs:/test2.txt
#覆盖上传: 
hadoop fs -copyFromLocal -f test.txt /test.txt

下载文件、目录:get、copyToLocal命令

#拷贝文件到本地目录: 
hadoop fs -get hdfs:/test.txt file:/root/
#拷贝文件并重命名,可以简写: 
hadoop fs -get /test.txt /root/test.txt
#拷贝文件到本地目录: 
hadoop fs -copyToLocal hdfs:/test.txt file:/root/
#拷贝文件并重命名,可以简写: 
hadoop fs -copyToLocal /test.txt /root/test.txt

拷贝文件、目录:cp

#从本地到HDFS,同put 
hadoop fs -cp file:/test.txt hdfs:/test2.txt
#从HDFS到HDFS 
hadoop fs -cp hdfs:/test.txt hdfs:/test2.txt hadoop fs -cp /test.txt /test2.txt

移动文件:mv

hadoop fs -mv hdfs:/test.txt hdfs:/dir/test.txt 
hadoop fs -mv /test.txt /dir/test.txt

删除文件、目录

#删除指定文件 
hadoop fs -rm /a.txt
#删除全部txt文件 
hadoop fs -rm /*.txt
#递归删除全部文件和目录 
hadoop fs -rm -R /dir/

读取文件:cat、tail

hadoop fs -cat /test.txt #以字节码的形式读取 
hadoop fs -tail /test.txt

创建空文件、文件夹:touchz、mkdir

hadoop fs - touchz /newfile.txt
hadoop fs -mkdir /newdir /newdir2 #可以同时创建多个 
hadoop fs -mkdir -p /newpkg/newpkg2/newpkg3 #同时创建父级目录

获取逻辑空间文件、目录大小:du

hadoop fs - du / #显示HDFS根目录中各文件和文件夹大小 
hadoop fs -du -h / #以最大单位显示HDFS根目录中各文件和文件夹大小
hadoop fs -du -s / #仅显示HDFS根目录大小。即各文件和文件夹大小之和

总结

HDFS是一个分布式文件的储存系统,写入和读取方法也符合分布式数据储存的逻辑。在Haddoop内对HDFS数据的上传、移动、删除、复制、新建基本与Linux操作相同,因此学习成本会很低。

参考文献

  1. 《Hadoop大数据实战手册》.林中天
  2. 《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》.蔡斌、陆湘萍
  3. 《Hadoop权威指南(第2版)》

本文地址:https://blog.csdn.net/Kingsleyandher/article/details/107380412

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网