欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hadoop常见面试题整理(里面参杂一些HBase的问题)

程序员文章站 2022-06-09 20:44:05
...

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中内部表和外部表的区别是什么?

  1. hive向外部表中导入数据的时候,会讲数据移动到数据仓库所指向的路径(元数据的存储路径会改变的意思,一般存储于一个文件当中)
    如果是外部表,数据的具体存放目录不会移动
  2. 删除表的时候:内部表的元数据也随之删除,而外部表只删除表结构,不会删除数据。

8.HBase中的rowKey,列簇怎么创建比较好?

1.rowkey:创建有规则,有序的。
2.列簇:按照业务特点,把数据归类,不同的类别放在不同的列簇。
比如user,customer,provider等。

9.MapReduce怎么处理数据倾斜的问题?
其实这个问题的本质:就是让各个分区的数据均匀分布。
数据倾斜无非就是在某一个reduce task中的数据特别多,其他的task中的数据特别少,那么就是分区不合理,导致各个分区的数据不平衡。
解决:根据业务特点,设置合理的partition策略,你也可以自定义一个partition去分区。

10.Hadoop中常见的压缩方式有哪些?

  1. Lzo
  2. Gzip
  3. Default
  4. Snappy

11.dataNode在什么情况下不会备份数据?
在客户端上传文件的时候,指定文件的副本数量是1(一般是3)

12.Hbase中的内部机制是什么?

hbase是一个能适应联机业务的数据库系统

物理存储:持久化数据存放在hdfs上(底层与hdfs交互)
存储管理:一个表划分为很多的region,而这些region分布式的存储到很多
RegionServer上,而Region内部又可以划分为Store。Store又可以分为
MemStore和StoreFile。

13.hive底层与数据库交互的原理?

  1. hive的查询功能由hdfs的MapReduce来实现
  2. Hive与mysql的关系:借用mysql来存储hive中标的元数据的信息,成为memStore

14.MapReduce的优化策略有哪些?

  1. 根据情况设置合理的Map/Reduce的个数
  2. 避免出现数据倾斜(partition的策略要好,保证数据的相对平衡)
  3. 对数据进行压缩处理,一般用snappy
  4. 小文件处理优化,可以把它们合并成大文件(可以在配置文件中配置)

15.请列举曾经修改的/etc/下的文件,并说明修改要解决什么(这个虽然可能不太符合本文的标题,但是万一问到你了,你至少要说出几个)

  1. /etc/profile:配置环境变量,如jdk
  2. /etc/hosts:配置Ip和主机名映射
  3. /etc/sysconfig/network:修改主机名
  4. /etc/sysconfig/network-scripts/ifcfg-eth0:修改静态Ip,网关

16.讲述一下MapReduce的大致流程(详细的比较复杂,简略的说下)

  1. 对文件进行切片的规划(split)
  2. 启动相应数量的maptast进程
  3. 调用FileInputFormat中的RecordReader,读取切片的一行数据,把它封装为key-value
  4. 调用map(),将k-v传给reduce
  5. shuffle过程:收集map的输出结果,进行分区和排序
  6. reduce task 任务启动的时候,从map端主动的拉取数据
  7. reduce task 调用reduce()进行处理
  8. 调用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值来分区。

相关标签: 大数据