赞
踩
1、分布式的基础架构
大数据体系中,分布式的调度主要有2类架构模式:
①去中心化模式:没有明确的中心。众多服务器之间基于特地规则进行同步协跳
②中心化模式(主从模式):有一个中心节点(服务器)来统筹其他服务器的工作,统一指挥,统一调派,避免混乱
注:Hadoop框架,就是一个典型的主从模式(中心化模式)架构的技术框架。
1、HDFS概述
HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一。
HDFS是一个典型的主从模式架构
2、HDFS的基础架构
①NameNode:HDFS系统的主角色,是一个独立的进程,负责管理HDFS整个文件系统,负责管理DataNode
②DataNode:HDFS系统的从角色,是一个独立进程,主要负责数据的存储,即存入数据和取出数据
③SecondaryNameNode:NameNode的辅助,是一个独立进程,主要帮助NameNode完成元数据整理工作(打杂)
注:一个典型的HDFS集群,就是由1个DataNode加若干个(至少一个)DataNode组成
具体步骤省略
补充点:
1、Hadoop安装包目录结构
各个文件夹含义如下
• bin ,存放 Hadoop 的各类程序(命令)• etc ,存放 Hadoop 的配置文件• include , C 语言的一些头文件• lib ,存放 Linux 系统的动态链接库( .so 文件)• libexec ,存放配置 Hadoop 系统的脚本文件( .sh 和 .cmd )• licenses-binary ,存放许可证文件• sbin ,管理员程序( super bin )share,存放二进制源码(Ja2\va jar包)
2、查看HDFS WEBUI
例:http://node1:9870,即可查看到hdfs文件系统的管理网页。
①一键启停HDFS集群
$HADOOP_HOME/sbin/start(stop)-dfs.sh
②单进程启停
$HADOOP_HOME/sbin/hadoop-daemon.sh
此脚本可以单独控制所在机器的进程的启停
$HADOOP_HOME/bin/hdfs --daemon
此程序也可以单独控制所在机器的进程的启停
①HDFS文件系统基本信息
HDFS作为分布式存储的文件系统,有其对数据的路径表达方式。
HDFS同Linux系统一样,均是以/作为根目录的组织形式
如何区分?
- Linux:file:///
- HDFS:hdfs://namenode:port/
如上路径:
- Linux:file:///usr/local/hello.txt
- HDFS:hdfs://node1:8020/usr/local/hello.txt
协议头file:///或hdfs://node1:8020/可以省略
- 需要提供Linux路径的参数,会自动识别为file://
- 需要提供HDFS路径的参数,会自动识别为hdfs://
除非明确需要写或不写会有BUG,否则一般不用写协议头
hadoop命令(老版本用法):hadoop fs [generic options]
hdfs命令(新版本用法):hdfs fs [generic options]
hadoop fs -mkdir [-p] <path> ...
hdfs dfs -mkdir [-p] <path> ...
path:为待创建的目录
-p:与Linux mkdir -p一致,它会沿着路径创建父目录
hadoop fs -ls [-h] [-R] [<path> ...]
hdfs dfs -ls [-h] [-R] [<path> ...]
path:指定目录路径
-h:人性化显示文件size
-R:递归查看指定目录及其子目录
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>
-f:覆盖目标文件(已存在下)
-p:保留访问和修改时间,所有权和权限
localsrc:本地文件系统(客户端所在机器)
dst:目标文件系统(HDFS)
读取指定文件全部内容,显示在标准输出控制台
hadoop fs -cat <src> ...
hdfs dfs -cat <src> ...
读取大文件可以使用管道符配合more
hadoop fs -cat <src> | more
hdfs dfs -cat <src> | more
hadoop fs -get [-f] [-p] <src> ... <localdst>
hdfs dfs -get [-f] [-p] <src> ... <localdst>
下载文件到本地文件系统指定目录,localdst必须是目录
-f:覆盖目标文件(已存在下)
-p:保留访问和修改时间,所有权和权限。
hadoop fs -cp [-f] <src> ... <src>
hdfs dfs -cp [-f] <src> ... <src>
-f:覆盖目标文件(已存在下)
hadoop fs -appendToFile <localsrc> ... <dst>
hdfs dfs -appendToFile <localsrc> ... <dst>
将所有给定本地文件的内容追加到给定dst文件
dst如果文件不存在,将创建该文件
如果<localsrc>为-,则输入为从标准输入中读取
hadoop fs -mv <src> ... <dst>
hdfs dfs -mv <src> ... <dst>
移动文件到指定文件夹下
可以使用该命令移动数据,重命名文件的名称
hadoop fs -rm -r [-skipTrash] URI [URI ...]
hdfs dfs -rm -r [-skipTrash] URI [URI ...]
删除指定路径的文件夹
-skipTrash跳过回收站,直接删除
注:回收站功能默认关闭,如果要开启需要在core-site.xml内配置
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value>
</property>
无需重启集群,在哪个机器配置的,在哪个机器执行命令就生效。回收站默认位置在:/user/用户名(hadoop)/.Trash
HDFS shell其他命令
①HDFS文件系统使用和Linux一样逻辑的权限控制体系
②Linux的超级用户是root
HDFS文件系统的超级用户:是启动namenode的用户
③修改权限
hadoop fs -chown [-R] root:root /xxx.txt
hdfs dfs -chown [-R] root:root /xxx.txt
hadoop fs -chmod [-R] 777 /xxx.txt
hdfs dfs -rm -r [-skipTrash] URI [URI ...]
1、存储原理
①分布式文件存储:每个服务器(节点)存储文件的一部分
②HDFS设定统一的管理单位--block块(HDFS最小的存储单位,每个256MB,可修改大小),来解决文件大小不一,不利于统一管理的问题
③在HDFS上,数据block块可以有多个副本,来提高数据的安全性
2、fsck命令
hadoop fs -D dfs.replication=2 -put test.txt /tmp/
如上命令,就可以在上传test.txt的时候,临时设置其副本数为2
hadoop fs -setrep [-R] 2 path
如上命令,指定path的内容将会被修改为2个副本存储
-R: 可选,使用-R表示对子目录也生效
hdfs fsck path [-files [-blocks [-location]]]
fsck可以检查指定路径是否正常
-files: 可以列出路径内的文件状态
-files -blocks: 输出文件块报告(有几个块,多少副本)
-files -blocks -locations : 输出每一个block块的详情
hdfs默认设置为256MB一个块,也就是1GB文件会被划分为4个block存储
3、NameNode元数据
NameNode基于一批edits和一个fsimage文件的配合完成整个文件系统的管理和维护
edits文件: 是一个流水账文件,记录了hdfs中的每一次操作,以及本次操作影响的文件其对应的block
NameNode基于edits和FSInage的配合,完成整个文件系统文件的管理
①每次对HDFS的操作,均被edits文件记录
②edits达到大小上线后,开启新的edits记录
③定期进行edits的合并操作
如当前没有fsimage文件,将全部的edits合并为第一个fsimage
如当前已存在fsimage文件,将全部edits和已存在的fsimage进行合并,形成新的fsimage
对于元数据的合并,是一个定时过程,基于:
dfs.namenode.checkpoint.period, 默认3600(秒)即1小时
dfs.namenode.checkpoint.txns, 默认1000000,即100W次事务
只要有一个达到条件就执行
检查是否达到条件,默认60秒检查一次,基于:
dfs.namenode.checkpoint.check.period, 默认60(秒),来决定
SecondaryNameNode会通过http从NameNode拉取数据(edits和fsimage),然后合并完成后提供给NameNode使用.
总结:
1、NameNode基于---edits记录每次操作、fsimage记录某一个时间节点前的当前文件系统全部文件的状态和信息,维护整个文件系统元数据
2、edits文件会被合并到fsimage中,这个合并由SecondaryNameNode来操作
3、fsimage记录的内容是:
4、HDFS数据的读写流程
①数据写入流程
步骤:
1、客户端向NameNode发起请求
2、NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址
3、客户端向指定的DataNode发送数据包
4、被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode
5、如上图,DataNode1复制给DataNode2,然后基于DataNode2复制给Datanode3和DataNode4
6、写入完成客户端通知NameNode,NameNode做元数据记录工作
关键信息点:
②数据读取流程
步骤:
1、客户端向NameNode申请读取某文件
2、 NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表
3、客户端拿到block列表后自行寻找DataNode读取即可
关键点:
数据同样不通过NameNode提供
NameNode提供的block列表,会基于网络距离计算尽量提供离客户端最近的,这是因为1个block有3份,会尽量找离客户端最近的那一份让其读取
注:
最近的距离就是在同一台机器,其次就是同一个局域网(交换机),再其次就是跨越交换机,再其次就是跨越数据中心
HDFS内置网络距离计算算法,可以通过IP地址、路由表来推断网络距离
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。