Hadoop面试题总结

1. hadoop的TextInputFormat作用是什么?如何自定义实现?

InputFormat会在map操作之前对数据进行两方面的预处理:

  1. gitSplits,返回的是InputSplit数组,对数据进行split切片,每一个切片都需要一个map任务去处理。
  2. getRecordReader,返回的是RecordReader对象,将每个切片中的数据转换为<k,v>对的格式传递给map。

常用的InputFormat是TextInputFormat,使用的是LineRecordReader对每个分片进行键值对的转换,以偏移量作为键,以内容作为值。自定义类实现InputFormat接口,重写createRecordReader和isSplitable方法,在createRecordReader中可以自定义分隔符。


2.ETL是什么?

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。ETL一词常用在数据仓库,但其对象不限于数据仓库。


3. Flume工作机制是什么?

核心概念是agent,里面包括source、channel和sink三个组件。
source运行在日志收集节点进行日志采集,之后临时存储在channel,sink负责将channel中的数据发送到目的地。只有成功发送之后,channel中的数据才会被删除。
首先书写flume配置文件,定义agent、source、channel和sink然后将其组装,执行flume-ng命令。


4. Sqoop工作原理是什么?

sqoop是hadoop生态圈的数据传输工具,可以将关系型数据库中的数据导入到非结构化的hdfs、hive或者hbase中,也可以将hdfs中的数据导出到关系型数据库或文本文件中。使用的是MapReduce程序来执行任务,使用jdbc与关系型数据库进行交互。

import原理:通过指定的分隔符进行数据切分,将分片传入各个map中,在map任务中对每行数据进行写入处理,没有reduce。

export原理:根据要操作的表名生成一个java类,并读取其元数据信息和分隔符对非结构化数据进行匹配,多个map作业同时执行写入关系型数据库。


5. Hadoop平台集群配置、环境变量设置
1. zookeeper

修改zoo.cfg文件,配置dataDir和各个zk节点的server地址端口,tickTime心跳时间默认是2000ms,其他超时的时间都是以这个为基础的整数倍,之后在dataDir对应的目录下写入myid文件和zoo.cfg中的server相对应

2. hadoop

hadop-env.sh配置java环境变量
core-site.xml配置zk地址,临时目录等
hdfs-site.xml配置namenode信息,rpc和http通信地址,namenode自动转换、zk连接超时时间等
yarn-site.xml配置resourcemanager地址
mapred-site.xml配置使用yarn
slaves配置节点信息
格式化namenode和zk

3. hbase:

hbase-env.sh配置java环境变量和是否使用自带zk
hbase-site.xml配置hdfs上数据存放路径,zk地址和通讯超时时间、master节点
regionservers配置各个region节点
zoo.cfg拷贝到conf目录下


6. Hadoop性能调优

调优可以通过系统配置、程序编写和作业调度算法来进行。

调优的大头:

  1. mapred.map.tasks、mapred.reduce.tasks设置mapreduce任务数(默认都是1)
  2. mapred.tasktracker.map.tasks.maximum每台机器上的最大map任务数
  3. mapred.tasktracker.reduce.tasks.maximum每台机器上最大的reduce任务数
  4. mapred.reduce.slowstart.completed.maps配置reduce任务在map任务达到百分之几的时候开始进入。
  5. mapred.compress.map.output,mapred.output.compress配置压缩项,消耗cpu提升网络和磁盘io
  6. 合理利用combiner

这几个参数要看实际节点的情况进行配置,reduce任务是在33%的时候完成copy,要在这之前完成map任务,(map可提前完成)。


7. Hadoop的sequencefile的格式

Sequencefile文件是Hadoop用来存储二进制形式库<k,v>对而设计的一种平面文件;Hadoop的HDFS和MapReduce子框架主要是针对大数据文件儿设计的,在小文件的处理上不但效率低下,而且十分消耗磁盘空间。
解决办法通常是选择一个容器,将这些小文件组织起来统一存储。HDFS提供了两种类型的容器,分别是SequenceFile和MapFile。


8. 描述MapReduce的优化方法
  1. mapper优化

mapper调优主要就一个目标:减少输出量
我们可以通过增加combine阶段以及对输出进行压缩设置进行mapper优化

1>combine合并:
实现自定义combine要求继承reduce类。比较适合map的输出是数值型的,方便进行统计。

2>压缩设置:
在提交job的时候分别设置启动压缩和指定压缩方式。

  1. reduce优化

