Hadoop面试题

1、hadoop运行原理
答:hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理就是分布式的文件存储系统,将一个大的文件,分割成多个小的文件,进行存储在多台服务器上。

Mapreduce的原理就是使用JobTracker和TaskTracker来进行作业的执行。Map就是将任务展开,reduce是汇总处理后的结果。
(1)HDFS文件上传

在这里插入图片描述
(2)MapReduce
答:mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。
在这里插入图片描述
问题:Task并行经验:
最好每隔task的执行时间至少一分钟.如果job的每个map或者reduce task的运行时间都只有30-40秒钟,那么就减少该job的map或者reduce数,每一个task(map|reduce)的setup和加入到调度器中进行调度,这个中间的过程可能都要花费几秒钟,所以如果每个task都非常快就跑完了,就会在task的开始和结束的时候浪费太多的时间.
默认情况下,每一个task都是一个新的JVM实例,都需要开启和销毁的开销,在一些情况下,JVM开启和销毁的时间可能比实际处理数据的时间要消耗的长,配置task的M JVM 重用可以改善该问题:(mapred.job.reuse.jvm.num.tasks,默认是 1,表示一个 JVM 上最多可以
顺序执行的 task 数目(属于同一个 Job)是 1。也就是说一个 task 启一个 JVM)
如果 input 的文件非常的大,比如 1TB,可以考虑将 hdfs 上的每个 block
size 设大,比如设成 256MB 或者 512MB

(3)YARN
在这里插入图片描述
YARN 是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、
NodeManager(NM)、ApplicationMaster(AM).
1).ResourceManager 负责所有资源的监控、分配和管理;
2).ApplicationMaster 负责每一个具体应用程序的调度和协调;
3).NodeManager 负责每一个节点的维护。对于所有的 applications,RM 拥有绝对的控制权和对资源的分配权。而每个 AM 则会和RM 协商资源,同时和 NodeManager 通信来执行和监控 task。
在这里插入图片描述
面试2:为什么shuffle阶段要对数据进行排序

1.利用分区所在Mapper进行排序,Mapper越多,并行度越高,处理速度也快

2.有利于Mapper压缩合并数据,减少网络层传输

3.基于排序的数据,进行Shuffle时效率更高

4.Reduce基于排序数据合并更高效

面试3:简单描述如何安装配置一个apache开源版hadoop,只描述即可,无需列出完整步骤,能列出步骤更好。

  1. 安装JDK并配置环境变量(/etc/profile)

  2. 关闭防火墙

  3. 配置hosts文件,方便hadoop通过主机名访问(/etc/hosts)

  4. 设置ssh免密码登录

  5. 解压缩hadoop安装包,并配置环境变量

  6. 修改配置文件($HADOOP_HOME/conf)

hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml

  1. 格式化hdfs文件系统 (hadoop namenode -format)

  2. 启动hadoop ($HADOOP_HOME/bin/start-all.sh)

  3. 使用jps查看进程

面试4. 请列出正常工作的hadoop集群中hadoop都分别需要启动那些进程,他们的作用分别是什么,尽可能写的全面些。

  1. NameNode: HDFS的守护进程,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理

  2. Secondary NameNode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。

  3. DataNode:负责把HDFS数据块读写到本地的文件系统。

  4. JobTracker:负责分配task,并监控所有运行的task。

  5. TaskTracker:负责执行具体的task,并与JobTracker进行交互。

面试5:. 请列出你所知道的hadoop调度器,并简要说明其工作方法。

比较流行的三种调度器有:默认调度器FIFO,计算能力调度器Capacity Scheduler,公平调度器Fair Scheduler

  1. 默认调度器FIFO

hadoop中默认的调度器,采用先进先出的原则

  1. 计算能力调度器Capacity Scheduler

选择占用资源小,优先级高的先执行

  1. 公平调度器Fair Scheduler

同一队列中的作业公平共享队列中所有资源

面试6: Hive有那些方式保存元数据的,各有那些特点。

  1. 内存数据库derby,较小,不常用

  2. 本地mysql,较常用

  3. 远程mysql,不常用

面试7. 请简述hadoop怎样实现二级排序。

在Hadoop中,默认情况下是按照key进行排序,如果要按照value进行排序怎么办?

