“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”。
大数据面试宝典目录,请点击
HADOOP 面试题目录
1. 下列哪项通常是集群的最主要瓶颈
2. 下列哪项可以作为集群的管理工具?
3. 下列哪个是Hadoop 运行的模式?
4. 列举几个hadoop 生态圈的组件并做简要描述
4. 列举几个hadoop 生态圈的组件并做简要描述
6. 解释“hadoop”和“hadoop 生态系统”两个概念。
7. 简要描述如何安装配置apache 的一个开源Hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。
8. Hadoop 中需要哪些配置文件,其作用是什么?
9. 请列出正常工作的Hadoop 集群中Hadoop 都分别需要启动哪些进程,它们的作用分别是什么?
10. 简述Hadoop 的几个默认端口及其含义
11. 简述hadoop实现Join的几种方法
1. 下列哪项通常是集群的最主要瓶颈(C)
A. CPU
B. 网络
C. 磁盘IO
D. 内存
2. 下列哪项可以作为集群的管理工具?(C)
A.Puppet
B.Pdsh
C.ClouderaManager
D.Zookeeper
3. 下列哪个是Hadoop 运行的模式?(ABC)
A. 单机版
B. 伪分布式
C. 完全分布式
4. 列举几个hadoop 生态圈的组件并做简要描述
- Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper 可以实现同步服务, 配置维
护,命名服务。 - Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
- Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS 作为其存储系统。
- Hive:基于Hadoop 的一个数据仓库工具,可以将结构化的数据档映射为一张数据库表, 并提供
简单的sql 查询功能,可以将sql 语句转换为MapReduce 任务进行运行。
6. 解释“hadoop”和“hadoop 生态系统”两个概念。
Hadoop 是指Hadoop 框架本身;hadoop 生态系统,不仅包含hadoop,还包括保证hadoop框架正常高效运行其他框架,比如zookeeper、Flume、Hbase、Hive、Sqoop 等辅助框架
7. 简要描述如何安装配置apache 的一个开源Hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。
8. Hadoop 中需要哪些配置文件,其作用是什么?
1) core-site.xml:
- fs.defaultFS:hdfs://cluster1(域名),这里的值指的是默认的HDFS 路径。
- hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode、
secondaryNamenode 等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。 - ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,这里是
ZooKeeper 集群的地址和端口。注意,数量一定是奇数,且不少于三个节点。
2)hadoop-env.sh:
只需设置jdk 的安装路径,如:export JAVA_HOME=/usr/local/jdk。
3)hdfs-site.xml:
- dfs.replication:他决定着系统里面的文件块的数据备份个数,默认为3 个。
- dfs.data.dir:datanode 节点存储在文件系统的目录。
- dfs.name.dir:是namenode 节点存储hadoop 文件系统信息的本地系统路径。
4)mapred-site.xml:
mapreduce.framework.name: yarn 指定mr 运行在yarn 上。
9. 请列出正常工作的Hadoop 集群中Hadoop 都分别需要启动哪些进程,它们的作用分别是什么?
- NameNode 它是hadoop 中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,
保存有metadate。 - SecondaryNameNode 它不是namenode 的冗余守护进程,而是提供周期检查点和清理任务。帮
助NN 合并editslog,减少NN 启动时间。 - DataNode 它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运
行一个datanode 守护进程。 - ResourceManager(JobTracker)JobTracker 负责调度DataNode 上的工作。每个DataNode 有一
个TaskTracker,它们执行实际工作。 - NodeManager(TaskTracker)执行任务
- DFSZKFailoverController 高可用时它负责监控NN 的状态,并及时的把状态信息写入ZK 。它
通过一个独立线程周期性的调用NN 上的一个特定接口来获取NN 的健康状态。FC 也有选择谁作
为Active NN 的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。 - JournalNode 高可用情况下存放namenode 的editlog 文件.
10. 简述Hadoop 的几个默认端口及其含义
- dfs.namenode.http-address:50070
- SecondaryNameNode 辅助名称节点端口号:50090
- dfs.datanode.address:50010
- fs.defaultFS:8020 或者9000
- yarn.resourcemanager.webapp.address:8088
11. 简述hadoop实现Join的几种方法
- reduce side join
reduce side join是一种最简单的join方式,其主要思想如下:在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。
在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。
- map side join
之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。
Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。
为了支持文件的复制,Hadoop提供了一个类DistributedCache,使用该类的方法如下:
(1)用户使用静态方法DistributedCache.addCacheFile()指定要复制的文件,它的参数是文件的URI(如果是HDFS上的文件,可以这样:hdfs://namenode:9000/home/XXX/file,其中9000是自己配置的NameNode端口号)。JobTracker在作业启动之前会获取这个URI列表,并将相应的文件拷贝到各个TaskTracker的本地磁盘上。
(2)用户使用DistributedCache.getLocalCacheFiles()方法获取文件目录,并使用标准的文件读写API读取相应的文件。
- SemiJoin
SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。
实现方法很简单:选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同。
北京小辉微信公众号