一.概论
1 一个开源,可靠的,可开展的用于分布式框架
2.本身用于离线分析的框架,对历史数据进行分析
二.模块
1.hadoop Common:基本模块
2 HDFS:用于存储数据
3 hadoop Yarn:任务调度和节点管理
4 hadoop MapReduce:用于并行发布式计算
5 hadoop Ozone:用于对象的存储
6 hadoop Submarine: 用于机器学习的引擎
三.版本
1. hadoop1.0 包含HDFS和MapReduce
2. hadoop2.0 包含HDFS,MapReduce 以及Yarn , 和Hadoop1不兼容
3. hadoop3.0 兼容hadoop2 ,新添了Ozone Submari
安装
1.单机模式:只能MapReduce
2 伪分布式:用一个机器模拟集群环境,启动Hadoop的所有的进程
3 全分布式:用多个机器
伪分布式的安装:
1,关闭防火墙
2. 配置主机名。需要注意的是Hadoop的集群中的主机名不能有_
3 配置hosts文件,将主机名和ip地址进行映射
4.配置ssh进行免密互通
5.reboot
6.目录下tar -xvf hadoop
7 进入Hadoop的安装目录的子目录etc/hadoop,配置Hadoop:cd hadoop2.7.1/etc/hadoop
8 配置hadoop-env.sh。core-stte.xml hdfs-site.xml 将mapred-site.xml.template复制为mapred-site.xml:
配置 mapred-site.xml yarn-site.xml slaves
9 配置hadoop的环境变量
10 格式化namenode:hadoop namenode -form
启动hadoop:start-all.sh
HDFS
1.是Hadoop的组件,用于完成分布式存储
2.在存储数据的数据全将数据切分,切出的数据就称为Block
3 分两种节点 NameNode负责记录 以及管理 DataNode
4 NameNode和Datanode是Hadoop的进程,在全分布式,NamaNode和DataNode部署在不同机架上
5.在HDFS,为了保证数据的完整性,将每一个Block进行备份,(副本) ,默认副本数量是3
特点:
1.能够存储超大文件--切块
2.能够快速的应对和校验故障 --心跳
3, 不建议存储大量的小文件
4,可靠的文件系统---复本
5 高吞吐量,允许多个客户端同时读写
6 一次写人,多次读取,不支持修改
7 做不到低延迟数据访问
8 不支持事务
Block
1.表示一个数据块,是HDFS中数据存储文件的最基本的存储单位
2.每一文件上传HDFS,都会切成一个或多个Block
3 Block 默认的大小在Hadoop1.0中是64M,在Hadoop2.0中是128M (不足 有多大存多大)
4.切块的意义:
存储超大文件,为了能够进行快速的备份
NameNode
1.负责管理DataNode和存储元数据
2.元数据包含: 文件存放路径 文件的切块数量 块的复本数量 复本与DataNode的关系
3.元数据维系内存(为了快速的查询)以及磁盘(为了崩溃恢复)
4 元数据的存储目录:有hadoop.tmp.dir来指定 /tmp/dfs/name/cu
5 元数据的存储文件是edits和fsimage
fsimage:用于记录元数据 edits:用于记录写操作
6.当有写请求时,NameNode会首先写该操作先写到磁盘上的edits文件中,当edits文件写成功后才会修改内存,并向客户端返回成功信号,而此时fsimage中的数据并没有发生改动。所以,fsimage中的数据并不是实时的数据,而是在达到条件时再进行更新,更新过程需要SecondaryNameNode参
7.edits文件和fsimage文件进行合并条件:
a.时间维度,当距离上一次合并达到指定时间在core-site,xml配置 默认1小时
b.空间维度 当edits 到达指定的大小指定大小 默认是64M
c. NameNode 重启
8.NamdeNode通过心跳机制来管理DataNode(DataNode定时,默认是3s 给NameNode发送心跳信号)
心跳信号---- 当前节点的状态,当前节点存储Block信息
9 如果NameNode长时间(默认是10min)没有收到DataNode的心跳,则认为这个DataNode已经lost,将这个DataNode上存储的Block再备份到其他的节点保证复本数量
10 NameNode 是HDFS的核心节点,在hadoop1.0 只能存在一个,在hadoop2.0的全分布式只能存在两个
11. 当NameNode重新启动,eidt和fsimage更新合并,然后将fsiamge中的元数据加载到内存中,等待dataNode的心跳(校验数据的总量是否正确),这个过程是安全模式 HDFS处在安全模式,不对外服务
12 当启动HDFS的时候,如果发现处在安全模式,需要等待一会儿,,成功会推出安全模式
13. 如果HDFS一直处在安全模式,说明数据遗失了,
14 在伪分布式,复本数量配置为1
DataNode
1 用于进行数据存储
2.数据存储是Block的形式存储在DataNode
3.DataNode每3s给NameNode发送心跳
回收站策略:
在HDFS中,当删除文件或者是目录,默认立即删除,在core-site.xml 加上fs.trash.interal 指定回收时间
SecondaryNameNode
辅助NameNode进行数据的合并,在hadoop2.0的全分布式,没有SecondaryNameNode被NameNode替换,元数据
的合并是发生在NameNode,在分布式。有SecondaryNameNode
扩展:
Federation HDFS 联邦HDFS
dfs目录
1.在NameNode进行格式化的时候出现
2.在dfs目录下有name ,data,nameSecondary 分别对应NameNode dataNode SecondaryNameNode的存储目录
3 当启动HDFS,在name目录下,会生成in_use.lock,该文件防止多次启动
8 上传文件在NameNode上的步骤:
9 hDFS,文件一旦上传,就不能更改
流程:
1.读取流程
1.客户端发起RPC请求到Namanode
2 NameNode收到请求,查看元数据,取到文件所对应Block存储地址,将这些节点地址放入一个队列返回客户端
3 客户端收到队列后,连接DataNode 依次取出Block的地址来处理
4 客户端会选择较近的节点读取数据
5 读完Block,验证这个Block的数据量,checkSum,如果验证失败,则认为这个Block已经Block已经损坏了,,客户单会发送NameNode信息。然后换一个节点重新读取重新验证
6
2.写人流程(上传流程)
1.客户端发起RPC请求到Namanode
2 NameNode收到请求,查看元数据,校验:
a.在跟目录是否相同名字文件
b. 校验当前用户是否权限
3 ,如果校验通过。则NameNode会记录元数据,并计算文件的大小以及确定Block的个数,分配Block存储节点
并将存储节点地址放在队列返回客户单
4,客户端收到队列,会队列取出地址,选择较近的节点,将数据进行封包(packets),传递到DataNode
5 从第一个复本自动将Block备份其他的DataNode,返回ack,实际是NIO的channel来进行传输的方式进行备份
6等客户将所有写完block,就会NameNode发送消息。收到消息,会将文件关闭
3,删除流程
1.客户端发起RPC请求到Namanode
2.nameNode收到请求,查看元数据,验证当前请求是否删除这个文件的权限
3. 有权限,先将这个操作记录下edits中,然后修改元数据,将文件从元数据中删除。,这个文件还在DataNode
4 当DataNode发送心跳时候,校验Block信息,发送指令删除文件对应Block
复本放置策略:
1 在HDFS,默认3个复本
2.第一个复本:从集群内部,dataNode,从集群外面 NameNode选择一个相对空间少的节点
3,第 二个复本:和第一个复本不同机架的节点
4.第三个复本:和第二个复本同个机架的不同的节点
5 更多的复本:选择一个相对空间少的节点