【笔记】Hadoop重点

目录

一、基本介绍

1.常用端口号

2.常用的配置文件

二、HDFS

1.HDFS文件块大小(面试重点)

2.HDFS的Shell操作(开发重点)

3.HDFS的读写流程(面试重点)

三、MapReduce

四、Yarn


来源:大数据Hadoop教程

一、基本介绍

1.常用端口号

Hadoop3.x

        HDFS NameNode 内部通常端口:8020/9000/9820

        HDFS NameNode 对用户的查询端口:9870

        Yarn查看任务运行情况的:8088

        历史服务器:19888

Hadoop2.x

        HDFS NameNode 内部通常端口:8020/9000

        HDFS NameNode 对用户的查询端口:50070

        Yarn查看任务运行情况的:8088

        历史服务器:19888

2.常用的配置文件

        3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers

        2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves


二、HDFS

1.HDFS文件块大小(面试重点)

        知识点:

问题:为什么块的大小不能设置的太小,也不能设置的太大?

(1)HDFS的块设置太小会增加寻址时间

(2)块设置太大让磁盘传输数据时间明显大于定位该块开始位置的时间。导致处理变慢。

所以,HDFS块的大小设置取决于磁盘传输的速率

中小企业一般用的磁盘传输的速率为128MB/s,大企业一般用的磁盘传输的速率为256MB/s

2.HDFS的Shell操作(开发重点)

2.1基本语法

        hadoop fs 具体命令  /  hdfs dfs 具体命令,两种命令一样

2.2准备工作

        启动Hadoop集群,创建文件夹。

2.3上传指令

        -moveFromLocal:从本地剪切粘贴到HDFS;

        -copyFromLocal:从本地文件系统中复制文件到HDFS路径去;

        -put:等同-copyFromLocal,实际场景一般用put;

        -appendToFile:在文件夹末尾添加一个文件

2.4下载指令

        -copyToLocal:从HDFS复制到本地;

        -get:等同-copyToLocal,实际场景一般用get

2.5HDFS操作指令

        -ls:显示目录信息;

        -cat:显示文件内容;

        -chgrp、-chmod、-chown:修改文件所属权限;

        -mkdir:创建路径;

        -cp:从HDFS的一个路径复制到HDFS的另一个路径;

        -mv:从HDFS目录中移动文件;

        -tail:显示文件末尾1kb的数据;

        -rm:删除文件or文件夹;

        -rm -r:递归删除目录与目录内容;

        -du:统计文件夹大小信息;

        -setrep:设置HDFS中文件副本数量(只记录NameNode数量,副本数量看DataNode数量)

3.HDFS的读写流程(面试重点)

3.1写数据流程

3.1.1网络拓扑-节点距离计算

        节点距离:两个节点到达最近的共同祖先的距离总和。

3.1.2副本节点选择

3.2HDFS读数据流程


三、MapReduce

        构成:业务代码+默认代码

MapReduce优缺点
优点缺点
易于编程不适合实时计算(Mysql适合)
良好扩展性。可动态增加服务器不适合流计算(Sparkstreaming,flink适合)
高容错性。任意机器挂掉可转移其他节点不适合DAG有向无环图计算(spark适合)
适合大数据/

1.InputFormat数据输入

        1)默认的是TextInputformat。kv-k:key偏移量,v:一行内容
        2)处理小文件CombineTextInputFormat把多个文件合并到一起统一切片

2.Mapper 

setup()初始化
map()用户的业务逻辑
clearup()关闭资源

3.Shuffle机制:Map方法与Reduce方法之间的数据处理过程称之为Shuffle

环形缓冲区(蓝色):左侧存储索引,右侧存储数据,到80%后反向写。

分区排序:对key的索引按照字典顺序进行快排

压缩:加快网络传输速度(优化)

3.1Partition分区

默认分区HashPartitioner,默认按照key的hash值%numreducetask个数自定义分区。

总结:

(1)if sum(ReduceTask)>sum(getPartition),则生成多个空输出文件part-r-000xx(浪费);

(2)if 1<sum(ReduceTask)<sum(getPartition),则有部分分区数据Exception(IO异常);

(3)if sum(ReduceTask)=1,无论MapTask输出多少个分区文件,结果都交给ReduceTask,最终只产生一个结果文件part-r-00000;

(4)分区号必须从0开始,不断累加。

3.2WritableComparable排序(重点)

MapTask&ReduceTask对数据按照key排序(默认依据字典顺序排序,实现方法为快速排序)。

