内容简介:HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,首先之所以选择HDFS来存储数据,是具有如下优势:HDFS也有不适合的场景:
目录
-
HDFS是什么
-
HDFS的优缺点
-
HDFS的框架
-
HDFS的读写流程
-
HDFS命令
-
HDFS参数
1. HDFS是什么
HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,首先 它是一个文件系统 ,用于存储文件,通过目录树来定位文件位置;其次, 它是分布式的 ,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
2.HDFS的优缺点
之所以选择HDFS来存储数据,是具有如下优势:
| No | 优势 | 描述 |
| 1 | 高容错性 |
|
| 2 | 适合批处理 |
|
| 3 | 适合大数据处理 |
|
| 4 | 流式文件访问 |
|
| 5 | 可构建在廉价机器上 |
|
HDFS也有不适合的场景:
| No | 缺点 | 描述 |
| 1 | 低延时数据访问 |
|
| 2 | 小文件存储 |
|
| 3 | 并发写入、文件随机修改 |
|
3. HDFS框架结构
HDFS 采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。下面我们分别介绍这四个组成部分。
| No | 角色 | 功能描述 |
| 1 | Client:就是客户端 |
|
| 2 | NameNode:就是 master,它是一个主管、管理者 |
|
| 3 | DataNode:就是Slave。NameNode 下达命令,DataNode 执行实际的操作 |
|
| 4 | Secondary NameNode:并非 NameNode 的热备。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务 |
|
4. HDFS的读写流程
4.1. HDFS的块大小
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize )来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。
如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。 默认的块大小128MB 。
块的大小:10ms*100*100M/s = 100M
4.2. HDFS写数据流程
1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。
2)namenode返回是否可以上传。
3)客户端请求第一个 block上传到哪几个datanode服务器上。
4)namenode返回3个datanode节点,分别为dn1、dn2、dn3。
5)客户端请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成
6)dn1、dn2、dn3逐级应答客户端
7)客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答
8)当一个block传输完成之后,客户端再次请求namenode上传第二个block的服务器。(重复执行3-7步)
4.3. HDFS读数据流程
1)客户端向namenode请求下载文件,namenode通过查询元数据,找到文件块所在的datanode地址。
2)挑选一台datanode(就近原则,然后随机)服务器,请求读取数据。
3)datanode开始传输数据给客户端(从磁盘里面读取数据放入流,以packet为单位来做校验)。
4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。
5.HDFS命令
1)基本语法
bin/hadoop fs 具体命令
2)常用命令实操
(1)-help:输出这个命令参数
bin/hdfs dfs -help rm
(2)-ls: 显示目录信息
hadoop fs -ls /
(3)-mkdir:在hdfs上创建目录
hadoop fs -mkdir -p /aaa/bbb/cc/dd
(4)-moveFromLocal从本地剪切粘贴到hdfs
hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
(5)-moveToLocal:从hdfs剪切粘贴到本地(尚未实现)
hadoop fs -help moveToLocal
-moveToLocal <src> <localdst> :
Not implemented yet
(6)--appendToFile :追加一个文件到已经存在的文件末尾
hadoop fs -appendToFile ./hello.txt /hello.txt
(7)-cat :显示文件内容
(8)-tail:显示一个文件的末尾
hadoop fs -tail /weblog/access_log.1
(9)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
hadoop fs -chmod 666 /hello.txt
hadoop fs -chown someuser:somegrp /hello.txt
(10)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去
hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/
(11)-copyToLocal:从hdfs拷贝到本���
hadoop fs -copyToLocal /user/hello.txt ./hello.txt
(12)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径
hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(13)-mv:在hdfs目录中移动文件
hadoop fs -mv /aaa/jdk.tar.gz /
(14)-get:等同于copyToLocal,就是从hdfs下载文件到本地
hadoop fs -get /user/hello.txt ./
(15)-getmerge :合并下载多个文件,比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,...
hadoop fs -getmerge /aaa/log.* ./log.sum
(16)-put:等同于copyFromLocal
hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(17)-rm:删除文件或文件夹
hadoop fs -rm -r /aaa/bbb/
(18)-rmdir:删除空目录
hadoop fs -rmdir /aaa/bbb/ccc
(19)-df :统计文件系统的可用空间信息
hadoop fs -df -h /
(20)-du统计文件夹的大小信息
hadoop fs -du -s -h /user/data/wcinput
188.5 M /user/data/wcinput
hadoop fs -du -h /user/data/wcinput
188.5 M /user/data/wcinput/hadoop-2.7.2.tar.gz
97 /user/data/wcinput/wc.input
(21)-count:统计一个指定目录下的文件节点数量
hadoop fs -count /aaa/
hadoop fs -count /user/data/wcinput
1 2 197657784 /user/data/wcinput
嵌套文件层级; 包含文件的总数
(22)-setrep:设置hdfs中文件的副本数量
hadoop fs -setrep 3 /aaa/jdk.tar.gz
这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量。如果只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
6.HDFS相关参数
| No | 参数名称 | 默认值 | 所属参数文件 | 描述 |
| 1 | dfs.block.size, dfs.blocksize |
134217728 | hdfs-site.xml | 以字节计算的新建 HDFS 文件默认块大小。请注意该值也用作 HBase 区域服务器 HLog 块大小。 |
| 2 | dfs.replication | 3 | hdfs-site.xml | HDFS文件的数据块复制份数。 |
| 3 | dfs.webhdfs.enabled | TRUE | hdfs-site.xml | 启用 WebHDFS 界面,启动50070端口。 |
| 4 | dfs.permissions | TRUE | hdfs-site.xml | HDFS文件权限检查。 |
| 5 | dfs.datanode.failed.volumes.tolerated | 0 | hdfs-site.xml | 能够导致DN挂掉的坏硬盘最大数,默认0就是只要有1个硬盘坏了,DN就会shutdown。 |
| 6 | dfs.data.dir, dfs.datanode.data.dir |
xxx,xxx | hdfs-site.xml | DataNode数据保存路径,可以写多块硬盘,逗号分隔 |
| 7 | dfs.name.dir, dfs.namenode.name.dir |
xxx,xxx | hdfs-site.xml | NameNode本地元数据存储目录,可以写多块硬盘,逗号分隔 |
| 8 | fs.trash.interval | 1 | core-site.xml | 垃圾桶检查频度(分钟)。要禁用垃圾桶功能,请输入0。 |
| 9 | dfs.safemode.min.datanodes | 0 | hdfs-site.xml | 指定在名称节点存在 safemode 前必须活动的 DataNodes 数量。输入小于或等于 0 的值,以在决定启动期间是否保留 safemode 时将活动的 DataNodes 数量考虑在内。值大于群集中 DataNodes 的数量时将永久保留 safemode。 |
| 10 | dfs.client.read.shortcircuit | TRUE | hdfs-site.xml | 启用 HDFS short circuit read。该操作允许客户端直接利用 DataNode 读取 HDFS 文件块。这样可以提升本地化的分布式客户端的性能 |
| 11 | dfs.datanode.handler.count | 3 | hdfs-site.xml | DataNode 服务器线程数。默认为3,较大集群,可适当调大些,比如8。 |
| 12 | dfs.datanode.max.xcievers, dfs.datanode.max.transfer.threads | 256 | hdfs-site.xml | 指定在 DataNode 内外传输数据使用的最大线程数,datanode在进行文件传输时最大线程数 |
| 13 | dfs.balance.bandwidthPerSec, dfs.datanode.balance.bandwidthPerSec | 1048576 | hdfs-site.xml | 每个 DataNode 可用于平衡的最大带宽。单位为字节/秒 |
以上参数中可能有2个名称,前面一个是老版本1.x的后面的是新版本2.x的。
使用HDFS dfs命令对文件进行增删改查操作 https://www.linuxidc.com/Linux/2018-08/153641.htm
Hadoop集群间的HDFS文件拷贝 https://www.linuxidc.com/Linux/2017-09/146879.htm
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-10/154604.htm
以上所述就是小编给大家介绍的《初识HDFS原理及框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Django框架–bootstrap初识
- 初识gauge自动化测试框架(二)
- 初识 Knative: 跨平台的 Serverless 编排框架
- 【Zinx第二章-初识Zinx框架】Golang轻量级并发服务器框架
- 二、【Zinx第二章-初识Zinx框架】Golang轻量级并发服务器框架
- 初识Redis
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms
Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft / Addison Wesley / 1983-1-11 / USD 74.20
The authors' treatment of data structures in Data Structures and Algorithms is unified by an informal notion of "abstract data types," allowing readers to compare different implementations of the same......一起来看看 《Data Structures and Algorithms》 这本书的介绍吧!