Hadoop学习
Hadoop介绍
允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理
Hadoop核心组件
Hadoop HDFS(分布式文件存储系统):解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
Hadoop MapReduce(分布式计算框架):解决海量数据计算
HDFS集群与YARN集群
HDFS项目经验
多目录存储数据
集群数据均衡
磁盘间数据均衡
均衡任务需要手动停止
节点间数据均衡
Hadoop参数调优
对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的值(默认10)
HDFS角色
主角色——NameNode
NameNode是Hadoop分布式文件系统的核心,架构中的主角色
NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息
NameNode职责
从角色——DataNode
DataNode是Hadoop HDFS中的从角色,负责具体的数据块存储
DataNode的数量决定了HDFS集群的整体数据存储能力。
DataNode职责
主角色辅助角色——Secondary NameNode
Secondary NameNode充当NameNode的辅助节点,但不能替代NameNode
主要是帮助主角色进行元数据文件的合并动作
MapReduce局限性
MapReduce实例进程
MRAppMaster:负责整个MR程序的过程调度及状态协调
MapTask:负责map阶段的整个数据处理流程
ReduceTask:负责reduce阶段的整个数据处理流程
Map阶段执行过程
第一阶段:把输入目录下文件俺找一定的标准逐个进行逻辑切片,形成切片规划。
默认Split size = Block size(128M),每一个切片由一个MapTask处理
第二阶段:对切片中的数据按照一定的规则读取解析返回<key,value>对。
默认是按行读取数据,key是每一行的起始位置偏移量,value是本行的文本内容
第三阶段:调用Mapper类中的map方法处理数据,每读取解析出来的一个<key, value>,调用一次map方法
第四阶段:按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reducetask。分区的数量就是reducetask运行的数量
第五阶段:Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort
第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件
Shuffle
再MapReduce中,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称为Shuffle
Shuffle机制弊端——频繁涉及到数据在内存、磁盘之间的多次往复
Reduce阶段执行过程
第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据
第二阶段:把拉取来数据,全部进行合并merge,再对合并后的数据进行排序
第三阶段:把排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中
Yarn三大组件
MR提交YARN交互流程
第一步:用户通过客户端向YARN中ResourceManager提交应用程序(比如hadoop jar提交MR程序)
第二步:ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster
第三步:ApplicationMaster启动成功之后,首先向RM注册并保持通信,这样用户可以直接通过RM查看应用程序的状态(处理了百分之几)
第四步:AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态
第五步:一旦AM申请到资源后,便与对应的NM通信,并要求它启动任务
第六步:NM为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
第七步:各个任务通过RPC协议向AM汇报自己的状况和进度,以让AM掌握实际情况,从而可以在失败时进行重启。运行过程中,用户可随时通过RPC向AM查询应用程序的当前运行状态
第八步:应用程序运行完成后,AM向RM注销并关闭自己
Yarn三种调度器
FIFO Scheduler(先进先出调度器)
Capacity Scheduler(容量调度器,默认使用)
可根据公司业务需求,以队列为单位划分资源,如图
Fair Scheduler(公平调度器)
Hadoop安装目录结构
Hadoop配置文件
文件系统协议
fs.defaultFS属性在hadoop安装目录/etc/hadoop/core-site.xml文件中,内容为
<property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property>
hadoop常见指令
mapReduce的jar包地址:/hadoop-3.3.4/share/hadoop/mapreduce
启动hadoop集群服务——start-all.sh
创建文件夹——hadoop fs -mkdir
查看指定目录下内容——hadoop fs -ls
上传文件到HDFS指定目录下——hadoop fs -put
查看HDFS文件内容——hadoop fs -cat
下载HDFS文件——hadoop fs -get
拷贝HDFS文件——hadoop fs -cp
追加数据到HDFS文件中——hadoop fs appendToFile