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,只描述即可,无需列出完整步骤,能列出步骤更好。
-
安装JDK并配置环境变量(/etc/profile)
-
关闭防火墙
-
配置hosts文件,方便hadoop通过主机名访问(/etc/hosts)
-
设置ssh免密码登录
-
解压缩hadoop安装包,并配置环境变量
-
修改配置文件($HADOOP_HOME/conf)
hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml
-
格式化hdfs文件系统 (hadoop namenode -format)
-
启动hadoop ($HADOOP_HOME/bin/start-all.sh)
-
使用jps查看进程
面试4. 请列出正常工作的hadoop集群中hadoop都分别需要启动那些进程,他们的作用分别是什么,尽可能写的全面些。
-
NameNode: HDFS的守护进程,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理
-
Secondary NameNode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。
-
DataNode:负责把HDFS数据块读写到本地的文件系统。
-
JobTracker:负责分配task,并监控所有运行的task。
-
TaskTracker:负责执行具体的task,并与JobTracker进行交互。
面试5:. 请列出你所知道的hadoop调度器,并简要说明其工作方法。
比较流行的三种调度器有:默认调度器FIFO,计算能力调度器Capacity Scheduler,公平调度器Fair Scheduler
- 默认调度器FIFO
hadoop中默认的调度器,采用先进先出的原则
- 计算能力调度器Capacity Scheduler
选择占用资源小,优先级高的先执行
- 公平调度器Fair Scheduler
同一队列中的作业公平共享队列中所有资源
面试6: Hive有那些方式保存元数据的,各有那些特点。
-
内存数据库derby,较小,不常用
-
本地mysql,较常用
-
远程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的几种方法。
- 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相同。
更多关于半连接的介绍,可参考:半连接介绍:
- 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.假设公司要建一个数据中心,你会如何处理?
先进行需求调查分析
设计功能划分
架构设计
吞吐量的估算
采用的技术类型
软硬件选型
成本效益的分析
项目管理
扩展性
安全性,稳定性
-
单项选择题
-
下面哪个程序负责 HDFS 数据存储。 答案 C
a)NameNode b)Jobtracker c)Datanoded)secondaryNameNode e)tasktracker
- HDfS 中的 block 默认保存几份? 答案 A
a)3 份 b)2 份 c)1 份 d)不确定
- 下列哪个程序通常与 NameNode 在一个节点启动?
a)SecondaryNameNode b)DataNodec)TaskTracker d)Jobtracker e)zkfc
- Hadoop 作者 答案D
a)Martin Fowler b)Kent Beck c)Doug cutting
- HDFS 默认 Block Size 答案 B [M1]
a)32MB b)64MB c)128MB
- 下列哪项通常是集群的最主要瓶颈 答案D[M2]
a)CPU b)网络 c)磁盘 d)内存
- 关于 SecondaryNameNode 哪项是正确的? 答案C
a)它是NameNode的热备
b)它对内存没有要求
c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
d)SecondaryNameNode 应与 NameNode 部署到一个节点
多选题:
- 下列哪项可以作为集群的管理工具 答案 ABCD (此题出题有误)
a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper
- 配置机架感知[M3] 的下面哪项正确 答案 ABC
a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的 DataNode 中
c)MapReduce 会根据机架获取离自己比较近的网络数据
- Client 端上传文件的时候下列哪项正确 答案BC
a)数据经过 NameNode 传递给 DataNode
b)Client 端将文件切分为 Block,依次上传
c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作
- 下列哪个是 Hadoop 运行的模式 答案 ABC
a)单机版 b)伪分布式 c)分布式
- Cloudera 提供哪几种安装 CDH 的方法 答案 ABCD
a)Cloudera manager b)Tar ball c)Yum d)Rpm
判断题:全部都是错误滴
-
Ganglia 不仅可以进行监控,也可以进行告警。( )
-
Block Size 是不可以修改的。( )
-
Nagios 不可以监控 Hadoop 集群,因为它不提供 Hadoop 支持。( )
-
如果 NameNode 意外终止, SecondaryNameNode 会接替它使集群继续工作。( )
-
Cloudera CDH 是需要付费使用的。( )
-
Hadoop 是 Java 开发的,所以 MapReduce 只支持 Java 语言编写。( )
-
Hadoop 支持数据的随机读写。( )
-
NameNode 负责管理 metadata, client 端每次读写请求,它都会从磁盘中读取或则
会写入 metadata 信息并反馈 client 端。( )
-
NameNode 本地磁盘保存了 Block 的位置信息。( )
-
DataNode 通过长连接与 NameNode 保持通信。( )
-
Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( )
-
Slave节点要存储数据,所以它的磁盘越大越好。( )
-
hadoop dfsadmin –report 命令用于检测 HDFS 损坏块。( )
-
Hadoop 默认调度器策略为 FIFO( )
-
集群内每个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。( )
-
因为 HDFS 有多个副本,所以 NameNode 是不存在单点问题的。( )
-
每个 map 槽(进程)就是一个线程。( )
-
Mapreduce 的 input split 就是一个 block。( )
-
NameNode的默认Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( )
-
Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是200 GB。( )
-
DataNode 首次加入 cluster 的时候,如果 log中报告不兼容文件版本,那需要
NameNode执行“Hadoop namenode -format”操作格式化磁盘。( )
- 谈谈 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任务。
-
说说值对象与引用对象的区别?
-
谈谈你对反射机制的理解及其用途?
答:java中的反射,首先我们写好的类,经过编译之后就编程了.class文件,我们可以获取这个类的.class文件,获取之后,再来操作这个类。这个就是java的反射机制。
- 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这个类。
- 文件大小默认为 64M,改为 128M 有啥影响?
答:更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加namenode的管理内存压力。
- RPC 原理?
答:
1.调用客户端句柄;执行传送参数
2.调用本地系统内核发送网络消息
-
消息传送到远程主机
-
服务器句柄得到消息并取得参数
-
执行远程过程
-
执行的过程将结果返回服务器句柄
-
服务器句柄返回结果,调用远程系统内核
-
消息传回本地主机
-
客户句柄由内核接收消息
-
客户接收句柄返回的数据
-
对 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
- zookeeper 优点,用在什么场合
答:极大方便分布式应用的开发;(轻量,成本低,性能好,稳定性和可靠性高)
75.把公钥追加到授权文件的命令?该命令是否在 root 用户下执行?
答:ssh-copy-id
哪个用户需要做免密登陆就在哪个用户身份下执行
- HadoopHA 集群中各个服务的启动和关闭的顺序?
答:
- 在 hadoop 开发过程中使用过哪些算法?其应用场景是什么?
答:排序,分组,topk,join,group
- java 是传值还是传址?
答:引用传递。传址
- hbase 怎么给 web 前台提供接口来访问(HTABLE可以提供对 HBase的访问,但是怎么查询同一条记录的多个版本数据)?
答:使用HTable来提供对HBase的访问,可以使用时间戳来记录一条数据的多个版本。
- .htable API 有没有线程安全问题,在程序中是单例还是多例?[M4]
多例:当多线程去访问同一个表的时候会有。
- 你们的数据是用什么导入到数据库的?导入到什么数据库?
处理完成之后的导出:利用hive 处理完成之后的数据,通过sqoop 导出到 mysql 数据库
中,以供报表层使用。
- 你们处理数据是直接读数据库的数据还是读文本数据?
将日志数据导入到 hdfs 之后进行处理
- hive 跟 hbase 的区别是?
答:Hive和Hbase是两种基于Hadoop的不同技术–Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。当然,这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到Hbase,设置再从Hbase写回Hive。
- 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适宜。
- MapReduce 2.0”与“YARN”是否等同,尝试解释说明
MapReduce 2.0 --àmapreduce + yarn
- 数据备份,你们是多少份,如果数据超过存储容量,你们怎么处理?
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协议,