Hadoop常见面试题整理(里面参杂一些HBase的问题)
1.简述如何安装一个Hadoop?
步骤:(linux版)
1.在root用户下,修改ip和映射,host主机名。
2.配置集群减的ssh免密登陆(前提是将集群的时间改为一致)
3.关闭防火墙,设置开机不启动
4.安装jdk(到这里是环境的配置)
5.普通用户下解压hadoop安装包(开始安装hadoop)
6.配置hadoop的主要几个核心文件:
1.hadoop-evn.sh 2.core-site.xml
3.mapred-site.xml 4.hdfs-site.xml
7.配置hadoop的环境变量: /etc/profile
8.格式化namenode(就格式化一次!!,否则会出现元数据不统一的错误),
然后启动节点即可,start-all.sh
2.Hadoop可以运行的模式有哪几种?
1.本地模式(即window上运行,但是不常用)
2.伪分布式模式(即只有1台机器,不是集群版)
3.分布式模式(至少3台,适用于开发环境,高可用)
3.列出Hadoop集群中有哪些进程?分别有什么作用?
1.NameNode(Hdfs的主节点):
1.负责管理Hdfs上的元数据,响应Client的请求。
2.管理DataNode上的block的均衡,维持副本数量。
2.DataNode(Hdfs的从节点):
存储数据块,负责处理client的IO请求
3.SecondaryNameNode(正常开发环境中是没有这个进程的):
顾名思义:第二个主节点,他是主节点的一个辅助进程,负责checkpoint
也做冷备,对数据进行备份
4.JournalNode:(一般存在于Hadoop HA的情况下):
是两个NameNode间的一个通信的进程,2个NN之间为了实现数据的同步,
通过JournalNode来实现通信
5.ZKFailoverController:(HA实现的中心组建,负责故障转移)
6.ResourceManager(Yarn的主节点)
负责集群中的所有资源的统一管理和调度,管理NodeManager
7.NodeManager(Yarn的从节点)
Yarn上每个节点的dialing,与ResourceManager通信,监控container的生命周期
和管理
4.Hadoop有哪几个重要的模块?
这里大家可以从两个版本来说明
Hadoop1版本的模块:
1.MapReduce:负责计算和资源调度
2.Hdfs:负责数据的存储
3.Common:一些辅助工具(这一块可以不说)
Hadoop2版本的模块:
1.MapReduce:负责计算
2.Hdfs:负责数据的存储
3.Yarn:负责资源调度
3.Common:一些辅助工具(这一块可以不说)
可见明显:hadoop2将hadoop1中的MapReduce的任务拆分成了MR+Yarn
分工明确。
题外话(hadoop2还支持了HA,解决了hadoop1的单点故障问题)
5.列出你知道的Hadoop调度器,并简述他的工作方法?
1.Fifo Schedular:默认的调度器 先进先出
2.Capacity Schedular:计算能力调度器,选择占用最小,优先级高的先执行
3.Fair Schedular:公平调度,所以的job拥有相同的资源
6.简述MapReduce中combine和partition的作用?
1.combine:
combine发生在Map的最后一个阶段,其原理是一个小型的Reduce,作用是减少输出到Reduce的数据量,提高Reduce阶段的执行效率
2.Partition:
将Map阶段产生的所有Key-Value分配给不同的reduce task来处理(分摊任务)
7.hive中内部表和外部表的区别是什么?
- hive向外部表中导入数据的时候,会讲数据移动到数据仓库所指向的路径(元数据的存储路径会改变的意思,一般存储于一个文件当中)
如果是外部表,数据的具体存放目录不会移动 - 删除表的时候:内部表的元数据也随之删除,而外部表只删除表结构,不会删除数据。
8.HBase中的rowKey,列簇怎么创建比较好?
1.rowkey:创建有规则,有序的。
2.列簇:按照业务特点,把数据归类,不同的类别放在不同的列簇。
比如user,customer,provider等。
9.MapReduce怎么处理数据倾斜的问题?
其实这个问题的本质:就是让各个分区的数据均匀分布。
数据倾斜无非就是在某一个reduce task中的数据特别多,其他的task中的数据特别少,那么就是分区不合理,导致各个分区的数据不平衡。
解决:根据业务特点,设置合理的partition策略,你也可以自定义一个partition去分区。
10.Hadoop中常见的压缩方式有哪些?
- Lzo
- Gzip
- Default
- Snappy
11.dataNode在什么情况下不会备份数据?
在客户端上传文件的时候,指定文件的副本数量是1(一般是3)
12.Hbase中的内部机制是什么?
hbase是一个能适应联机业务的数据库系统
物理存储:持久化数据存放在hdfs上(底层与hdfs交互)
存储管理:一个表划分为很多的region,而这些region分布式的存储到很多
RegionServer上,而Region内部又可以划分为Store。Store又可以分为
MemStore和StoreFile。
13.hive底层与数据库交互的原理?
- hive的查询功能由hdfs的MapReduce来实现
- Hive与mysql的关系:借用mysql来存储hive中标的元数据的信息,成为memStore
14.MapReduce的优化策略有哪些?
- 根据情况设置合理的Map/Reduce的个数
- 避免出现数据倾斜(partition的策略要好,保证数据的相对平衡)
- 对数据进行压缩处理,一般用snappy
- 小文件处理优化,可以把它们合并成大文件(可以在配置文件中配置)
15.请列举曾经修改的/etc/下的文件,并说明修改要解决什么(这个虽然可能不太符合本文的标题,但是万一问到你了,你至少要说出几个)
- /etc/profile:配置环境变量,如jdk
- /etc/hosts:配置Ip和主机名映射
- /etc/sysconfig/network:修改主机名
- /etc/sysconfig/network-scripts/ifcfg-eth0:修改静态Ip,网关
16.讲述一下MapReduce的大致流程(详细的比较复杂,简略的说下)
- 对文件进行切片的规划(split)
- 启动相应数量的maptast进程
- 调用FileInputFormat中的RecordReader,读取切片的一行数据,把它封装为key-value
- 调用map(),将k-v传给reduce
- shuffle过程:收集map的输出结果,进行分区和排序
- reduce task 任务启动的时候,从map端主动的拉取数据
- reduce task 调用reduce()进行处理
- 调用OutputFormat中的recordwriter进行结果的一个输出
17.如何确定Hadoop集群的健康状况?
hadoop有完善的集群监控体系(ganglia,hagios)
命令:
1. bin/Hadoop dfsadmin -report
2. bin/Hadoop dfsadmin -getServiceState [节点名称]
18.Hadoop进入安全模式怎么办,如何退出?
在hadoop安装目录下执行命令:
bin/Hadoop dfsadmin -safemode leave
19.HBase宕机了该怎么办?
HBase宕机可以分为两种情况:
1.HMater(主)宕机
如果是HMaster宕机:因为HBase不存在单点故障问题,说白了,你可以多开,
每个集群都可以开,通过zk的一个选举机制,可以保障至少一个HMaster的运行
2.HRegionServer(从)宕机
如果是HRegionServer宕机:HMaster会将其管理的Region(可以理解为一张表)
分配给其他正常的HRegionServer上,且数据和日志都会持久化到Hdfs上,
因此不用担心宕机引起数据的丢失(当然是短期的宕机)
20.如果没有自定义的partitioner,那么数据在被传送到reduce之前是如何分区的?
首先,Hadoop有一个默认的分区类:叫做HashPartitioner(根据key的hash值来分区),所以如果没有自定义的partitioner,就根据key的hash值来分区。
上一篇: Java SE(注解与反射)
下一篇: Java笔记之——反射