有两种方法进行二次排序,分别为:buffer and in memory sort和 value-to-key conversion。

buffer and in memory sort

主要思想是:在reduce()函数中,将某个key对应的所有value保存下来,然后进行排序。 这种方法最大的缺点是:可能会造成out of memory。

value-to-key conversion

主要思想是:将key和部分value拼接成一个组合key(实现WritableComparable接口或者调setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需要自己实现Paritioner,以便只按照key进行数据划分。Hadoop显式的支持二次排序,在Configuration类中有个setGroupingComparatorClass()方法,可用于设置排序group的key

面试8:. 简述hadoop实现Join的几种方法。

  1. 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阶段进行实际的连接操作。

  1. 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读取相应的文件。

  1. 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相同。

更多关于半连接的介绍,可参考:半连接介绍:

  1. reduce side join + BloomFilter

在某些情况下,SemiJoin抽取出来的小表的key集合在内存中仍然存放不下,这时候可以使用BloomFiler以节省空间。

BloomFilter最常见的作用是:判断某个元素是否在一个集合里面。它最重要的两个方法是:add() 和contains()。最大的特点是不会存在false negative,即:如果contains()返回false,则该元素一定不在集合中,但会存在一定的true negative,即:如果contains()返回true,则该元素可能在集合中。

因而可将小表中的key保存到BloomFilter中,在map阶段过滤大表,可能有一些不在小表中的记录没有过滤掉(但是在小表中的记录一定不会过滤掉),这没关系,只不过增加了少量的网络IO而已。

面试9:请简述mapreduce中的combine和partition的作用

答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。

partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊

面试10:hive内部表和外部表的区别

Hive 向内部表导入数据时,会将数据移动到数据仓库指向的路径;若是外部表,数据的具体存放目录由用户建表时指定

在删除表的时候,内部表的元数据和数据会被一起删除,

而外部表只删除元数据,不删除数据。

这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

面试11: Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?

答:

rowKey最好要创建有规则的rowKey,即最好是有序的。

经常需要批量读取的数据应该让他们的rowkey连续;

将经常需要作为条件查询的关键词组织到rowkey中;

列族的创建:

按照业务特点,把数据归类,不同类别的放在不同列族

面试12. 用mapreduce怎么处理数据倾斜问题

本质:让各分区的数据分布均匀

可以根据业务特点,设置合适的partition策略

如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理

面试13. hadoop框架怎么来优化

答:

可以从很多方面来进行:比如hdfs怎么优化,mapreduce程序怎么优化,yarn的job调度怎么优化,hbase优化,hive优化。。。。。。。

面试18. hbase内部机制是什么

答:

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

物理存储:hbase的持久化数据是存放在hdfs上

存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上

Region内部还可以划分为store,store内部有memstore和storefile

版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并

Region的split

集群管理:zookeeper + hmaster(职责) + hregionserver(职责)

面试19. 我们在开发分布式计算job的时候,是否可以去掉reduce阶段

答:可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。

比如,流量运营项目中的行为轨迹增强功能部分

怎么样才能实现去掉reduce阶段

去掉之后就不排序了,不进行shuffle操作了

面试20: hadoop中常用的数据压缩算法

答:

Lzo

Gzip

Default

Snapyy

如果要对数据进行压缩,最好是将原始数据转为SequenceFile 或者 Parquet File(spark)

面试21: mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部工作流程)

答: appmaster作为调度主管,管理maptask和reducetask

Appmaster负责启动、监控maptask和reducetask

Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取文件,然后处理;

当reduce阶段全部完成之后,appmaster还要向resourcemanager注销自己

面试22:. hive底层与数据库交互原理

答:

Hive的查询功能是由hdfs + mapreduce结合起来实现的

Hive与mysql的关系:只是借用mysql来存储hive中的表的元数据信息,称为metastore

面试23:. hbase过滤器实现原则

答:可以说一下过滤器的父类(比较过滤器,专用过滤器)

过滤器有什么用途:

增强hbase查询数据的功能

减少服务端返回给客户端的数据量

面试24:. reduce之后数据的输出量有多大(结合具体场景,比如pi)

Sca阶段的增强日志(1.5T—2T)

