Hadoop 面试题

LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code and KPI, Keep progress,make a better result.
Survive during the day and develop at night。

目录

概 述

1.1.下面哪个程序负责 HDFS 数据存储。

C datanode

HDfS 中的 block 默认保存3份

Jobtracker通常与NameNode在一个节点启动。

1.4.HDFS 默认 Block Size,64MB

磁盘是集群的最主要瓶颈。

SecondaryNameNode 应与 NameNode 部署到一个节点

Client 向 NameNode 发起文件写入的请求。NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每一个DataNode 块中。

1.9.下列哪个是 Hadoop 运行的模式
a)单机版 b)伪分布式 c)分布式

Hadoop的核心配置是什么?
Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。

2.2.那当下又该如何配置?
Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。这些文件都保存在conf/子目录下。

2.3.“jps”命令的用处?
这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。

2.4.mapreduce的原理?
2.5. HDFS存储的机制?
在这里插入图片描述
1、client链接namenode存数据
2.namenode记录一条数据位置信息(元数据),告诉client存哪。
3.client用hdfs的api将数据块(默认是64M)存储到datanode上。
4.datanode将数据水平备份。并且备份完将反馈client。
5.client通知namenode存储块完毕。
6.namenode将元数据同步到内存中

2.5.2.读流程:
在这里插入图片描述
1、client链接namenode,查看元数据,找到数据的存储位置。
2.client通过hdfs的api并发读取数据。
3.关闭连接。

2.6.举一个简单的例子说明mapreduce是怎么来运行的 ?
wordcount的例子

2.7.用mapreduce来实现下面需求?
现在有10个文件夹,每个文件夹都有1000000个url.现在让你找出top1000000url。

2.8 hadoop中Combiner的作用?
combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。
作用就是优化。
但是combiner的使用场景是mapreduce的map和reduce输入输出一样。

2.9 简述hadoop安装:
在这里插入图片描述

2.10.请列出hadoop进程名:
namenode:管理集群:冰记录datanode文件
Secondname:可以被冷备,对一定范围内的数据做快照行备份。
Datanode:存储数据:
Jobtracker:管理任务,并将任务分配给tasktracker.
Tasktracker:任务执行方。

简述Hadoop的调度器:
FIFO schedular:默认,县级先出
Capacity scedualr计算能力调取起,选择占用最小,优先级高的先执行,依次类推。
Fair schedular: 公平调度,所有的job具有相同的资源:

2.14 列出你开发mapreduec的语言
java

2.15 书写程序:
wordcount:

2.16 同语言的优缺点
hadoop是java写的,java的集成效果最好,并且平台环境统一。

2.17 hive 有哪些保存元数据的方式
1、内存数据库derby,安装小,但是数据存在内存,不稳定
2、mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。
combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。
作用就是优化。
但是combiner的使用场景是mapreduce的map输出结果和reduce输入输出一样。

2.18 2.18.combiner和partition的作用
combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。
作用就是优化。
但是combiner的使用场景是mapreduce的map输出结果和reduce输入输出一样。

partition的作用是将数据分到不同的reduce进行计算,加快计算效果。

数据倾斜:map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,此称之为数据倾斜。

用hadoop程序进行数据关联时,常碰到数据倾斜的情况,这里提供一种解决方法。自己实现partition类,用key和value相加取hash值:

public int getPartition(K key, V value,
                          int numReduceTasks) {
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
  }

2.22.hadoop框架中怎么来优化
(1) 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。
(2) 对Hadoop参数进行调优。当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。

(3) 从系统实现角度进行优化。这种优化难度是最大的,它是从hadoop实现机制角度,发现当前Hadoop设计和实现上的缺点,然后进行源码级地修改。该方法虽难度大,但往往效果明显。
(4)linux内核参数调整

2.22.1.从应用程序角度进行优化
(1) 避免不必要的reduce任务
如果mapreduce程序中reduce是不必要的,那么我们可以在map中处理数据, Reducer设置为0。这样避免了多余的reduce任务。

2.2.2 对参数进行调优
查看linux的服务,可以关闭不必要的服务
ntsysv
停止打印服务
#/etc/init.d/cups stop
#chkconfig cups off
关闭ipv6
#vim /etc/modprobe.conf
添加内容
alias net-pf-10 off
alias ipv6 off

调整文件最大打开数:
查看: ulimit -a 结果:open files (-n) 1024
临时修改: ulimit -n 4096
持久修改:
vi /etc/security/limits.conf在文件最后加上:

  • soft nofile 65535
  • hard nofile 65535
  • soft nproc 65535
  • hard nproc 65535