reduce调优主要是通过参数调优和设置reduce的个数来完成。
reduce个数调优
要求: 一个reduce和多个reduce的执行结果一致,不能因为多个reduce导致执行结果异常。
规则: 一般要求在Hadoop集群中执行MapReduce程序,map执行完100%后,尽量早的看到reduce执行到33%,可以通过命令hadoop job -status job_id或者web页面来查看。
原因: map的执行process数是通过inputformat返回recordread来定义的;而reduce是由三部分构成的,分别为读取mapper输出数据、合并所有输出数据以及reduce处理。其中第一步要依赖map的执行,所以在数据量较大的情况下,一个reduce无法满足性能要求的情况下,我们可以通过调高reduce的个数来解决该问题。
优点: 充分利用集群的优势。
缺点: 有些MapReduce的程序无法利用多reduce的优点。


9. 两个类TextInputFormat和FileInputFormat的区别是什么?

相同点:

TextInputFormat和KeyValueTextInputFormat都继承了FileInputFormat类,都是每一行作为一个记录。

区别:

TextInputFormat将每一行在文件中的起始偏移量作为key,每一行的内容作为value。默认以\n或回车键作为一行记录。
KeyValueTextInputFotmat适合处理输入数据的每一行是两列,并用tab分离的形式。


10. 有可能使 Hadoop 任务输出到多个目录中么?如果可以,怎么做?

Hadoop 内置的输出文件格式有:
MultipleOutputs<K,V> 可以把输出数据输送到不同的目录;
在自定义的reduce的函数中首先使用setup函数(注:该函数在task启动后数据处理前就调用一次)new出MultipleOutputs 对象,利用该对象调用 write 方法定义输出的目录。


11. Hadoop API 中的什么特性可以使 map reducer 任务以不同语言(如 Perl,ruby,awk 等)实现灵活性?

Hadoop序列化机制,支持多语言的交互。


12. 列举你了解的海量数据的处理方法及适用范围,如果有相关使用经验,可简要说明。

mapreduce 分布式计算 mapreduce 的思想就是分而治之。
倒排索引 :一种索引方法,用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射,在倒排索引中单词指向了包含单词的文档。
消息队列 :大量的数据写入首先存入消息队列进行缓冲,再把消息队列作为数据来源进行数据读取。
数据库读写分离 :向一台数据库写入数据,另外的多台数据库从这台数据库中进行读取。


13. 一个 mr 作业跑的比较慢,如何来优化。至少给出 6 个方案。

mr跑的慢可能有很多原因,如:数据倾斜、map和reduce数设置不合理、reduce等待过久、小文件过多、spill 次数过多、 merge 次数过多等。

  1. 解决数据倾斜:数据倾斜可能是partition不合理,导致部分partition中的数据过多,部分过少。可通过分析数据,自定义分区器解决。
  2. 合理设置map和reduce数:两个都不能设置太少,也不能设置太多。太少,会导致task等待,延长处理时间;太多,会导致 map、 reduce 任务间竞争资源,造成处理超时等错误。
  3. 设置map、reduce共存:调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少 reduce 的等待时间。
  4. 合并小文件:在执行mr任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载次数,而任务的装载比较耗时,从而导致 mr 运行较慢。
  5. 减少spill次数(环形缓冲区,调大环形缓冲区的内存,从而接收更多数据):通过调整io.sort.mb及sort.spill.percent参数值,增大触发spill的内存上限,减少spill 次数,从而减少磁盘 IO。
  6. 减少merge次数(mapreduce两端的合并文件的数目):通过调整io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩短mr处理时间。

14. Hadoop会有哪些重大故障,如何应对?至少给出 5个。
  1. namenode 单点故障:通过 zookeeper 搭建 HA 高可用,可自动切换 namenode。
  2. ResourceManager单点故障:可通过配置YARN的HA,并在配置的namenode上手动启动ResourceManager作为Slave,在 Master 故障后,Slave 会自动切换为Master。
  3. reduce阶段内存溢出:是由于单个reduce任务处理的数据量过多,通过增大reducetasks数目、优化partition 规则使数据分布均匀进行解决。
  4. datanode内存溢出:是由于创建的线程过多,通过调整linux的maxuserprocesses参数,增大可用线程数进行解决。
  5. 集群间时间不同步导致运行异常:通过配置内网时间同步服务器进行解决。

15. 什么情况下会触发 recovery 过程, recover 是怎么做的。

当jobtracker.restart.recover 参数值设置为 true, jobtracker 重启之时会触发recovery机制;
在JobTracker重启前,会在history log中记录各个作业的运行状态,这样在JobTracker关闭后,系统中所有数据目录、 临时目录均会被保留,待 JobTracker 重启之后,JobTracker 自动重新提交这些作业,并只对未运行完成的 task 进行重新调度,这样可避免已经计算完的 task 重新计算。


