一、选择题
1、哪个程序负责HDFS数据存储?
Datanode
2、HDFS中的block默认保存几份?
默认3份
3、哪个程序通常与NameNode在一个节点启动?
Jobtracker
4、HDFS默认Block Size是多少?
64MB
5、什么通常是集群的最主要瓶颈
磁盘IO
6、关于SecondaryNameNode?
它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间
7、什么可以作为集群的管理?
Puppet、Pdsh、Zookeeper
8、 Client端上传文件时候的流程
Client想NameNode发起文件写入的请求。NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode信息。Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。(NameNode->Client->分块->DataNode)
9、Hadoop的核心配置是什么?
Hadoop的核心配置通过两个xml文件来完成:①hadoop-default.xml ②hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在了。
10、那当下如何配置?
Hadoop现在拥有3个配置文件,①core-site.xml ②hdfs-site.xml ③mapred-site.xml。这些文件都保存在conf/子目录下。
11、jps命令的用处?
这个命令可以检查Namenode、Datanode、Task Tracker、Job Tracker是否正常工作。
12、mapreduce的原理?
Map阶段:
- 分割:首先,输入数据集被分割称多个小块,每个小块都包含一部分数据记录。这些小块被称为分片或输入分片。
- 映射:在这个阶段,MapReduce任务的用户指定一个映射函数(Map函数),该函数将输入数据集的每个记录转换为一组键-值对。这些键值对的生成时独立且并行进行的,每个Map任务对应一个输入分片,因此Map阶段具有高度的并行性。Map函数的输出键值对通常与问题的特性有关。
- 分组与排序:生成的键值对将被分组,以便相同键的值能够被传递到同一个Reduce任务中,此外,这些键值对还会被按键进行排序,以便Reduce阶段更容易进行处理。
Reduce阶段:
- 归约:在Reduce阶段,用户指定一个归约函数(reduce函数),该函数接收相同键的一组键值对,并将它们合并为一个或多个输出结果。每个Reduce任务处理一个唯一的键组,并且Reduce任务之间也可以并行运行。
- 结果输出:最后,Reduce任务的输出结果被写入到持久化存储(如分布式文件系统)中,以供进一步分析和使用。
13、HDFS写流程
- client链接namenode存数据
- namenode记录一条数据位置信息(元数据),告诉client存哪儿。
- client用hdfs的api将数据(默认是64M)存储到datanode上。
- datanode将数据水平备份,并且备份完将反馈client。
- client通知namenode存储块完毕。
- namenode将元数据同步到内存中。
- 另一块循环上面的过程。
流程
- client链接namenode,查看元数据,找到数据的存储位置。
- client通过hdfs的api并发读取数据。
- 关闭连接。
14、hadoop的Combiner的作用?
combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。
作用就是优化,但combiner 的使用场景是 mapreduce 的 map 和 reduce 输入输出一样。
15、简述hadoop安装
- 创建hadoop账户
- setup.改IP
- 安装java,并修改/etc/profile文件,配置java的环境变量
- 修改Host文件域名
- 安装SSH,配置无密钥通信
- 解压Hadoop
- 配置conf文件下hadoop-env.sh、core-site.sh、mapred-site.sh、hdfs-site.sh
- 配置hadoop的环境变量
- Hadoop namenode-format
- start-all
16、请列出hadoop进程名
- namenode管理集群,并记录datanode文件信息
- secondname:可以做冷备,对一定范围内数据做快照性备份
- datanode:存储数据
- Jobtracker:管理任务,并将任务分配给tasktracker
- Tasktracker:任务执行方
17、写出下列命令
- 杀死一个job
- 删除hdfs上的/tmp/aaa
- 加一个新的存储节点和删除一个计算节点需要的新集群状态命令
hadoop job -list #拿到job-id
hadoop job -kill job-id
Hadoop fs -rmr/tmp/aaa
#加新节点时:
Hadoop-daemon.sh start datanode
Hadoop-daemon.sh start tasktracker
#删除时
hadoop mradmin -refreshnodes
hadoop dfsadmin -refreshnodes
18、简述hadoop的调度器
- FIFO schedular:默认,先进先出原则
- Capacity schedular:计算能力调度器、选择占用最小、优先级高的先执行,依次类推。
- Fair schedular:公平调度,所有的job具有相同的资源
19、 combiner 和 partition 的作用
- combiner是reduce的实现,在map端运行计算任务,减少Map端的输出数据。作用是优化,但ombiner的使用场景是map reduce的map输出结果和reduce输入输出一样。
- partition的默认实现是Hashpartition,是map端将数据按照reduce个数取余,进行分区,不同的reduce来copy自己的数据。partion的作用是将数据分到不同的reduce进行计算,加快计算效果。
20、 hive内部表和外部表的区别
- 内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除。
- 外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表的结构
21、Hbase的rowkey怎么创建好?列族怎么创建比较好?
- hbase存储时,数据按照row key的字典序(byte order)排序存储,设计key时,要充分排序
- 存储这个特性,将经常一起读取的行存储放到一起,(位置相关性)一个列族在数据底层是一个文件,所以经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。
22、 用mapreduce怎么处理数据倾斜问题?
数据倾斜:map/reduce程序执行时,reduce节点大部分执行完毕,但是又一个或几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时时百倍或千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,称为数据倾斜。
解决:用hadoop程序进行数据关联时,常碰到数据倾斜的情况,这里提供一种解决方法:自己实现partition类,用key和value相加取hash值。
23、hadoop框架中如何优化
- 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的,怎样在迭代的情况下,编写高效率的应用程序,是一种优化思路。
- 对hadoop参数进行调优,当前hadoop系统有190多个配置参数,怎样调整这些参数,使hadoop作业运行尽可能的快,也是一种优化思路。
- 从系统实现角度进行优化,这种优化难度是最大的,它是从hadoop实现机制角度,发现当前hadoop设计和实现上的缺点,然后进行源码级的修改。这方法虽然难度大,但往往效果明显。
- linux内核参数调整
24、我们开发job时,是否可以去掉reduce阶段
可以,设置reduce数为0就好。
25、datanode在什么情况下不会备份
datanode在强制关闭或者非正常断电不会备份。
26、HDFS的体系结构
HDFS由namenode, secondraynamenode, datanode组成。为n+1模式。
- namenode负责管理datanode和记录元数据
- secondraynamenode负责合并日志
- datanode负责存储数据
27、三个datanode中有一个datanode出现错误会怎么样?
这个datanode的数据会在其他的datanode上重新做备份。
28、描述一下hadoop中,有哪些地方使用了缓存机制,作用分别是什么?
在mapreduce提交job的获取id之后,会将所有文件存储到分布式缓存上,这样文件可以被所有的mapreduce共享。
29、如何确定Hadoop集群的健康状态
通过页面监控,脚本控制
30、生产环境中为什么建议使用外部表?
- 因为外部表不会加载数据到hive,减少数据传输、数据还能共享
- hive不会修改数据,所以无需担心数据的损坏
- 删除表时,只删除表结构,无需删除表数据。