修改Linux内核参数:
vi /etc/sysctl.conf
net.core.somaxconn = 32768
web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。

调整swap分区什么时候使用:
查看:cat /proc/sys/vm/swappiness
设置:vi /etc/sysctl.conf
在这个文档的最后加上这样一行: vm.swappiness=10
表示物理内存使用到90%(100-10=90)的时候才使用swap交换区
关闭noatime
vi /etc/fstab
/dev/sda2 /data ext3 noatime,nodiratime 0 0

槽位数是在各个tasktracker上的mapred-site.xml上设置的,默认都是2

mapred.tasktracker.map.tasks.maximum #++++maptask的最大数
2


mapred.tasktracker.reduce.tasks.maximum #++++reducetask的最大数
2

调整心跳间隔:
集群规模小于300时,心跳间隔为300毫秒:
mapreduce.jobtracker.heartbeat.interval.min 心跳时间
mapred.heartbeats.in.second 集群每增加多少节点,时间增加下面的值
mapreduce.jobtracker.heartbeat.scaling.factor 集群每增加上面的个数,心跳增多少

mapreduce.tasktracker.outofband.heartbeat 默认是false
mapreduce.local.dir
mapred.job.tracker.handler.count 默认是10,可以改成50,根据机器的能力

配置HTTP线程数目
tasktracker.http.threads 默认是40,可以改成100 根据机器的能力
选择合适的压缩方式
以snappy为例:

mapred.compress.map.output
true


mapred.map.output.compression.codec
org.apache.hadoop.io.compress.SnappyCodec

启用推测执行机制
推测执行(Speculative Execution)是指在分布式集群环境下,因为程序BUG,负载不均衡或者资源分布不均等原因,造成同一个job的多个task运行速度不一致,有的task运行速度明显慢于其他task(比如:一个job的某个task进度只有10%,而其他所有task已经运行完毕),则这些task拖慢了作业的整体执行进度,为了避免这种情况发生,Hadoop会为该task启动备份任务,让该speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果。
推测执行优化机制采用了典型的以空间换时间的优化策略,它同时启动多个相同task(备份任务)处理相同的数据块,哪个完成的早,则采用哪个task的结果,这样可防止拖后腿Task任务出现,进而提高作业计算速度,但是,这样却会占用更多的资源,在集群资源紧缺的情况下,设计合理的推测执行机制可在多用少量资源情况下,减少大作业的计算时间。
mapred.map.tasks.speculative.execution 默认是true
mapred.rduce.tasks.speculative.execution 默认是true

启动jvm重用功能
mapred.job.reuse.jvm.num.tasks 默认值1,表示只能启动一个task,若为-1,表示可以最多运行数不限制

设置任务超时时间
mapred.task.timeout 默认值600000毫秒,也就是10分钟。
合理的控制reduce的启动时间
mapred.reduce.slowstart.completed.maps 默认值0.05 表示map任务完成5%时,开始启动reduce任务

合理的控制reduce的启动时间
mapred.reduce.slowstart.completed.maps 默认值0.05 表示map任务完成5%时,开始启动reduce任务

跳过坏记录
当任务失败次数达到该值时,才会进入skip mode,即启用跳过坏记录数功能,也就是先试几次,不行就跳过
mapred.skip.attempts.to.start.skipping 默认值 2
map最多允许跳过的记录数
mapred.skip.map.max.skip.records 默认值0,为不启用
reduce最多允许跳过的记录数
mapred.skip.reduce.max.skip.records 默认值0,为不启用
mapred.skip.out.dir 默认值${mapred.output.dir}/_logs/

我们开发job时,是否可以去掉reduce阶段
可以。设置reduce数为0 即可。

2.24.datanode在什么情况下不会备份
datanode在强制关闭或者非正常断电不会备份。
出现在map阶段的map方法后。

hdfs有namenode、secondraynamenode、datanode组成。
为n+1模式
namenode负责管理datanode和记录元数据
secondraynamenode负责合并日志
datanode负责存储数据

2.27.3个datanode中有一个datanode出现错误会怎样?
这个datanode的数据会在其他的datanode上重新做备份。

2.28.描述一下hadoop中,有哪些地方使用了缓存机制,作用分别是什么?
在mapreduce提交job的获取id之后,会将所有文件存储到分布式缓存上,这样文件可以被所有的mapreduce共享。

2.29.如何确定hadoop集群的健康状态
通过页面监控,脚本监控。
通过页面监控,脚本监控。

小结

参考资料和推荐阅读

1.链接: 参考资料.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

执于代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值