MapTask结果放入环形缓冲区,使用率到阈值进行一次快速排序
ReduceTask超出阈值,溢写磁盘。统一对内存和磁盘数据进行归并排序
排序分类
部分排序输出文件内部有序(常用)
全排序只输出一个文件,内部有序(不常用)
辅助排序Reduce端对key进行分组
二次排序自定义排序中,实现writableCompare接口,重写compareTo判断条件为2个即为二次排序

3.3Combiner合并

前提:不影响最终的业务逻辑

(1)Combiner组件的父类为Reducer。

(2)Combiner在每个MapTask运行,Reducer接收全局所有Mapper输出结果。

(3)Combiner对MapTask输出局部汇总,减少网络输出。

解决数据倾斜的方法:提前聚合map

3.4OutputFormat数据输出

OutputFormat接口实现类
默认输出格式TextOutputFormat(按行输出到文件)
应用场景eg:输出数据到MySQL/HBase/Elasticsearch等存储框架

自定义

OutputFormat步骤

1.定义类继承OutputFormat

2.改写RecordWriter,改写输出数据方法write()

4.MapReduce内核源码(面试)

4.1MapTask工作机制

4.2ReduceTask工作机制

4.3并行度决定机制 

并行度决定机制 
MapTask切片个数(输入文件和规则决定)决定
ReduceTask

1. 设置ReduceTask并行度(个数) 

2.实验测试ReduceTask多少合适

注意:

(1)ReduceTask=0(没有Reduce阶段),输出文件个数和Map个数一致;

(2)ReduceTask默认为1,输出文件为1个;

(3)if数据分布不均匀,Reduce阶段可能产生数据倾斜;

(4)具体多少ReduceTask依据集群性能设定;

(5)if分区数≠1,but ReduceTask=1。原因:不执行分区过程。

5.Join

Reduce Join
Map端为不同表或文件的key/value对打标签区别不同来源的记录。连接字段作为key,其余部分和新加标志作为value,最后输出。
Reduce端连接字段作为key的分组已经完成需要在每个分组当中将来源于不同文件的记录(Map阶段已打标志)分开,最后合并。

缺点:合并操作在Reduce阶段完成,压力大,但Map资源利用率不高。因此产生Map Join在Map端实现数据合并。

Map Join
场景表间大小差距过大的场景
方法采用DistributedCache,在Map阶段文件读取至缓存中。Driver驱动类加载缓存

6.数据清洗(ETL)

        抽取(Extract)、转换(Transform)、加载(Load)。

        清理过程往往只需要运行Mapper程序,不需要运行Reduce程序。


四、Yarn

1.基础架构

ResourceManager(RM):(1)处理客户端请求;(2)监控NodeManager;(3)启动or监控ApplicationMaster;(4)资源的分配与调度。

NodeManager(NM):(1)管理单个节点资源;(2)处理来自ResourceManager和ApplicationMaster的命令。

ApplicationMaster(AM):(1)任务监控与容错;(2)申请资源并分配。

Container:Yarn资源抽象,封装多维度资源(内存、CPU、磁盘、网络等)。

2.Yarn的工作机制(面试题)


3.Yarn的调度器
        1)FIFO调度器/容量调度器/公平调度器。
        2)apache的默认调度器为容量调度器; CDH的默认调度器为公平调度器。
        3)公平/容量默认一个队列,需要创建多队列。
                中小企业:任务可放进hive、spark、flink、mr创建队列  
                中大企业:采用业务模块(登录模块/注册模块)
                        好处:解耦并降低风险,数据量大时可降级使用
        4)三种调度器特点:
            相同点:支持多队列,可以借资源,支持多用户
            不同点:容量调度器:优先满足先进来的任务执行
                          公平调度器:在队列里面的任务公平享有队列资源
        5)生产环境怎么选:
            中小企业:对并发度要求不高,选择容量
            中大企业:对并发度要求比较高,选择公平。
4.开发重点掌握:
        1)队列运行原理    

先进先出调度器(FIFO)
优点简单易懂
缺点不支持多队列,生产环境很少使用
容量调度器
队列资源分配优先选择资源占有率最低的队列分配资源

作业资源分配

默认依据提交作业的优先级提交时间顺序分配资源
容器资源分配按照容器优秀级分配资源。if优先级相同,依据数据本地性原则:(1)任务与数据在同节点(2)任务与数据在同机架(3)任务与数据不在同节点与同机架

        公平调度器:优先为缺额大的作业分配资源。
        2)Yarn常用命令
        3)核心参数配置
        4)配置容量调度器和公平调度器。
        5)tool接口使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天启和风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值