16. 你认为 hadoop 有哪些设计不合理的地方。
  1. 不支持文件的并发写入和对文件内容的随机修改。
  2. 不支持低延迟、高吞吐的数据访问。
  3. 存取大量小文件,会占用 namenode 大量内存,小文件的寻道时间超过读取时间。
  4. hadoop 环境搭建比较复杂。
  5. 数据无法实时处理。
  6. mapreduce 的 shuffle 阶段 IO 太多。
  7. 编写 mapreduce 难度较高,实现复杂逻辑时,代码量太大。

Hadoop面试题总结相关推荐

  1. Hadoop 面试题之Hbase

    Hadoop 面试题之九 16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好? 答: 19.Hbase 内部是什么机制? 答: 73.hbase 写数据的原理是什么? 答: 75.h ...

  2. hadoop面试题答案

    hadoop面试题答案 Hadoop 面试题,看看书找答案,看看你能答对多少(2) 1. 下面哪个程序负责 HDFS 数据存储. a)NameNode b)Jobtracker c)Datanode  ...

  3. 大数据面试题(一)----HADOOP 面试题

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程.". 大数 ...

  4. Hadoop面试题和答案

    Hadoop面试题和答案 1.什么是 Hadoop? Hadoop是一个分布式计算平台. 它是用 Java 编写的. 它由 Google 文件系统和 MapReduce 等功能组成. 2.运行 Had ...

  5. 100 道常见 Hadoop 面试题及答案解析

    100 道常见 Hadoop 面试题及答案解析 目录 1 单选题 ................................................................... ...

  6. Hadoop面试题汇总-20221031

    Hadoop面试题汇总 HDFS部分 1.请描述HDFS的写流程. 答: 首先由客户端向 NameNode 发起文件上传请求,NameNode 检查文件要上传的目录,并鉴权. 如果上传用户对此目录有权 ...

  7. Hadoop面试题 (网上收集版带答案)

    1.列出安装Hadoop流程步骤 a) 创建hadoop账号 b) 更改ip c) 安装Java 更改/etc/profile 配置环境变量 d) 修改host文件域名 e) 安装ssh 配置无密码登 ...

  8. Hadoop期末试题复习题

    文章目录 单选 多选题 判断题 部分知识点 来源 预判老师的预判,考试了,复习用 单选 目前,Hadoop的最高版本是哪个? A.Hadoop3.x B.Hadoop2.x C.Hadoop4.x D ...

  9. 成为大数据顶尖程序员,先过了这些Hadoop面试题!(附答案解析)

    导读:在大数据开发岗位的需求下,工资待遇水涨船高,不少编程人员在面对职业瓶颈期的时候,会选择转编程方向发展. 你是否已经意识这是你人生中的一个重要转机?能不能抓住这个时代的机遇,就在于你对大数据信息的 ...

  10. hadoop面试题 5 ---有用

    1.0 简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好. 答:第一题:1使用root账户登录 2 修改IP 3 修改host主机名 4 配置SS ...

最新文章

  1. 23. matlab并行计算原理以及parpool函数
  2. iOS中定时器NSTimer的开启与关闭
  3. [Selenium] 操作浏览器 Cookies
  4. [bzoj1025][SCOI2009]游戏 (分组背包)
  5. 2015年奇虎360服务器开发C++电话面试问题
  6. php 自动列,设置自动调整列phpExcel
  7. html5学习笔记(audio)
  8. vue单选框选中_vue中单选框与多选框的实现与美化
  9. 域名解析文件hosts文件是什么?如何修改hosts文件?
  10. Python基础十四——内置函数和匿名函数
  11. Matlab S函数求解二阶微分方程或二阶动态方程
  12. iis服务器网站启动不了,IIS上打不开asp网站怎么办
  13. 2021年下半年市场营销案例分析集锦
  14. 将一个对象转换成数组
  15. 什么是可视化?数据可视化有什么作用和价值
  16. Xss小游戏通关攻略带解释
  17. 使用Cerebro管理ES集群
  18. wiki维基百科各种语料数据下载
  19. 游戏3D美术设计师前景怎么样?
  20. java 测试网速_java心跳测网速Demo

热门文章

  1. 12306 官网硬卧下铺的选择(亲测可用)
  2. 高数 | 【多元函数微分学】多元函数求极限方法总结
  3. 鉴源实验室丨车载ECU嵌入式软件的测试入门
  4. 二哥杂货铺matlab安装步骤,Matlab2017a软件安装教程
  5. linux sybase 自动备份,sybase数据库 Linux环境下,每天定时全量备份+sybase数据库 stripe on 还原...
  6. Windows重新生成UEFI引导,解决Windows蓝屏\BCD 0xc0000098
  7. lede虚拟服务器,在虚拟机中安装 LEDE 软路由
  8. Matlab笔记之符号运算中的矩阵转置
  9. kindle刷机ttl_kindle变砖修复及刷机
  10. GrADS读取.grb2文件记录