hadoop 面试题分享 部分有答案(自己总结的)

hadoop 面试题分享 部分有答案(自己总结的)

MapReduce的原理
(1)MapReduce 是一种分布式计算框架,由 Google 提出,主要用于搜索领域,以解决海量数据的计算问题。(分布式存储和分布式计算发轫于 Google 这样的公司是不足为奇的)

(2)MapReduce 由两个阶段组成:Map (开始)和 Reduce(结束),用户只需实现 map() 和 reduce() 两个函数,即可实现分布式计算,十分便捷

输入文件来自于:HDFS

(3)这两个函数的形参是 key、value,表示函数的输入信息。

执行流程:
构造[K1, V1]
Map:[K1, V1] ⇒ [K2, V2]
分区
分组:[K2, V2] ⇒ [K2, {Vs}](将相同 key 的 values 置于一个集合中)
规约
copy 到节点,排序
Reduce:[K2, {Vs}] ⇒ [K3, V3]
保存

mapreduce 作业,不使用 reduce 来输出,用什么能代替 reduce 的功能
每个reduce输出一个结果文件,有多少reduce就会有多少输出文件,然后会有一些其他文件。不会合并的,导出的时候可以用命令行进行合并

hive 如何调优?
1. 设置执行引擎
set hive.execution.engine=mr;
set hive.execution.engine=spark;
如果设置执行引擎为mr,那么就会调用Hadoop的maprecude来运行需要执行job的程序;如果设置执行引擎为spark,那么就会调用spark来执行任务。有条件的话,就设置执行引擎为Spark,因为实在是运行的比Hadoop的MapReduce快了很多。
2. 针对mr调优,可以设置参数(针对map端):
set mapred.max.split.size=1000000;
3. 针对mr调优,可以设置参数(针对reduce端)
mapreduce.job.reduces=2(可手工设置)
Hive.exec.reducers.max (hive设置的最大可用reducer)
hive.exec.reducers.bytes.per.reducer (hive默认每1G文件分配一个reduce)
分配算法
num_reduce_tasks=min[maxReucers,input.size/perReducer]

HBase写数据的原理
1、客户端向hregionServer请求写数据
2、hregionServer将数据先写入hlog中。
3、hregionServer将数据后写入memstore中。
4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。
5、将硬盘中数据通过HFile来序列化,再将数据传输到HDFS进行存储。并对Hlog做一个标记。
6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并,此时数据块大于256M)。
7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。
8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改.META文件中关于数据所在server的信息)。注意:hlog会同步到HDFS中。
读数据的流程
1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。
2、数据从内存和硬盘合并后返回到客户端。

hbase 宕机如何处理
HBase的故障恢复我们都以RegionServer宕机恢复为例,引起RegionServer宕机的原因各种各样,有因为Full GC导致、网络异常导致、官方Bug导致(close wait端口未关闭)以及DataNode异常导致等等。
HBase故障恢复的最大看点就在于如何通过HLog回放补救丢失数据。如果不幸一旦发生RegionServer宕机或者其他异常,这种设计可以从HLog中进行日志回放进行数据补救,保证数据不丢失。
宕机RegionServer上的所有Region重新分配到集群中其他正常RegionServer上去,再根据HLog进行丢失数据恢复,恢复完成之后就可以对外提供服务,整个过程都是自动完成的,并不需要人工介入。

、hadoop 运转的原理 即是 MapReduce的原理
Hdfs主要模块:NameNode、DataNode
Yarn主要模块:ResourceManager、NodeManager

HDFS 存储的机制
集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。

hadoop 中 Combiner 的效果
combiner 也是一个 reduce,它可以削减 map 到 reudce 的数据传输,进步 shuff 速度。
牢记平均值不要用。需求输入=map 的输出,输出=reduce 的输入

Linux 下 hadoop的常用命令
1.上传文件

1)hadoop fs -put words.txt /path/to/input/

2)hdfs dfs -put words.txt /path/wc/input/

2.获取hdfs中的文件

hadoop fs -get /path/wc/input/words.txt

3.合并下载多个文件

hadoop fs -getmerge /path/wc/input/words.txt /path/wc/input/words2.txt

4.查看某目录下所含文件

1)hadoop fs -ls /path/wc/input/

2)hadoop fs -ls hdfs://node1:9000/path/wc/input/

5.查看文件内容

hadoop fs -cat /path/wc/input/words.txt

6.显示一个文件的末尾

hadoop fs -tail /weblog/test.log

7.以字符形式打印一个文件的内容

hadoop fs -text /weblog/test.log

8.在hdfs上创建目录

