Hadoop学习笔记(基于《10小时入门大数据》)
- HDFS
- YARN
- MapReduce
- 搭建实战
HDFS
-
定义
-
设计目标
-
架构
-
安装HDFS
- 下载安装jdk(这里就不赘述了)
- 下载CDH(https://archive.cloudera.com/cdh5/cdh/5)
- 解压:
tar -zxvf * -C <yourpath>/
- 修改配置:
- 进入你的安装目录的etc/hadoop下,修改4个文件:core-site.xml、hdf-site.xml、hadoop-env.sh、slaves(具体配置看官网指引)
- 特别注意core-site.xml的配置,添加hadoop的临时文件目录值:hadoop.tmp.dir
- 格式化namenode:
bin/hdfs namenode -format
- 启动HDFS:
sbin/start-dfs.sh
- 验证是否启动成功:
jps
9496 SecondaryNameNode
9099 NameNode
10139 Jps
9245 DataNode- 浏览器
localhost:50070
-
HDFS读写流程
- 写
- 读
- 写
-
HDFS容错
-
HDFS副本集策略
-
HDFS优缺点
- 优点
- 数据冗余、硬件容错
- 处理流式的数据访问
- 适合存储大文件
- 可构建在廉价机器上
- 缺点
- 低延迟的数据访问
- 小文件存储
YARN
-
YARN产生背景
-
YARN概述
- Yet Another Resource Negotiator
- 通用的资源管理系统
- 为上层应用提供统一的资源管理和调度
-
YARN的架构
- ResourceManager:RM
- 整个集群统一时间提供服务的RM只有一个,负责集群资源的统一管理和调度
- 处理客户端的请求: 提交一个作业、杀死一个作业
- 监控NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉AM
- NodeManager:NM
- 整个集群中有多个,负责自己本身节点资源管理和使用
- 定时向RM汇报本节点的资源使用情况
- 接收并处理来自RM的各种命令: 启动Container
- 处理来自AM的命令
- ApplicationMaster:AM
- 每个应用程序对应一个: MR、Spark,负责应用程序的管理
- 为应用程序向RM申请资源(Core、Memory),分配给内部task
- 需要与NM通信:启动/停止task,task是运行在Container里面,AM也是运行在Container
- Container
- 封装了CPU、Memory等资源的一个容器
- Client
- 提交作业
- 查询作业的运行进度
- 杀死作业
- ResourceManager:RM
-
YARN执行流程
-
YARN环境搭建
-
进入你的安装目录的etc/hadoop下,修改2个文件:
mapred-site.xml、yarn-site.xml(具体配置看官网指引) -
验证是否启动成功:
jps
3649 NodeManager
4069 Jps
3545 ResourceManager- 浏览器
localhost:8088
-
-
提交作业到YARN
进入share/hadoop/mapreduce目录,执行hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3
MapReduce
-
概述
- 源于Google的MapReduce论文, 论文发表于2004年12月
- Hadoop MapReduce是Google MapReduce的克隆版
- MapReduce优点:海量数据离线处理&易开发&易运行
- MapReduce缺点:实时流式计
-
案例
-
MapReduce的架构
-
1.x
-
JobTracker: JT
- 作业的管理者
- 将作业分解成一堆的任务: Task(MapTask和ReduceTask)
- 将任务分派给TaskTracker运行
- 作业的监控、容错处理(task作业挂了,重启task的机制)
- 在一定的时间间隔,JT没有收到TT的心跳信息,TT可能是挂了,TT上的任务会被指派到其他的TT上去执行
-
TaskTracker: TT
- 任务的执行者
- 在TT上执行Task(MapTask和ReduceTask)
- 会与JT进行交互:执行/启动/停止作业,发送心跳信息给JT
-
MapTask
- 自己开发的map任务交由该Task出来
- 解析每条记录的数据,交给自己的map方法处理
- 将map的输出结果写到本地磁盘(有些作业仅有map没有reduce==>HDFS)
-
ReduceTask
- 将MapTask输出的数据进行读取
- 按照数据进行分组传给自己编写的reduce方法处理
- 输出结果写到HDFS
-
-
2.x
-