大数据学习-Hadoop
1.大数据概念
- 现状分析:实时计算
- 原因分析:离线计算
- 预测分析:机器学习(对未来趋势进行预测)
2.分布式与集群
- 分布式:多台机器,不同组件
分布式存储,分布式集群,多台机器
- 集群:多台机器,相同组件
3.Hadoop(卡大爷创建)
- hadoop简介
4.docker搭建hadoop集群
- 1.Docker安装
- 2.拉取hadoop集群镜像
- 3.克隆仓库并修改start.sh中的开放端口文件
- 4.桥接网络 docker network ls
- 5.运行容器并进入容器:docker exec -it hadoop-master bash
- 6.启动hadoop:./start-hadoop.sh
- 7.页面测试:本机127.0.01
- HDFS集群:name node: [your ip address]:50070/ 浏览文件系统
- YARN集群:resource manager: [your ip address]:8088/ 监控集群资源:MapReduce,Sprark,Flink等
- 8.测试 word count:word count 是一个测试 hadoop 的 shell 脚本,即计算文本中的单词个数
- docker进入hadoop容器命令
docker exec -it hadoop-master bash
- Hadoop内部命令 :推荐全部使用 hadoop fs
创建文件夹命令:hdfs dfs -mkdir /hadoop
上传命令:hdfs dfs -put file.txt /hadoop/file.txt hdfs dfs -put file1.txt /hadoop/file1.txt
删除命令:hdfs dfs -rm -r /hadoop/file.text(可删除文件与文件夹)
查看文件夹命令:hadoop fs -ls /hadoop
查看文件内容:hdfs dfs -cat /hadoop/file.txt
- Hadoop集群
一个大哥带几个小弟干活:hadoop-Master,hadoop-slave1,hadoop-slave2
MapReduce是计算框架,代码层面的组件,没有集群之说
5.hadoop初体验
- 官方圆周率例子
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
6.HDFS
Hadoop Distributed File Sytem分布式文件系统
6.1 HDFS简介
- 主从架构,统一访问接口
- 应用场景
- 元数据
- 分布式文件系统
- 目录树->层次结构->namespave->namenode
6.2 HDFS命令
推荐全部使用 hadoop fs
6.2.1 创建文件夹
hadoop fs -mkdir [-p] …
path 为待创建的目录
-p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录
hadoop fs -mkdir /ifnxs
6.2.2 查看指定目录下内容
hadoop fs -ls [-h] [-R] [ …]
path 指定目录路径
-h 人性化显示文件size
-R 递归查看指定目录及其子目录
hadoop fs -ls -h /
# 本地文件系统
hadoop fs -ls file:///
# HDFS分布式文件系统
hadoop fs -ls hdfs://hadoop-slave1:8020/
# 直接根目录,没有指定协议,将加载都去fs.defaultFS值(默认为当前文件的HDFS目录)
hadoop fs -ls /
6.2.3 上传文件到HDFS指定目录
hadoop fs -put [-f] [-p] …
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限
localsrc 本地文件系统(客户端所在机器)
dst 目标文件系统(HDFS)
echo 1 > 1.txt #创建一个值为1的txt文件
hadoop fs -put 1.txt / #将1.txt上传到HDFS的根目录下
6.2.4 查看HDFS文件内容
hadoop fs -cat …
读取指定文件全部内容,显示在标准输出控制台
注意:对于大文件内容读取,慎重
hadoop fs -cat /ifnxs/1.txt
6.2.5 下载HDFS文件
hadoop fs -get [-f] [-p] …
下载文件到本地文件系统指定目录,localdst必须是目录
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限
hadoop fs -get /ifnxs/1.txt ./2.txt
6.2.6 拷贝HDFS文件
hadoop fs -cp [-f] …
-f 覆盖目标文件(已存在下)
hadoop fs -cp /ifnxs/1.txt /ifnxs/3.txt
6.2.7 追加数据到HDFS文件中
hadoop fs -appendToFile …
将所有给定本地文件的内容追加到给定dst文件
dst如果文件不存在,将创建该文件
如果为-,则输入为从标准输入中读取
hadoop fs -appendToFile 2.txt 3.txt /1.txt
6.2.8 HDFS数据移动操作
hadoop fs -mv …
移动文件到指定文件夹下
可以使用该命令移动数据,重命名文件的名称
hadoop fs -mv /ifnxs/1.txt /ifnxs/333.txt
6.3 HDFS工作流程与机制
6.3.1 各角色职责介绍
- nameNode:仅存储HDFS的元数据(需要大量内存)
- secondaryNode:nameNode的秘书,负责帮助主角色进行元数据文件的合并动作
- dataNode:负责数据块block的存储,也称slave ,会将自己注册到nameNode并汇报自己持有的块列表(需要大量硬盘空间)
6.3.2 HDFS写数据流程
- Pipeline:管道,HDFS上传文件写数据过程中的数据传输方式
- ACK应答响应:确认字符,保证数据传输安全
- 默认3副本存储策略
写
读
7.MapReduce
7.1 MapReduce简介
分布式计算框架
- 先分再合,分而治之
- 用于离线作业 , 实时计算领域:spark,fink
- 不能进行流式计算
7.2 设计思想
- Map:拆分(映射)
- Reduce:聚合
7.3 MapReduce实例进程
7.4 MapReduce官方示例
7.4.1官方圆周率例子
- 提交命令:hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2 (yarn jar也行)
- 提交到YARN集群上分布式执行
- 流程:连接Resourcemanager(yarn)请求资源
7.4.2 WordCount例子
- 上传测试文件到HDFS:hadoop fs -put 1.txt /hadoop
- 提交命令:hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /hadoop /output
输出路径一定是不存在的路径否则会报错
- 查看词频统计的结果:hadoop fs -cat /output/part-r-00000
7.5 Map阶段执行过程
- 逻辑切片,默认Split size = Block size(128M)
- 对切片中的数据按照一定的规则读取解析返回[key,value]对。
- 默认是按行读取数据。key是每一行的起始位置偏移量,value是本行的文本内容
- 调用Mapper类中的map方法处理数据
- 按照一定的规则对Map输出的键值对进行分区partition。默认不分区,只有一个reducetask。分区的数量是reducetask运行的数量
- Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort。默认根据key字典序排序
- 对所有溢出文件进行最终的merge合并,成为一个文件
7.6 Reduce阶段
- ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据
- 把拉取来数据,全部进行合并merge,即把分散的数据合并成一个大的数据。再对合并后的数据排序
- 对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对 写入到HDFS文件中
7.7 shffle机制
1.将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理
2.一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle
3.Shuffle是MapReduce程序的核心与精髓,也是慢的原因
8.YARN
8.1 YARN简介
通用的集群资源管理(管理内存和CPU),任务调度平台(大家来申请资源,YARN为他们分配资源)
8.2 YARN架构
8.2.1 三大组件
- ResourceManager(RM)
YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源。
- NodeManager(NM)
YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
- ApplicationMaster(AM)(类似MR的MRAppMaster)
用户提交的每个应用程序均包含一个AM。应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。
8.3 YARN交互流程
8.4 YARN Scheduler资源调度器
没有最佳的策略,只有符合业务场景的策略
8.4.1 FIFO Scheduler 先进先出调度器(Hadoop1.x,使用较少)
FIFO Scheduler是一个先进先出的思想,即先提交的应用先运行。
8.4.2 Capacity Scheduler 容量调度器(Hadoop3.x 当前版本默认策略 )
Capacity Scheduler容量调度是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。
队列A提交大程序,队列B提交小程序 (可根据部门业务不同需求划分队列)
- 层次化的队列设计:层次化的管理,可以更容易、更合理分配和限制资源的使用(队列下面划分子队列)
- 容量保证:每个队列上都可以设置一个资源的占比,保证每个队列都不会占用整个集群的资源
- 安全:每个队列有严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务
- 弹性分配:空闲的资源可以被分配给任何队列。当多个队列出现争用的时候,则会按照权重比例进行平衡
8.4.3 Fair Scheduler 公平调度器
使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额。