过滤性质的mr程序,输出比输入少

解析性质的mr程序,输出比输入多(找共同朋友)

面试25:.datanode在什么情况下不会备份数据

答:在客户端上传文件时指定文件副本数量为1

面试26.combine出现在哪个过程

答:shuffle过程中

具体来说,是在maptask输出的数据从内存溢出到磁盘,可能会调多次

Combiner使用时候要特别谨慎,不能影响最后的逻辑结果

面试27. hdfs的体系结构

答:

集群架构:

namenode datanode secondarynamenode

(active namenode ,standby namenode)journalnode zkfc

内部工作机制:

数据是分布式存储的

对外提供一个统一的目录结构

对外提供一个具体的响应者(namenode)

数据的block机制,副本机制

Namenode和datanode的工作职责和机制

读写数据流程

面试28. flush的过程

答:flush是在内存的基础上进行的,首先写入文件的时候,会先将文件写到内存中,当内存写满的时候,一次性的将文件全部都写到硬盘中去保存,并清空缓存中的文件,

面试29. 什么是队列

答:是一种调度策略,机制是先进先出

面试30. List与set的区别

答:List和Set都是接口。他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。
最大的不同就是List是可以重复的。而Set是不能重复的。
List适合经常追加数据,插入,删除数据。但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。

面试31.数据的三范式

答:
第一范式()无重复的列

第二范式(2NF)属性完全依赖于主键 [消除部分子函数依赖]
第三范式(3NF)属性不依赖于其它非主属性 [消除传递依赖]

面试32.三个datanode中当有一个datanode出现错误时会怎样?

答:

Namenode会通过心跳机制感知到datanode下线

会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量

会引发运维团队快速响应,派出同事对下线datanode进行检测和修复,然后重新上线

面试33.sqoop在导入数据到mysql中,如何不重复导入数据,如果存在数据问题,sqoop如何处理?

答:FAILED java.util.NoSuchElementException

此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。

hive默认的字段分隔符为’\001’

面试34.描述一下hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?

答:

Shuffle中

Hbase----客户端/regionserver

面试35.MapReduce优化经验

答:(1.)设置合理的map和reduce的个数。合理设置blocksize

(2.)避免出现数据倾斜

(3.combine函数

(4.对数据进行压缩

(5.小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)

(6.参数优化

面试36.请列举出曾经修改过的/etc/下面的文件,并说明修改要解决什么问题?

答:/etc/profile这个文件,主要是用来配置环境变量。让hadoop命令可以在任意目录下面执行。

/ect/sudoers

/etc/hosts

/etc/sysconfig/network

/etc/inittab

面试38.mapreduce的大致流程

答:主要分为八个步骤

1/对文件进行切片规划

2/启动相应数量的maptask进程

3/调用FileInputFormat中的RecordReader,读一行数据并封装为k1v1

4/调用自定义的map函数,并将k1v1传给map

5/收集map的输出,进行分区和排序

6/reduce task任务启动,并从map端拉取数据

7/reduce task调用自定义的reduce函数进行处理

8/调用outputformat的recordwriter将结果数据输出

面试39.搭建hadoop集群 , master和slaves都运行哪些服务

答:master主要是运行我们的主节点,slaves主要是运行我们的从节点。

50.HDFS存储机制

答:HDFS主要是一个分布式的文件存储系统,由namenode来接收用户的操作请求,然后根据文件大小,以及定义的block块的大小,将大的文件切分成多个block块来进行保存

51.举一个例子说明mapreduce是怎么运行的。

Wordcount

52.如何确认hadoop集群的健康状况

答:有完善的集群监控体系(ganglia,nagios)

Hdfs dfsadmin –report

Hdfs haadmin –getServiceState nn1

54.hive如何调优

答:hive最终都会转化为mapreduce的job来运行,要想hive调优,实际上就是mapreduce调优,可以有下面几个方面的调优。解决收据倾斜问题,减少job数量,设置合理的map和reduce个数,对小文件进行合并,优化时把握整体,单个task最优不如整体最优。按照一定规则分区。

58.HBase宕机如何处理

答:宕机分为HMaster宕机和HRegisoner宕机,如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。

如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。

59.假设公司要建一个数据中心,你会如何处理?

先进行需求调查分析

设计功能划分

架构设计

吞吐量的估算

采用的技术类型

软硬件选型

成本效益的分析

项目管理

扩展性

安全性,稳定性

  1. 单项选择题

  2. 下面哪个程序负责 HDFS 数据存储。 答案 C

a)NameNode b)Jobtracker c)Datanoded)secondaryNameNode e)tasktracker

  1. HDfS 中的 block 默认保存几份? 答案 A