hadoop fs -mkdir -p /aaa/bbb/cc/dd 

9.从本地剪切粘贴到hdfs

hadoop fs -moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd

10.从hdfs剪切粘贴到本地

hadoop fs -moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt 

11.从本地文件系统中拷贝文件到hdfs路径去

hadoop fs -copyFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd

12.从hdfs拷贝到本地

hadoop fs -copyToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt 

13.从hdfs的一个路径拷贝hdfs的另一个路径

hadoop fs -cp /aaa/test1.txt /bbb/test2.txt

14.在hdfs目录中移动文件

hadoop fs -mv /aaa/jdk.tar.gz / 

15.追加一个文件到已经存在的文件末尾

1)hadoop fs -appendToFile hello.txt hdfs://node1:9000/hello.txt

2)hadoop fs -appendToFile hello.txt /hello.txt

16.离开hadoop的 安全模式(系统处于只读状态,namenode不会处理任何块的复制和删除命令)

hadoop dfsadmin -safemode leave

17.删除目录及其里面内容

hadoop fs -rmr /path/wc/input/words.txt

18.删除空目录

hadoop fs -rmdir  /aaa/bbb/ccc

19.与linux文件系统中的用法一样,对文件所属权限

1)hadoop fs -chmod 666 /hello.txt 

2)hadoop fs -chown someuser:somegrp /hello.txt 

20.统计文件系统的可用空间信息

hadoop fs -df -h /

21.统计文件夹的大小信息

hadoop fs -du -s -h /aaa/*

22.统计一个指定目录下的文件节点数量

hadoop fs -count /aaa/

23.设置hdfs中文件的副本数量

hadoop fs -setrep 3 /aaa/test.txt

Map Reduce 的益写
MapReduce是一个分布式计算框架,用于大规模数据集的并行运算。简单地说,MapReduce就是”任务的分解与结果的汇总”:将一个大的数据处理任务划分成许多个子任务,并将这些子任务分配给各个节点并行处理,然后通过整合各个节点的中间结果,得到最终结果。

MapReduce是主从架构,在master上跑的是JobTracker/ResourceManager,负责资源分配与任务调度;而各个slave上跑的是TaskTracker/NodeManager,负责执行任务,并定期向master汇报最新状态与执行进度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些Hadoop面试题答案: 1. 什么是HadoopHadoop一个开源的分布式计算框架,可以处理大规模数据集。它是由Apache基金会开发的,使用MapReduce编程模型和Hadoop布式文件系统(HDFS)来存储和处理数据。 2. 什么是MapReduceMapReduce是一种编程模型,用于在布式环境中进行大规模数据处理。它将输入数据成若干块,并在多个计算节点上进行并行处理。MapReduce将数据映射为键值对,并将Map函数应用于每个键值对。然后,将生成的中间结果传递给Reduce函数,生成最终输出。 3. Hadoop有哪些组件? Hadoop包括以下组件: - Hadoop布式文件系统(HDFS):用于存储大规模数据集的布式文件系统。 - MapReduce:用于在布式环境中并行处理大规模数据集的编程模型。 - YARN(Yet Another Resource Negotiator):用于管理集群资源,调度任务和监控应用程序的框架。 - HBase:一个布式的NoSQL数据库,可用于存储大规模结构化数据。 - Pig:一种高级的数据流编程语言,用于在Hadoop上进行数据析。 - Hive:一种基于SQL的数据仓库工具,可用于在Hadoop上进行数据查询和析。 - Spark:一种基于内存的分布式计算框架,用于在Hadoop上进行数据处理和析。 4. Hadoop中什么是块? 在Hadoop中,块是数据的基本单位。HDFS将大文件成多个块,并将这些块存储在不同的计算节点上。默认情况下,块大小为128 MB。 5. 什么是NameNode和DataNode? NameNode是Hadoop布式文件系统(HDFS)的主节点,用于管理文件系统的元数据。它维护了文件系统的命名空间和文件与块之间的映射关系。DataNode是存储实际数据块的节点。 6. 什么是Hadoop调度器? Hadoop调度器用于管理集群资源,并将任务配给不同的计算节点。它决定哪些任务应该在哪个节点上运行,并确保每个节点都得到足够的资源来完成任务。 7. 什么是Hadoop压缩?如何进行压缩? Hadoop压缩是指将数据压缩为更小的存储大小,以便在Hadoop中更有效地存储和传输数据。Hadoop支持多种压缩算法,例如Gzip,Snappy和LZO。可以使用Hadoop提供的压缩库或使用自定义压缩程序来压缩数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值