CSDN软件工程师能力认证是由CSDN制定并推出的一个能力认证标准,宗旨是让一流的技术人才凭真才实学进大厂拿高薪,同时为企业节约大量招聘与培养成本,使命是提升高校大学生的技术能力,为行业提供人才储备,为国家数字化战略贡献力量。
我们每天将都会精选CSDN站内技术文章供大家学习,帮助大家系统化学习IT技术。
Hadoop简介Hadoop 的思想之源:Google 第一遇到大数据计算问题的公司 Openstack :NASA
面对的数据和计算难题 - 大量的网页怎么存储 - 搜索算法 带给我们的关键技术和思想(Google三大理论) - GFS 文件存储 - Map-Reduce 计算 - Bigtable
创始人:Doug cutting
Hadoop简介:http://hadoop.apache.org
分布式存储系统HDFS (Hadoop Distributed File System )POSIX
分布式存储系统
提供了 高可靠性、高扩展性和高吞吐率的数据存储服务
分布式计算框架MapReduce
分布式计算框架(计算向数据移动)
具有 易于编程、高容错性和高扩展性等优点。
分布式资源管理框架YARN(Yet Another Resource Management)
负责集群资源的管理和调度
版本:1.x,2.x,3.x
Hadoop 分布式文件系统HDFS
存储模型:字节 文件线性切割成块(Block):偏移量 offset (byte, 中文) block分散存储存储在集群节点中 单一文件Block大小一致,文件与文件可以不一致 Block可以设置副本数,副本无序分散在不同节点中(默认是3个) 副本数不要超过节点数量 文件上传可以设置Block大小和副本数(资源不够开辟的进程) 已上传的文件Block副本数可以调整,大小不变 2.x 128MB Block 默认Block为128M,可以人为设置,最小1M, 只支持一次写入多次读取,同一时刻只有一个写入者 可以append追加数据
架构模型 主从模型
文件元数据MetaData, 文件数据 元数据:metedata size offset 主节点负责管理元数据 从节点负责处理具体的文件数据,即块文件 NameNode 主节点保存文件元数据:单节点posix DataNode 从节点保存文件Block数,多数据 DataNode 与NameNode1报错心跳, DataNode向NameNode提交Block列表 HdfsClient与NameNode交互元数据信息 HdfsClient与DataNode交互文件Block数据(cs架构) DataNode利用服务器本地文件系统存储数据块
Hadoop架构
内存存储持久化
NameNode(NN)
基于内存存储:不会和磁盘发生交换(双向) - 值存在内存中 - 持久化 单向 => 写入磁盘
NameNode主要功能: - 接受客户端的读写服务 - 收集DataNode汇报的Block列表信息
NameNode保存metadata信息包括 - 文件owership和 permissions - 文件大小,时间 - (Block列表:Block偏移量), 位置信息(持久化不存) - Block每个副本位置(有DataNode上报)
NameNode持久化的两种方式 fsimage 和 edits
fsimage 写入磁盘时慢,从磁盘恢复到内存中快 - NameNode的metadata信息在启动后会加载到内存中 - 磁盘镜像快照 内存—》序列化 — 》 二进制文件 - metadata 存储到磁盘文件名 “fsimage”(时点备份 ) - 从二进制文件反序列化成对象恢复到内存中 - Block的位置信息不回保存到fsimage
edits 写入磁盘时快,从磁盘恢复时慢 - edits记录对metadata的操作日志 .存储所有操作记录 - 按照操作记录重新执行一遍从而变成内存中数据
所以二者需要结合使用 在系统第一次搭建完成后此时还没有跑起来时会格式化, 就会产生第一 fsimage 文件, 空的fsimage文件,启动hadoop时读取空的fsimage文件时会产生一个空的edits_log文件,此时edits和fsimage会进行合并生成一个新的fsimage文件,以后不管重启多少次fsimage文件将不会再改变,只是对edits文件增长,但是不能任由edits文件增长,此时需要在达到一定条件后再对edits和fsimage文件做合并,生成新的fsimage,充分发挥两者优势
此时需要SecondaryNameNode(SNN) Hadoop1.0 它不是NN的备份(但可以做备份), 它的主要工作就是帮助NN合并editslog,减少NN启动时间 SNN执行合并时机: - 根据配置文件设置的时间间隔fs.checkpoint.period 默认是3600s - 根据配置文件设置editslog的大小,fs.checkpoint.size 规定edits文件的最大值, 默认是64MB
DataNode(DN) - 本地磁盘目录存储数据(Block),文件形式 - 同时存储Block的元数据信息文件(此处的元数据是指存储数据Block的md5值,确保文件的正确性完整性,如果不正确,则去另外的DN去寻找这个文件的备份) - 启动DN时回想NN汇报block信息 - 通过向NN发送心跳保持与其联系(3s一次),如果NN10分钟没有收到DN的心跳,则认为其已经lost, 并copy其上的block到其他DN上,恢复到默认的副本数 为啥是10分钟? DN数据较大,给10分钟有可能进行恢复工作,避免进行频繁的拷贝
HDFS优点
- 高容错性
- 数据自动保存
- 副本丢失后,自动恢复
- 适合批处理
- 移动计算而非数据
- 数据位置暴露给计算框架(Block偏移量)
- 适合大数据处理
- GB,TB,甚至PB级数据
- 百万规模以上的文件数量
- 10K+节点
- 可构建在廉价机器上
- 通过多副本提高可靠性
- 提供了容错和恢复机制
HDFS缺点
- 低延迟数据访问
- 比如毫秒级
- 低延迟与高吞吐率
- 小文件存取
- 占用NameNode大量内存
- 寻道时间超过读取时间
- 并发写入,文件随机修改
- 一个文件只能有一个写者
- 仅支持append
第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。 第二个副本:放置在于第一个副本不同的 机架的节点上。 第三个副本:与第二个副本相同机架的其他节点。 更多副本:随机节点
HDFS写流程 HDFS写流程
- Client:
- 切分文件Block
- 按Block线性和NN获取DN列表(副本数)
- 验证DN列表后以更小的单位流式传输数据 - 各节点,两两通信确定可用
- Block传输结束后: - DN向NN汇报Block信息 - DN向Client汇报完成 - Client向NN汇报完成
- 获取下一个Block存放的DN列表 。。。。。。
- 最终Client汇报完成
- NN会在写流程更新文件状态
读流程 HDFS读流程
- Client:
- 和NN获取一部分Block副本位置列表 线性和DN获取Block,最终合并为一个文件 在Block副本列表中按距离择优选取 MD5验证数据完整性
HDFS文件权限 POSIX标准(可移植操作系统接口)
- 与Linux文件权限类似
- r:read w:write x:execute
- 权限x对于文件忽略,对于文件夹表示是否允许访问其内容
- 如果linux系统用户zhangsan使用hadoop命令也创建一个文件,那么这文件在HDFS中的owner就是zhangsan
- HDFS的权限目的:阻止误操作,但不绝对,HDFS相信,你告诉我你是谁,我就认为你是谁
安全模式 namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。 此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败,尚未获取动态信息)。 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。
集群 角色==进程
- namenode
- 数据元数据 内存存储,不会有磁盘交换 持久化(fsimage,edits log) 不会持久化block的位置信息 block:偏移量,因为block不可以调整大小,hdfs,不支持修改文件 偏移量不会改变
- datanode
- block块,md5 磁盘 面向文件,大小一样,不能调整 副本数,调整,(备份,高可用,容错/可以调整很多个,为了计算向数据移动)
- SN 只在hadoop1.x版本中有
- NN&DN
- 心跳机制 DN向NN汇报block信息 安全模式
- client Client: 写 线性上传block 先和NN通信,元数据,获取第一个block的节点信息(3副本,选择机制) 和DN通信:pipeline:C和1stDN有socket,1stDN和2edDN有socket。。。。 小片传输:4K,C给1stDN,1stDN同时本机缓存,瞬间放入下游socket中 当block传输完毕:block自身的网络I/O时间,时间线重叠的艺术 DN会向NN汇报自己新增的block C向NN汇报blockX传输完成给我下一个block节点信息 全部传输完成,NN更新元数据状态可用 读 线性读取block,不会有并发,只有一个网卡 距离:择优选取同机架,同节点 NN每次只给一部分block信息
Hadoop 分布式计算框架MR
Hadoop 体系架构
Hadoop安装
可以通过官网查看安装细节Hadoop
- 操作系统环境
- 依赖软件ssh,jdk
- hadoop3.0以后需要装jdk8,其他的装jdk7就行
- 环境的配置
- java_home
vi + /etc/profile export JAVA_HOME=/usr/java/jdk1.7.0_67 PATH=$PATH:$JAVA_HOME/bin 保存退出 source /etc/profile
- 免密钥
cd到用户目录 ll -a 查看隐藏目录 如果没有 ./ssh文件夹 则输入 ssh localhost 输入密码后 再输入exit退出ssh 此时在输入 ll -a 就会看到 ./ssh文件夹 如果在输入 ssh localhost后无法免密,此时输入 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 此时会在ssh文件夹中生成两个文件 id_dsa,和id_dsa.pub 然后执行 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 验证:ssh localhost ,此时不需要输入密码就可以联接
部署伪分布式
安装jdk、配置环境变量,测试
免秘钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
hadoop包安装并配置环变:hadoop-2.6.5.tar.gz
Hadoop的第二次JAVA_HOME 环境变量配置
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
配置core-site.xml
vi core-site.xml
fs.defaultFS
hdfs://node001:9000
hadoop.tmp.dir
/var/test/hadoop/local
配置hdfs-site.xml
dfs.replication
1
dfs.namenode.secondary.http-address
node001:50090
配置slaves文件
vi slaves node06
格式化hdfs
hdfs namenode -format (只能格式化一次,再次启动集群不要执行)
启动集群
start-dfs.sh
角色进程查看:jps
帮助: hdfs
hdfs dfs
查看web UI: IP:50070
创建目录:hdfs dfs -mkdir -p /user/root
查看目录: hdfs dfs -ls /
上传文件: hdfs dfs -put hadoop-2.6.5.tar.gz /user/root
停止集群:stop-dfs.sh
部署全分布式
全分布安装
---------------------------------------------
前期准备:
jdk
hostname
hosts
date
安全机制
firewall
windows 域名映射
节点: node001/003/003/04
全分布分配方案:
NN SNN DN
NODE06 *
NODE07 * *
NODE08 *
NODE09 *
节点状态:
node001: 伪分布
node002/003/004 : ip配置完成
建立各节点通讯(hosts)
设置时间同步:date -s “xxxx-x-xx xx:xx:xx”
秘钥分发:
在每个节点上登录一下自己:产生.ssh目录
从node001向node002/node003/node004分发公钥 (公钥的名称要变化)
scp id_dsa.pub node002:`pwd`/node001.pub
各节点把node001的公钥追加到认证文件里:
cat ~/node001.pub >> ~/.ssh/authorized_keys
node002/node003/node004安装jdk环境,node001分发profile给其他节点,并重读配置文件
分发hadoop部署程序2.6.5 到其他节点
copy node001 下的 hadoop 为 hadoop-local (管理脚本只会读取hadoop目录)
[root@node001 etc]# cp -r hadoop hadoop-local
配置core-site.xml
配置hdfs-site.xml
配置slaves
分发副本到其他002,003,004节点
格式化集群:hdfs namenode -format
启动集群:start-dfs.sh
Jps 查看各节点进程启动情况
关于CSDN软件工程师能力认证
CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准。C系列认证历经近一年的实际线下调研、考察、迭代、测试,并梳理出软件工程师开发过程中所需的各项技术技能,结合企业招聘需求和人才应聘痛点,基于公开、透明、公正的原则,甑别人才时确保真实业务场景、全部上机实操、所有过程留痕、存档不可篡改。C系列认证的宗旨是让一流的技术人才凭真才实学进大厂拿高薪,同时为企业节约大量招聘与培养成本,使命是提升高校大学生的技术能力,为行业提供人才储备,为国家数字化战略贡献力量。
了解详情可点击:CSDN软件工程师能力认证介绍
本文出处:https://blog.csdn.net/weixin_41634974/article/details/100904671?ops_request_misc=&request_id=&biz_id=102&utm_term=Hadoop&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-100904671.pc_search_result_before_js&spm=1018.2226.3001.4187