🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Hadoop >**1.MapTask并行机制是由什么决定的?** 由切片数量决定,每一个split分配一个mapTask并行实例处理。 >**2.MR是干什么的?** hadoop mapreduce 采用分而治之的思想,大问题分解成小问题同时并发处理小问题然后再合并结果。 分解(map) 合并(reduce) >**3.combiner和partition的作用:** `combiner`的意义是对每一个map任务的输出进行局部汇总,以减小网络传输量。 ~~~ (combiner阶段:也可以称为local reduce)combiner阶段是程序员可以选择的,Combiner是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作,因此在reduce计算前对相同的key做一个合并操作,那么文件会变小,这样就提高了宽带的传输效率,毕竟hadoop计算力宽带资源往往是计算的瓶颈也是最为宝贵的资源,但是combiner操作是有风险的,使用它的原则是combiner的输入不会影响到reduce计算的最终输出,(combiner需要满足结合律和交换律) 结合律:map把任务分配给combine,如果combine上有key值相同的,combine进行结合value值相加 交换律:combine输出后经过shuffer重新洗牌,不同map的相同key会分到一个map中,然后输出给reduce ~~~ [shuffle博客](https://blog.csdn.net/zpf336/article/details/80931629) ![](https://img.kancloud.cn/f3/1b/f31ba1ec5dc65bca94191a53d93dad07_431x415.png) >`Partition` 默认使用的是HashPartitioner 获取key的哈希值,使用key的哈希值对Reduce任务数求模,进行分桶, 按照key分别映射给不同的reduce, 这样做的目的是可以把(key,value)对均匀的分发到各个对应编号的reduce节点上,达到reduce task节点的负载均衡 ~~~ 在进行MapReduce计算时,有时候需要把最终的输出数据分到不同的文件中,比如按照省份划分的话,需要把同一省份的数据放到一个文件中;按照性别划分的话,需要把同一性别的数据放到一个文件中。我们知道最终的输出数据是来自于Reducer任务。那么,如果要得到多个文件,意味着有同样数量的Reducer任务在运行。Reducer任务的数据来自于Mapper任务,也就说Mapper任务要划分数据,对于不同的数据分配给不同的Reducer任务运行。Mapper任务划分数据的过程就称作Partition。负责实现划分数据的类称作Partitioner。 ~~~ 更多优秀文章请关注: [通过腾讯shuffle部署对shuffle过程进行详解](http://www.open-open.com/lib/view/open1400682430331.html) >**4.什么是shuffle** ~~~ map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle; shuffle: 洗牌(核心机制:数据分区,排序,缓存溢写,合并,分组)。 具体来说:就是将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序,分组。 ~~~ >5.列举几个hadoop生态圈的组件并做简要描述 ~~~ 1.Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper 可以实现同步服务, 配置维护,命名服务。 2.Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。 3.Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS 作为其存储系统。 4.Hive:基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为数据库表, 并提供简单的sql 查询功能,可以将sql 语句转换为MapReduce 任务进行运行。 ~~~ 6.**什么是Yarn?** ~~~ Apache Hadoop 2.0 包含 YARN,它将资源管理和处理组件分开。基于 YARN 的架构不受 MapReduce 约束。 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序。 ~~~ 7.NameNode的Safemode是怎么回事?如何才能退出safemode? ~~~ namenode在刚启动的时候元数据只有文件块信息,没有文件所在datanode的信息,需要datanode自己向namenode汇报。如果namenode发现datanode汇报的文件块信息没有达到namenode内存中所有文件块的总阈值的一个百分比,namenode就会处于safemode。 只有达到这个阈值,namenode才会推出safemode。也可手动强制退出。 ~~~ [Hadoop中namenode的安全模式](https://blog.csdn.net/andyguan01_2/article/details/89711714) 8.SecondaryNameNode的主要职责是什么?简述其工作机制 ~~~ sn的主要职责是执行checkpoint操作 每隔一段时间,会由secondary namenode将namenode上的所有edits日志文件合并最新的fsimage持久化到磁盘上,并加载到内存进行merge(这个过程称为checkpoint) ~~~ 9.一个datanode宕机,怎么恢复,简单说一下恢复流程?(运维) ~~~ Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了, 那这台datanode就是一台新的datanode了,删除他的所有数据文件和状态文件,重新启动 。 ~~~ 10.hadoop的namenode宕机,怎么解决?(运维) ~~~ 先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,如果只是节点挂了, 重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。 但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA。 ~~~ 11.简述hadoop安装?(运维) ~~~ 1)使用 root 账户登录 2)修改 IP 3)修改 host 主机名 4)配置 SSH 免密码登录 5)关闭防火墙 6)安装 JDK 7)解压 hadoop 安装包 8)配置 hadoop 的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml ,hdfs-site.xml 9)配置 hadoop 环境变量 10)格式化 hadoop namenode-format 11)启动节点 start-all.sh ~~~ 12.Hadoop中需要哪些配置文件,其作用是什么?(运维) ~~~ 1.core-site.xml: fs.defaultFS:hdfs://cluster1(主机名),这里的值指的是默认的HDFS 路径。 hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode存储临时文件的(edits等信息) secondaryNamenode 等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。 ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,这里是 ZooKeeper 集群的地址和端口。注意,数量一定是奇数,且不少于三个节点。 2.hadoop-env.sh: 只需设置jdk 的安装路径,如:export JAVA_HOME=/usr/local/jdk。 3.hdfs-site.xml: dfs.replication:他决定着系统里面的文件块的数据备份个数,默认为3 个。 dfs.data.dir:datanode 节点存储在文件系统的目录。 dfs.name.dir:是namenode 节点存储hadoop 文件系统信息的本地系统路径。 4.mapred-site.xml: mapreduce.framework.name: yarn 指定mr 运行在yarn 上。 ~~~ 12.请列出hadoop正常工作时要启动哪些进程,并写出各自的作用 ~~~ namenode:管理集群并记录datanode的元数据,相应客户端的请求。 secondery namenode:对namenode一定范围内的数据做一份快照性备份。它不是namenode 的冗余守护进程,而是提供周期检查点和清理任务。帮 助NN 合并editslog,减少NN 启动时间。 datanode:存储数据。它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运 行一个datanode 守护进程。 jobTracker:管理客户端提交的任务,并将任务分配给TaskTracker。  ResourceManager(JobTracker)JobTracker 负责调度DataNode 上的工作。每个DataNode 有一个TaskTracker,它们执行实际工作。 TaskTracker:执行各个Task。 DFSZKFailoverController 高可用时它负责监控NN 的状态,并及时的把状态信息写入ZK 。它通过一个独立线程周期性的调用NN 上的一个特定接口来获取NN 的健康状态。FC 也有选择谁作为Active NN 的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。JournalNode 高可用情况下存放namenode 的editlog 文件。 ~~~ [shuffle博客](https://blog.csdn.net/zpf336/article/details/80931629)