hadoop考点总结
Posted 2301_76522810
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop考点总结相关的知识,希望对你有一定的参考价值。
Hadoop 常见考点总结
Hadoop是一个能够对大量数据进行分布式处理的软件框架。以一种可靠、高效、可伸缩的方式进行数据处理。主要包括三部分内容:Hdfs,MapReduce,Yarn
Hadoop在广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如HBase,Hive,Spark,Zookeeper,Kafka,flume....
Hadoop Spark
类型 基础平台,包含计算,存储,调度 分布式计算工具
场景 大规模数据集上的批处理 迭代计算,交互式计算,流计算
价格 对机器要求低,便宜 对内存有要求,相对较贵 对内存有要求,相对较贵
编程范式 MapReduce,API 较为底层,算法适应性差 RDD组成DAG有向无环图,API较为顶层,方便使用
数据存储结构 MapReduce中间计算结果存在HDFS磁盘上,延迟大 RDD中间运算结果存在内存中,延迟小
运行方式 Task以进程方式维护,任务启动慢 Task以线程方式维护,任务启动快
Hadoop常见的版本有哪些,分别有哪些特点,你一般是如何进行选择的?
这个完全就是基于个人的经验之谈的,如果平时没有细致研究过这些,这个问题一定是答不好的。
由于Hadoop的飞速发展,功能不断更新和完善,Hadoop的版本非常多,同时也显得杂乱。目前市面上,主流的是以下几个版本:
Apache 社区版本
Apache 社区版本 完全开源,免费,是非商业版本。Apache社区的Hadoop版本分支较多,而且部分Hadoop存在Bug。在选择Hadoop、Hbase、Hive等时,需要考虑兼容性。同时,这个版本的Hadoop的部署对Hadoop开发人员或运维人员的技术要求比较高。
Cloudera版本
Cloudera 版本 开源,免费,有商业版和非商业版本,是在Apache社区版本的Hadoop基础上,选择相对稳定版本的Hadoop,进行开发和维护的Hadoop版本。由于此版本的Hadoop在开发过程中对其他的框架的集成进行了大量的兼容性测试,因此使用者不必考虑Hadoop、Hbase、Hive等在使用过程中版本的兼容性问题,大大节省了使用者在调试兼容性方面的时间成本。
Hortonworks版本
Hortonworks 版本 的 Hadoop 开源、免费,有商业和非商业版本,其在 Apache 的基础上修改,对相关的组件或功能进行了二次开发,其中商业版本的功能是最强大,最齐全的。
所以基于以上特点进行选择,我们一般刚接触大数据用的就是CDH,在工作中大概率用 Apache 或者 Hortonworks。
能简单介绍Hadoop1.0,2.0,3.0的区别吗?
一般能问出这种问题的面试官都是“狠人”,基本技术都不差,他们往往是更希望应聘者能在这些“细节”问题上脱颖而出。
Hadoop1.0由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中HDFS由一个NameNode和多个DateNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。在Hadoop1.0中容易导致单点故障,拓展性差,性能低,支持编程模型单一的问题。
Hadoop2.0即为克服Hadoop1.0中的不足,提出了以下关键特性:
Yarn:它是Hadoop2.0引入的一个全新的通用资源管理系统,完全代替了Hadoop1.0中的JobTracker。在MRv1 中的 JobTracker 资源管理和作业跟踪的功能被抽象为 ResourceManager 和 AppMaster 两个组件。Yarn 还支持多种应用程序和框架,提供统一的资源调度和管理功能
NameNode 单点故障得以解决:Hadoop2.2.0 同时解决了 NameNode 单点故障问题和内存受限问题,并提供 NFS,QJM 和 Zookeeper 三种可选的共享存储系统
HDFS 快照:指 HDFS(或子系统)在某一时刻的只读镜像,该只读镜像对于防止数据误删、丢失等是非常重要的。例如,管理员可定时为重要文件或目录做快照,当发生了数据误删或者丢失的现象时,管理员可以将这个数据快照作为恢复数据的依据
支持Windows 操作系统:Hadoop 2.2.0 版本的一个重大改进就是开始支持 Windows 操作系统
Append:新版本的 Hadoop 引入了对文件的追加操作
同时,新版本的Hadoop对于HDFS做了两个非常重要的「增强」,分别是支持异构的存储层次和通过数据节点为存储在HDFS中的数据提供内存缓冲功能
相比于Hadoop2.0,Hadoop3.0 是直接基于 JDK1.8 发布的一个新版本,同时,Hadoop3.0引入了一些重要的功能和特性
HDFS可擦除编码:这项技术使HDFS在不降低可靠性的前提下节省了很大一部分存储空间
多NameNode支持:在Hadoop3.0中,新增了对多NameNode的支持。当然,处于Active状态的NameNode实例必须只有一个。也就是说,从Hadoop3.0开始,在同一个集群中,支持一个 ActiveNameNode 和 多个 StandbyNameNode 的部署方式。
MR Native Task优化
Yarn基于cgroup 的内存和磁盘 I/O 隔离
Yarn container resizing
fs.namenode.http-address:50070
dfs.datanode.http-address:50075
SecondaryNameNode:50090
dfs.datanode.address:50010
fs.defaultFS:8020 或者9000
yarn.resourcemanager.webapp.address:8088
历史服务器web访问端口:19888
常用端口号
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
用的配置文件
hadoop3.x
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
workers
hadoop2.x
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
slaves
简单介绍一下搭建Hadoop集群的流程
这个问题实在基础,这里也简单概述下。
在正式搭建之前,我们需要准备以下6步:
「准备工作」
关闭防火墙
关闭SELINUX
修改主机名
ssh无密码拷贝数据
设置主机名和IP对应
jdk1.8安装
「搭建工作:」
下载并解压Hadoop的jar包
配置hadoop的核心文件
格式化namenode
启动....
ap方法之后Reduce方法之前这段处理过程叫「Shuffle」
Map方法之后,数据首先进入到分区方法,把数据标记好分区,然后把数据发送到环形缓冲区;环形缓冲区默认大小100m,环形缓冲区达到80%时,进行溢写;溢写前对数据进行排序,排序按照对key的索引进行字典顺序排序,排序的手段「快排」;溢写产生大量溢写文件,需要对溢写文件进行「归并排序」;对溢写的文件也可以进行Combiner操作,前提是汇总操作,求平均值不行。最后将文件按照分区存储到磁盘,等待Reduce端拉取。
3)每个Reduce拉取Map端对应分区的数据。拉取数据后先存储到内存中,内存不够了,再存储到磁盘。拉取完所有数据后,采用归并排序将内存和磁盘中的数据都进行排序。在进入Reduce方法前,可以对数据进行分组操作
那你跟我再介绍一下你是如何基于MapReduce做Hadoop的优化的
HDFS小文件影响
影响NameNode的寿命,因为文件元数据存储在NameNode的内存中
影响计算引擎的任务数量,比如每个小的文件都会生成一个Map任务
2)数据输入小文件处理
合并小文件:对小文件进行归档(Har)、自定义Inputformat将小文件存储成SequenceFile文件。
采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景
对于大量小文件Job,可以开启JVM重用
3)Map阶段
增大环形缓冲区大小。由100m扩大到200m
增大环形缓冲区溢写的比例。由80%扩大到90%
减少对溢写文件的merge次数。(10个文件,一次20个merge)
不影响实际业务的前提下,采用Combiner提前合并,减少 I/O
4)Reduce阶段
合理设置Map和Reduce数:两个都不能设置太少,也不能设置太多。太少,会导致Task等待,延长处理时间;太多,会导致 Map、Reduce任务间竞争资源,造成处理超时等错误。
设置Map、Reduce共存:调整 slowstart.completedmaps 参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间
规避使用Reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。
增加每个Reduce去Map中拿数据的并行数
集群性能可以的前提下,增大Reduce端存储数据内存的大小
5) IO 传输
采用数据压缩的方式,减少网络IO的的时间
使用SequenceFile二进制文件
6) 整体
MapTask默认内存大小为1G,可以增加MapTask内存大小为4
ReduceTask默认内存大小为1G,可以增加ReduceTask内存大小为4-5g
可以增加MapTask的cpu核数,增加ReduceTask的CPU核数
增加每个Container的CPU核数和内存大小
调整每个Map Task和Reduce Task最大重试次数
7) 压缩
压缩,可以参考这张图
「提示」:如果面试过程问起,我们一般回答压缩方式为Snappy,特点速度快,缺点无法切分(可以回答在链式MR中,Reduce端输出使用bzip2压缩,以便后续的map任务对数据进行split)
Hadoop调度器主要分为三类:
FIFO Scheduler:先进先出调度器:优先提交的,优先执行,后面提交的等待【生产环境不会使用】
Capacity Scheduler:容量调度器:允许看创建多个任务对列,多个任务对列可以同时执行。但是一个队列内部还是先进先出。【Hadoop2.7.2默认的调度器】
Fair Scheduler:公平调度器:第一个程序在启动时可以占用其他队列的资源(100%占用),当其他队列有任务提交时,占用资源的队列需要将资源还给该任务。还资源的时候,效率比较慢。【CDH版本的yarn调度器默认】
软件设计师考点总结
- 计算机组成与体系结构
- 操作系统基本原理
- 数据库系统(未完待续)
以上是关于hadoop考点总结的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop 参数 mapred.map.child.java.opts
一文读懂MapR Apache Hadoop的MapR发行版白皮书