a)3 份 b)2 份 c)1 份 d)不确定

  1. 下列哪个程序通常与 NameNode 在一个节点启动?

a)SecondaryNameNode b)DataNodec)TaskTracker d)Jobtracker e)zkfc

  1. Hadoop 作者 答案D

a)Martin Fowler b)Kent Beck c)Doug cutting

  1. HDFS 默认 Block Size 答案 B [M1]

a)32MB b)64MB c)128MB

  1. 下列哪项通常是集群的最主要瓶颈 答案D[M2]

a)CPU b)网络 c)磁盘 d)内存

  1. 关于 SecondaryNameNode 哪项是正确的? 答案C

a)它是NameNode的热备

b)它对内存没有要求

c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间

d)SecondaryNameNode 应与 NameNode 部署到一个节点

多选题:

  1. 下列哪项可以作为集群的管理工具 答案 ABCD (此题出题有误)

a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper

  1. 配置机架感知[M3] 的下面哪项正确 答案 ABC

a)如果一个机架出问题,不会影响数据读写

b)写入数据的时候会写到不同机架的 DataNode 中

c)MapReduce 会根据机架获取离自己比较近的网络数据

  1. Client 端上传文件的时候下列哪项正确 答案BC

a)数据经过 NameNode 传递给 DataNode

b)Client 端将文件切分为 Block,依次上传

c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作

  1. 下列哪个是 Hadoop 运行的模式 答案 ABC

a)单机版 b)伪分布式 c)分布式

  1. Cloudera 提供哪几种安装 CDH 的方法 答案 ABCD

a)Cloudera manager b)Tar ball c)Yum d)Rpm

判断题:全部都是错误滴

  1. Ganglia 不仅可以进行监控,也可以进行告警。( )

  2. Block Size 是不可以修改的。( )

  3. Nagios 不可以监控 Hadoop 集群,因为它不提供 Hadoop 支持。( )

  4. 如果 NameNode 意外终止, SecondaryNameNode 会接替它使集群继续工作。( )

  5. Cloudera CDH 是需要付费使用的。( )

  6. Hadoop 是 Java 开发的,所以 MapReduce 只支持 Java 语言编写。( )

  7. Hadoop 支持数据的随机读写。( )

  8. NameNode 负责管理 metadata, client 端每次读写请求,它都会从磁盘中读取或则

会写入 metadata 信息并反馈 client 端。( )

  1. NameNode 本地磁盘保存了 Block 的位置信息。( )

  2. DataNode 通过长连接与 NameNode 保持通信。( )

  3. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( )

  4. Slave节点要存储数据,所以它的磁盘越大越好。( )

  5. hadoop dfsadmin –report 命令用于检测 HDFS 损坏块。( )

  6. Hadoop 默认调度器策略为 FIFO( )

  7. 集群内每个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。( )

  8. 因为 HDFS 有多个副本,所以 NameNode 是不存在单点问题的。( )

  9. 每个 map 槽(进程)就是一个线程。( )

  10. Mapreduce 的 input split 就是一个 block。( )

  11. NameNode的默认Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( )

  12. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是200 GB。( )

  13. DataNode 首次加入 cluster 的时候,如果 log中报告不兼容文件版本,那需要

NameNode执行“Hadoop namenode -format”操作格式化磁盘。( )

  1. 谈谈 hadoop1 和 hadoop2 的区别

答:

hadoop1的主要结构是由HDFS和mapreduce组成的,HDFS主要是用来存储数据,mapreduce主要是用来计算的,那么HDFS的数据是由namenode来存储元数据信息,datanode来存储数据的。Jobtracker接收用户的操作请求之后去分配资源执行task任务。

