Hadoop篇_HDFS

本文详细介绍了Hadoop的分布式文件系统HDFS,包括其组织架构(Namenode、Client、Datanode和Secondary Namenode)、读写流程、异常处理策略、配置细节以及HDFS的常用命令。重点阐述了HDFS的命名空间管理、副本放置策略、数据块读写过程中的容错机制等核心概念。
摘要由CSDN通过智能技术生成

一、Hadoop篇_HDFS

(一)学习指引

1. 掌握HDFS组织架构及其作用

2. 掌握HDFS读写流程,及读写异常时HDFS的操作

3. 掌握HDFS常见命令

(二)内容介绍

1、HDFS的组织架构及作用

HDFS主要由四个部分组成,分别为Client,nameNode、DataNode、以及Secondary NameNode组成。

1.1 namenode
1.1.1 作用
  • 管理HDFS的名称空间(Namespace管理):负责管理文件系统中的树状目录结构以及文件与数据块的映射关系
  • 管理数据块信息:负责管理文件系统中文件的物理块与实际存储位置的映射关系BlockMap
  • 集中式缓存管理:从Hadoop2.3开始,支持datanode将文件缓存到内存中,这部分缓存通过NN集中管理
  • 配置副本策略
  • 处理客户端请求
1.1.2 存储结构
  • 内存:Namespace数据,BlockMap数据,其它信息
  • 文件:
    1)已持久化的namespace数据:FsImage
    2)持久化的namespace操作:Edits
1.2 Client(客户端)
  • 文件切分:文件上传HDFS的时候,client根据需求将文件切分成一个一个的小数据块(block),然后进行存储。
  • 每个小数据块(block)在其他服务器上都有副本,client会与namenode进行通信,获取文件及其副本位置,为以后做打算。
  • 与DataNode进行通信,读取或写入数据。
  • client可以管理HDFS,比如启动或关闭。
1.3 DataNode(执行者)

DataNode主要就是存储数据块和读写数据块用的:

  • 实际存储的数据块(block)
  • 执行数据块的读写操作
1.4 secondary nameNode

主要作用如下:

  • 定期合并nameNode中的fsimage(映像文件)和fsedits(日志),并推送给nameNode,避免nameNode中的fsedits过大。
  • 在紧急情况下,可辅助恢复nameNode。

2、HDFS写流程以及常见问题

2.1 HDFS写流程

在这里插入图片描述

  1. client客户端发送上传请求,通过RPC与namenode建立通信,namenode检查该用户是否有上传权限,以及上传的文件是否在hdfs对应的目录下重名,如果这两者有任意一个不满足,则直接报错,如果两者都满足,则返回给客户端一个可以上传的信息

  2. client根据文件的大小进行切分,默认128M一块,切分完成之后给namenode发送请求第一个block块上传到哪些服务器上

  3. namenode收到请求之后,根据网络拓扑和机架感知以及副本机制进行文件分配,返回可用的DataNode的地址

    注:Hadoop 在设计时考虑到数据的安全与高效, 数据文件默认在 HDFS 上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份, 不同机架的某一节点上一份

  4. 客户端收到地址之后与服务器地址列表中的一个节点如A进行通信,本质上就是RPC调用,建立pipeline,A收到请求后会继续调用B,B在调用C,将整个pipeline建立完成,逐级返回client

  5. client开始向A上发送第一个block(先从磁盘读取数据然后放到本地内存缓存),以packet(数据包,64kb)为单位,A收到一个packet就会发送给B,然后B发送给C,A每传完一个packet就会放入一个应答队列等待应答

  6. 数据被分割成一个个的packet数据包在pipeline上依次传输,在pipeline反向传输中,逐个发送ack(命令正确应答),最终由pipeline 中第一个 DataNode 节点 A 将 pipelineack 发送给 Client

  7. 当一个 block 传输完成之后, Client 再次请求 NameNode 上传第二个 block ,namenode重新选择三台DataNode给client

2.2 HDFS写流程常见问题及解决方式
1、如果在写数据过程中,如果其中一个 DataNode 突然挂掉了怎么办
  • 客户端上传文件时与DataNode建立pipeline管道,管道正向是客户端向DataNode 发送的数据包,管道反向是 DataNode 向客户端发送 ack 确认,也就是正确接收到数据包之后发送一个已确认接收到的应答。
  • 当 DataNode 突然挂掉了,客户端 接收不到这个 DataNode 发送的 ack 确认 ,客户端会通知 NameNode,NameNode 检查该块的副本与规定的不符, NameNode 会通知 DataNode 去复制副本,并将挂掉的 DataNode 作下线处理,不 再让它参与文件上传与下载。

3、HDFS读流程以及常见问题

3.1 HDFS读流程

在这里插入图片描述

  1. client向namenode发送RPC请求。请求文件block的位置

  2. namenode收到请求之后会检查用户权限以及是否有这个文件,如果都符合,则会视情况返回部分或全部的block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址; 这些返回的 DN 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后

  3. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短路读取特性)

  4. 底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕

  5. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表

  6. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的DataNode 继续读

  7. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据

  8. 最终读取来所有的 block 会合并成一个完整的最终文件

3.2 HDFS读流程常见问题及解决方式
1、HDFS 在读取文件的时候,如果其中一个块突然损坏了怎么办

客户端读取完 DataNode 上的块之后会进行 checksum 验证,也就是把客户端读 取到本地的块与 HDFS 上的原始块进行校验,如果发现校验结果不一致,客户端 会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读取。