在hadoop2中,首先避免了namenode单点故障的问题,使用两个namenode来组成namenode feduration的机构,两个namenode使用相同的命名空间,一个是standby状态,一个是active状态。用户访问的时候,访问standby状态,并且,使用journalnode来存储数据的原信息,一个namenode负责读取journalnode中的数据,一个namenode负责写入journalnode中的数据,这个平台组成了hadoop的HA就是high availableAbility高可靠。

然后在hadoop2中没有了jobtracker的概念了,统一的使用yarn平台来管理和调度资源,yarn平台是由resourceManager和NodeManager来共同组成的,ResourceManager来接收用户的操作请求之后,去NodeManager上面启动一个主线程负责资源分配的工作,然后分配好了资源之后告知ResourceManager,然后ResourceManager去对应的机器上面执行task任务。

  1. 说说值对象与引用对象的区别?

  2. 谈谈你对反射机制的理解及其用途?

答:java中的反射,首先我们写好的类,经过编译之后就编程了.class文件,我们可以获取这个类的.class文件,获取之后,再来操作这个类。这个就是java的反射机制。

  1. ArrayList、Vector、LinkedList 的区别及其优缺点?HashMap、HashTable 的区别及其优缺点?

答:ArrayList 和Vector是采用数组方式存储数据, ,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

HashMap和HashTable:Hashtable的方法是同步的,而HashMap的方法不是,Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。HashMap是一个线程不同步的,那么就意味着执行效率高,HashTable是一个线程同步的就意味着执行效率低,但是HashMap也可以将线程进行同步,这就意味着,我们以后再使用中,尽量使用HashMap这个类。

  1. 文件大小默认为 64M,改为 128M 有啥影响?

答:更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加namenode的管理内存压力。

  1. RPC 原理?

答:

1.调用客户端句柄;执行传送参数

2.调用本地系统内核发送网络消息

  1. 消息传送到远程主机

  2. 服务器句柄得到消息并取得参数

  3. 执行远程过程

  4. 执行的过程将结果返回服务器句柄

  5. 服务器句柄返回结果,调用远程系统内核

  6. 消息传回本地主机

  7. 客户句柄由内核接收消息

  8. 客户接收句柄返回的数据

  9. 对 Hadoop 有没有调优经验,没有什么使用心得?(调优从参数调优讲起)

dfs.block.size

Mapredure:

io.sort.mb

io.sort.spill.percent

mapred.local.dir

mapred.map.tasks &mapred.tasktracker.map.tasks.maximum

mapred.reduce.tasks &mapred.tasktracker.reduce.tasks.maximum

mapred.reduce.max.attempts

mapred.reduce.parallel.copies

mapreduce.reduce.shuffle.maxfetchfailures

mapred.child.java.opts

mapred.reduce.tasks.speculative.execution

mapred.compress.map.output &mapred.map.output.compression.codec

mapred.reduce.slowstart.completed.maps

72以你的实际经验,说下怎样预防全表扫描

答:

1.应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫

3.描应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行

全表扫描

4.in 和 not in,用具体的字段列表代替,不要返回用不到的任何字段。in 也要慎用,否则会导致全表扫描

5.避免使用模糊查询
6.任何地方都不要使用select* from t

  1. zookeeper 优点,用在什么场合

答:极大方便分布式应用的开发;(轻量,成本低,性能好,稳定性和可靠性高)

75.把公钥追加到授权文件的命令?该命令是否在 root 用户下执行?

答:ssh-copy-id

哪个用户需要做免密登陆就在哪个用户身份下执行

  1. HadoopHA 集群中各个服务的启动和关闭的顺序?

答:

  1. 在 hadoop 开发过程中使用过哪些算法?其应用场景是什么?

答:排序,分组,topk,join,group

  1. java 是传值还是传址?

答:引用传递。传址

  1. hbase 怎么给 web 前台提供接口来访问(HTABLE可以提供对 HBase的访问,但是怎么查询同一条记录的多个版本数据)?

答:使用HTable来提供对HBase的访问,可以使用时间戳来记录一条数据的多个版本。

  1. .htable API 有没有线程安全问题,在程序中是单例还是多例?[M4]

多例:当多线程去访问同一个表的时候会有。

  1. 你们的数据是用什么导入到数据库的?导入到什么数据库?