4、HDFS中的配置及常见问题

1、副本放置策略

第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
第二个副本:放置在于第一个副本不同的 机架的节点上。

2、文件与数据块

块的大小在创建文件的时候可以指定,不指定则使用系统默认的设置(在hadoop2里面是128M)
一个文件有多少个块:取决于文件的大小与块的大小
920M的文件,块的大小为100M,则总共块的个数为10,前9个块占用的空间为100M,最后一个块占用的空间:20M。

5、HDFS中的shell命令

序号命令含义备注
1hadoop fs -mkdir /sanguo在根目录下创建sanguo文件路径
2hadoop fs -helo rm查找rm 命令的使用用法把本地文件上传到HDFS
3hadoop fs -moveFromLocal 路径1 路径2从本地剪切粘贴到HDFS
4hadoop fs -copyFromLocal 路径1 路径2从本地文件系统中拷贝文件到HDFS路径中从本地文件上传到HDFS
5hadoop fs -put 路径1 路径2从本地文件系统中拷贝文件到HDFS路径中生产环境中更习惯用put
6hadoop fs -appendToFile 路径1文件 路径2文件追加一个文件到已经存在的文件末尾
7hadoop fs -copyToLocal 路径1文件 路径2文件从HDFS拷贝到本地下载
8hadoop fs -get 路径1文件 路径2文件从HDFS拷贝到本地生产环境更习惯用get
9hadoop fs -ls 文件夹显示文件信息
10hadoop fs -cat 文件显示文件内容
11hadoop fs -chmod/-chown/-chgrp 数字权限 文件修改文件所属权限
12hadoop fs -cp从HDFS的一个路径拷贝到HDFS文件的另一个路径
13hadoop fs -mv 路径1 路径2在HDFS目录中移动文件
14hadoop fs -tail 文件显示一个文件末尾1kb的数据
15hadoop fs -rm 文件/文件夹删除文件或文件夹
16hadoop fs -rm -r 文件/文件夹递归删除目录以及目录里的内容
17hadoop fs -du -h -s 文件/文件夹统计文件夹的大小信息第1个数字表示文件大小,第2个数字=第1个数字*副本数
18hadoop fs -setrep 文件/文件夹设置HDFS中文件的副本数量看DataNode数量以及设备数,3台设备,副本数最多是3
### 回答1: 这个错误提示表示 Hadoop 找不到正确的 HDFS 安装路径。你需要检查 Hadoop 配置文件中的 hadoop_hdfs_home 参数是否正确设置,或者确认 HDFS 是否已经正确安装并设置了环境变量。 ### 回答2: Hadoop 是一款大数据处理框架,需要依赖 Hadoop HDFS 存储系统。在配置 Hadoop 环境时,需要设置环境变量 HADOOP_HDFS_HOME,以指定 Hadoop HDFS 的安装路径。当出现 "error: invalid hadoop_hdfs_home" 错误时,意味着系统无法识别该环境变量,即 Hadoop HDFS 安装路径无效。 解决该问题的方法是检查环境变量的设置是否正确。首先在命令行界面输入 echo $HADOOP_HDFS_HOME 命令,以检查系统是否能识别该环境变量。如果该命令无法输出正确的路径,则需要修改环境变量的设置。 可以在 ~/.bashrc 或 ~/.bash_profile 文件中添加以下环境变量设置语句: export HADOOP_HDFS_HOME=/path/to/hadoop-hdfs 其中,/path/to/hadoop-hdfsHadoop HDFS 的安装路径。设置好这个环境变量之后,可以输入 source ~/.bashrc 或 source ~/.bash_profile 命令,以使环境变量的改动生效。 另外,还可通过设置 Hadoop 的配置文件来修改 Hadoop HDFS 的安装路径。可以在 Hadoop 配置文件 core-site.xml 中添加以下配置: <property> <name>hadoop.hdfs.home</name> <value>/path/to/hadoop-hdfs</value> </property> 在以上配置中,/path/to/hadoop-hdfsHadoop HDFS 的安装路径。保存好配置文件后,重新启动 Hadoop,即可解决 "error: invalid hadoop_hdfs_home" 错误。 ### 回答3: 这个错误信息意味着在运行hadoop相关命令时,系统无法找到指定的hadoop_hdfs_home环境变量。hadoop_hdfs_home是一个关键的环境变量,用于指定hadoop分布式文件系统(HDFS)的安装目录。如果系统无法找到或者无法识别该环境变量,就会出现invalid错误提示。 要解决这个问题,可以尝试以下步骤: 1.检查hadoop_hdfs_home环境变量是否正确设置,可以通过运行echo $hadoop_hdfs_home命令来确认该环境变量的值是否正确。 2.如果hadoop_hdfs_home环境变量未设置,可以通过手动设置该变量或者运行hadoop-env.sh脚本来设置该变量。 3.如果hadoop_hdfs_home环境变量设置正确,但仍然无法正常运行hadoop相关命令,可以尝试重新安装hadoop,并确保正确配置了环境变量。 4.最后,如果你还是无法解决这个问题,可以查看系统日志文件或运行hadoop日志命令来查找更详细的信息和错误提示,以帮助你进一步解决该问题。 总之,如果出现invalid hadoop_hdfs_home错误提示,需要确认hadoop_hdfs_home环境变量设置是否正确,并根据具体情况采取适当措施,以解决此问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值