处理完成之后的导出:利用hive 处理完成之后的数据,通过sqoop 导出到 mysql 数据库

中,以供报表层使用。

  1. 你们处理数据是直接读数据库的数据还是读文本数据?

将日志数据导入到 hdfs 之后进行处理

  1. hive 跟 hbase 的区别是?

答:Hive和Hbase是两种基于Hadoop的不同技术–Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。当然,这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到Hbase,设置再从Hbase写回Hive。

  1. hive 中的压缩格式 RCFile、TextFile、SequenceFile [M5] 各有什么区别?

以上 3 种格式一样大的文件哪个占用空间大小…等等

采用RCfile的格式读取的数据量(373.94MB)远远小于sequenceFile的读取量(2.59GB)

2、执行速度前者(68秒)比后者(194秒)快很多

从以上的运行进度看,snappy的执行进度远远高于bz的执行进度。

在hive中使用压缩需要灵活的方式,如果是数据源的话,采用RCFile+bz或RCFile+gz的方式,这样可以很大程度上节省磁盘空间;而在计算的过程中,为了不影响执行的速度,可以浪费一点磁盘空间,建议采用RCFile+snappy的方式,这样可以整体提升hive的执行速度。

至于lzo的方式,也可以在计算过程中使用,只不过综合考虑(速度和压缩比)还是考虑snappy适宜。

  1. MapReduce 2.0”与“YARN”是否等同,尝试解释说明

MapReduce 2.0 --àmapreduce + yarn

  1. 数据备份,你们是多少份,如果数据超过存储容量,你们怎么处理?

3份,多加几个节点

1、 在hadoop中定义的主要公用InputFormat中,哪个是默认值? FileInputFormat

2、 两个类TextInputFormat和KeyValueInputFormat的区别是什么?

   答:TextInputFormat主要是用来格式化输入的文本文件的,KeyValueInputFormat则主要是用来指定输入输出的key,value类型的

3、 在一个运行的hadoop任务中,什么是InputSplit?

   InputSplit是InputFormat中的一个方法,主要是用来切割输入文件的,将输入文件切分成多个小文件,

   然后每个小文件对应一个map任务

4、 Hadoop框架中文件拆分是怎么调用的?

   InputFormat  --> TextInputFormat  -->RecordReader  --> LineRecordReader  --> LineReader

8、 如果没有自定义partitioner,那数据在被送达reducer前是如何被分区的?

   hadoop有一个默认的分区类,HashPartioer类,通过对输入的k2去hash值来确认map输出的k2,v2送到哪一个reduce中去执行。

10、分别举例什么情况要使用 combiner,什么情况不使用?

   求平均数的时候就不需要用combiner,因为不会减少reduce执行数量。在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率

11、Hadoop中job和tasks之间的区别是什么?

Job是我们对一个完整的mapreduce程序的抽象封装

Task是job运行时,每一个处理阶段的具体实例,如map task,reduce task,maptask和reduce task都会有多个并发运行的实例

12、hadoop中通过拆分任务到多个节点运行来实现并行计算,但某些节点运行较慢会拖慢整个任务的运行,hadoop采用全程机制应对这个情况?

Speculate 推测执行

14、有可能使hadoop任务输出到多个目录中吗?如果可以,怎么做?

   自定义outputformat或者用multioutputs工具

15.HadoopHA面试:
Q:在故障切换期间,ZooKeeper主要是发挥什么作用呢,有以下几点:

    失败保护:集群中每一个NameNode都会在ZooKeeper维护一个持久的session,机器一旦挂掉,session就会过期,故障迁移就会触发
    Active NameNode选择:ZooKeeper有一个选择ActiveNN的机制,一旦现有的ANN宕机,其他NameNode可以向ZooKeeper申请排他成为下一个Active节点
    防脑裂: ZK本身是强一致和高可用的,可以用它来保证同一时刻只有一个活动节点

Q:关于HadoopHA机制:
HadoopHA机制,归纳起来主要是两块:元数据同步和主备选举。元数据同步依赖于QJM共享存储,主备选举依赖于ZKFC和Zookeeper。整个过程还是比较复杂的,如果能理解Paxos协议,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值