分享

最新大数据hadoop、spark等面试题汇总

desehawk 发表于 2018-1-29 15:06:48 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 6 33191
本帖最后由 desehawk 于 2018-1-29 17:20 编辑

搜集了一些面试题,这里汇总下。
1.简述对大数据组件:Yarn,Spark,Hbase,Hive的理解

2.hdf文件系统中Namenode和DataNode区别和联系

3.请描述Spark RDD中的transform和action的理解?
4.两个类TextInputFormat和KeyValueInputFormat的区别是什么?

5.在hadoop任务中,什么是inputsplit?

6.hadoop框架中文件拆分是怎么被调用的?

7.参考下面的MR系统场景:
hdfs块大小为64M
输入类型为:64M
有三个大小的文件,分别为64KB,65MB,127MB
hadoop文件会被这些文件拆分为多少split?

8.hadoop文件中,RecordReader的作用是什么?

9.Map阶段结束后,Hadoop框架会处理:Partitioning,shuffle,和Sort,在这个阶段都发生了什么?

10.如果没有定义Partitioner,那数据在没有被送达reducer之前是如何被分区的?

11.什么是combiner?

12.分别举例什么情况下会使用combiner,什么情况下不会使用?



13.以下操作是属于窄依赖的spark transformation的是
(A) Rdd.map  (B)rdd.count (C)rdd.filter (D)rdd.reducebykey

14.在Hadoop中定义的主要公用inputFormats中,哪一个是默认值(A)TextInputFormat
(B)KeyValueInputFormat
(C)SequenceFileInputFormat

15.请写出下面代码执行后A1和B1的值
val books=List("Hadoop","Hive","HDFS")
val A1=books.map(a->a.toUpperCase())
val B1=books.flatMap(a->a.toUpperCase())




本帖被以下淘专辑推荐:

已有(6)人评论

跳转到指定楼层
desehawk 发表于 2018-1-29 17:42:34
本帖最后由 desehawk 于 2018-2-6 09:45 编辑

这里尝试做一下:先回答前三个,后面有时间在回答,大家有兴趣,可以解答下

1.简述对大数据组件:Yarn,Spark,Hbase,Hive的理解
Yarn可以理解为大数据组件运行job的管理器。
Spark分布式的利用内存进行分布式运算的大数据组件
Hbase是基于Hadoop的大数据常用数据库
Hive则是基于Hadoop的大数据数据仓库,操作跟关系数据库类似。

2.hdf文件系统中Namenode和DataNode区别和联系
Namenode存储了元数据,并且调度、协调整个集群
DataNode主要用来存储数据

3.请描述Spark RDD中的transform和action的理解?
1,transformation是得到一个新的RDD,方式很多,比如从数据源生成一个新的RDD,从RDD生成一个新的RDD

2,action是得到一个值,或者一个结果

##########################
两个类TextInputFormat和KeyValueTextInputFormat的区别?

答案:

FileInputFormat的子类:

TextInputFormat(默认类型,键是LongWritable类型,值为Text类型,key为当前行在文件中的偏移量,value为当前行本身);

KeyValueTextInputFormat(适合文件自带key,value的情况,只要指定分隔符即可,比较实用,默认是\\t分割);


在一个运行的hadoop任务中,什么是InputSpilt?

答案:InputSplit是MapReduce对文件进行处理和运算的输入单位,只是一个逻辑概念,每个InputSplit并没有对文件实际的切割,只是记录了要处理的数据的位置(包括文件的path和hosts)和长度(由start和length决定),默认情况下与block一样大。 拓展:需要在定义InputSplit后,展开讲解mapreduce的原理

  每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一



1.png



回复

使用道具 举报

wangxiaojian 发表于 2018-1-30 10:23:35
会不会太少了点~
回复

使用道具 举报

desehawk 发表于 2018-1-30 12:19:08
本帖最后由 desehawk 于 2018-1-30 12:26 编辑

1.简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。

答:第一题:1使用root账户登录

2 修改IP

3 修改host主机名

4 配置SSH免密码登录

5 关闭防火墙

6  安装JDK

6 解压hadoop安装包

7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml

8 配置hadoop环境变量

9 格式化 hadoop namenode-format

10 启动节点start-all.sh



2.0 请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么,请尽量列的详细一些。

       答:namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量

Secondname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。

Datanode:存储数据块,负责客户端对数据块的io请求

Jobtracker :管理任务,并将任务分配给 tasktracker。

Tasktracker: 执行JobTracker分配的任务。

Resourcemanager

Nodemanager

Journalnode

Zookeeper

Zkfc

3.0请写出以下的shell命令

(1)杀死一个job

(2)删除hdfs上的 /tmp/aaa目录

(3)加入一个新的存储节点和删除一个节点需要执行的命令

答:(1)hadoop job –list   得到job的id,然后执      行 hadoop job  -kill  jobId就可以杀死一个指定jobId的job工作了。

(2)hadoopfs  -rmr /tmp/aaa

(3)  增加一个新的节点在新的几点上执行

            Hadoop  daemon.sh start  datanode

                     Hadooop daemon.sh  start  tasktracker/nodemanager



下线时,要在conf目录下的excludes文件中列出要下线的datanode机器主机名

              然后在主节点中执行  hadoop  dfsadmin  -refreshnodes  à下线一个datanode

删除一个节点的时候,只需要在主节点执行

hadoop mradmin -refreshnodes  ---à下线一个tasktracker/nodemanager


4.0      请列出你所知道的hadoop调度器,并简要说明其工作方法

答:Fifo schedular :默认,先进先出的原则

Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。

Fair schedular:公平调度,所有的 job 具有相同的资源。

5.0      请列出你在工作中使用过的开发mapreduce的语言

答:java,hive,(python,c++)hadoop streaming

6.0      当前日志采样格式为

           a , b , c , d

           b , b , f , e

           a , a , c , f        

请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数


7.0      你认为用java , streaming , pipe方式开发map/reduce , 各有哪些优点

就用过 java 和 hiveQL。

Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。

HiveQL 基本都是针对 hive 中的表数据进行编写,但对复杂的逻辑(杂)很难进行实现。写起来简单。



8.0 hive有哪些方式保存元数据,各有哪些优点

              三种:自带内嵌数据库derby,挺小,不常用,只能用于单节点

mysql常用

上网上找了下专业名称:single user mode..multiuser mode...remote user mode



9.0 请简述hadoop怎样实现二级排序(就是对key和value双排序)

    第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。

第二种方法是,将值的一部分或整个值加入原始key,生成一个组合key。这两种方法各有优势,第一种方法编写简单,但并发度小,数据量大的情况下速度慢(有内存耗尽的危险),

第二种方法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。



10.简述hadoop实现jion的几种方法

Map side join----大小表join的场景,可以借助distributed cache

Reduce side join


12.0 请简述mapreduce中的combine和partition的作用

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

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



13.0 hive内部表和外部表的区别

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

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

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

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



14. Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?

答:

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

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

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



列族的创建:

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


15. 用mapreduce怎么处理数据倾斜问题

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

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

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


16. hadoop框架怎么来优化

答:

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

17. hbase内部机制是什么

答:

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

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

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

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

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

Region的split

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

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

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

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

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

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


19 hadoop中常用的数据压缩算法

答:

Lzo

Gzip

Default

Snapyy

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


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

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

Appmaster负责启动、监控maptask和reducetask

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

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



21. hive底层与数据库交互原理

答:

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

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

22. hbase过滤器实现原则

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

过滤器有什么用途:

增强hbase查询数据的功能

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



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

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

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

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

24. 现场出问题测试mapreduce掌握情况和hive的ql语言掌握情况

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



37.请描述一下开发过程中如何对上面的程序进行性能分析,对性能分析进行优化的过程。



38. 现有 1 亿个整数均匀分布,如果要得到前 1K 个最大的数,求最优的算法。

参见《海量数据算法面试大全》


39.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将结果数据输出


41.用mapreduce实现sql语 select  count (x) from  a  group by b;



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

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



45. hadoop参数调优



46. pig ,  latin  ,  hive语法有什么不同

答:



47. 描述Hbase,ZooKeeper搭建过程



48.hadoop运行原理

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

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



49.mapreduce的原理

答:mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。



50.HDFS存储机制

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



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

Wordcount



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

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

Hdfs dfsadmin –report

Hdfs haadmin  –getServiceState  nn1

53.mapreduce作业,不让reduce输出,用什么代替reduce的功能。

54.hive如何调优

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



55.hive如何控制权限

我们公司没做,不需要



56.HBase写数据的原理是什么?

答:



57.hive能像关系型数据库那样建多个库吗?

答:当然能了。



58.HBase宕机如何处理

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

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



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

先进行需求调查分析

设计功能划分

架构设计

吞吐量的估算

采用的技术类型

软硬件选型

成本效益的分析

项目管理

扩展性

安全性,稳定性


60. 单项选择题

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

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



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

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



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

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



4. Hadoop 作者         答案D

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



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

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



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

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



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

a)它是NameNode的热备   

b)它对内存没有要求

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

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





多选题:

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

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

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

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

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

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

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

a)数据经过  NameNode  传递给  DataNode

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

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

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

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

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

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



判断题:全部都是错误滴

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



63. 谈谈 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任务。

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



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

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



66. 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这个类。



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

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



69. RPC 原理?

答:

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

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

3. 消息传送到远程主机

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

5. 执行远程过程

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

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

8. 消息传回本地主机

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

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



70. 对 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



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

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





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

答:ssh-copy-id

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



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

答:



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

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



78. 在实际工作中使用过哪些集群的运维工具,请分别阐述期作用。

答:nmon   ganglia   nagios

79. 一台机器如何应对那么多的请求访问,高并发到底怎么实现,一个请求怎么产生的,

在服务端怎么处理的,最后怎么返回给用户的,整个的环节操作系统是怎么控制的?





80. java 是传值还是传址?

答:引用传递。传址



81. 问:你们的服务器有多少台?

100多台



82. 问:你们服务器的内存多大?

128G或者64G的





83. hbase 怎么预分区?

建表时可以通过shell命令预分区,也可以在代码中建表做预分区

《具体命令详见笔记汇总》





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

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

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

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



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

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

中,以供报表层使用。                                                                                       



87. 你们业务数据量多大?有多少行数据?(面试了三家,都问这个问题)

开发时使用的是部分数据,不是全量数据,有将近一亿行(8、9 千万,具体不详,一般开

发中也没人会特别关心这个问题)



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

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



89. 你们写 hive 的 hql 语句,大概有多少条?

不清楚,我自己写的时候也没有做过统计



90. 你们提交的 job 任务大概有多少个?这些job 执行完大概用多少时间?(面试了三家,都问这个问题)

没统计过,加上测试的,会有很多

Sca阶段,一小时运行一个job,处理时间约12分钟

Etl阶段,有2千多个job,从凌晨12:00开始次第执行,到早上5点左右全部跑完



91. hive 跟 hbase 的区别是?

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



92. 你在项目中主要的工作任务是?

Leader

预处理系统、手机位置实时查询系统,详单系统,sca行为轨迹增强子系统,内容识别中的模板匹配抽取系统

设计、架构、技术选型、质量把控,进度节点把握。。。。。。



93. 你在项目中遇到了哪些难题,是怎么解决的?

Storm获取实时位置信息动态端口的需求





101. job 的运行流程(提交一个 job 的流程)?



102Hadoop 生态圈中各种框架的运用场景?









103. 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适宜。





104假如:Flume 收集到的数据很多个小文件,我需要写 MR 处理时将这些文件合并

(是在 MR 中进行优化,不让一个小文件一个 MapReduce)

他们公司主要做的是中国电信的流量计费为主,专门写 MR。



105. 解释“hadoop”和“hadoop 生态系统”两个概念







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

MapReduce 2.0  --àmapreduce + yarn



110. MapReduce 2.0 中,MRAppMaster 主要作用是什么,MRAppMaster 如何实现任务

容错的?



111. 为什么会产生 yarn,它解决了什么问题,有什么优势?



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

3份,多加几个节点

115. 怎么提升多个 JOB 同时执行带来的压力,如何优化,说说思路?

       增加运算能力



116. 你们用 HBASE 存储什么数据?

流量详单





117. 你们的 hive 处理数据能达到的指标是多少?



118.hadoop中RecorderReader的作用是什么???







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



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

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



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

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

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



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

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





5、  参考下列M/R系统的场景:hdfs块大小为64MB,输入类为FileInputFormat,有3个文件的大小分别为64KB, 65MB, 127MB

会产生多少个maptask   4个    65M这个文件只有一个切片《原因参见笔记汇总TextInputformat源码分析部分》





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、如何为一个hadoop任务设置mappers的数量?

Split机制



16、如何为一个hadoop任务设置要创建reduder的数量?

可以通过代码设置

具体设置多少个,应该根据硬件配置和业务处理的类型来决定









下面是HBASE我非常不懂的地方:

1.hbase怎么预分区?

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

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

4.我们的hbase大概在公司业务中(主要是网上商城)大概4个表,几个表簇,大概都存什么样的数据?







下面的Storm的问题:

1.metaq消息队列 zookeeper集群 storm集群(包括zeromq,jzmq,和storm本身)就可以完成对商城推荐系统功能吗?还有没有其他的中间件?

mahout

2.storm怎么完成对单词的计数?


http://blog.csdn.net/sdksdk0/article/details/51695341
回复

使用道具 举报

nextuser 发表于 2018-1-30 12:29:40
大数据(Spark/Hadoop)面试题经历:
公司A:

1.讲讲你做的过的项目。 项目里有哪些 难点重点注意点呢?

2.讲讲多线程吧, 要是你,你怎么实现一个线程池呢?

3.讲一下Mapreduce或者hdfs的原理和机制。map读取数据分片。

4.shuffle 是什么? 怎么调优?

5.项目用什么语言写? Scala? Scala的特点? 和Java的区别?

6.理论基础怎么样,比如数据结构,里面的快速排序,或者,树? 讲一讲你了解的树的知识?

7.数学怎么样呢?

8.讲一下数据库,SQl ,左外连接, 原理,实现?

9.还了解过数据的什么知识? 数据库引擎?
10.Hadoop的机架怎么配置的?
11.Hbase的设计有什么心得?
12.Hbase的操作是用的什么API还是什么工具?
13.对调度怎么理解.? 用什么工具吗?

14.用kettle 这种工具还是 自己写程序? 你们公司是怎么做的?

15.你们数据中心开发周期是多长?
16.你们hbase里面是存一些什么数据。


二面:三个人。


1.讲讲你做的项目。

2.平时 对多线程 这方面是怎么处理呢? 异步 是怎么思考呢? 遇到的一些锁啊, 是怎么做的呢? 比如两个人同时操作一样东西。怎么做的呢?一些并发操作设计到一些变量怎么做的呢?

3.你们用的最多是 http协议吧? 有没有特殊的头呢? 讲讲 你对tcp/ip的理解?
4.有没有用过Zookeeper呢? Zookeeper的适用场景是什么? HA 状态维护 分布式锁 全局配置文件管理 操作Zookeeper是用的什么?


Spark方面:


5.spark开发分两个方面?哪两个方面呢?

6.比如 一个读取hdfs上的文件,然后count有多少行的操作,你可以说说过程吗。那这个count是在内存中,还是磁盘中计算的呢?磁盘中。
7.spark和Mapreduce快? 为什么快呢? 快在哪里呢? 1.内存迭代。2.RDD设计。 3,算子的设计。
8.spark sql又为什么比hive快呢?
10.RDD的数据结构是怎么样的? Partition数组。 dependence
11.hadoop的生态呢。说说你的认识。 hdfs底层存储 hbase 数据库 hive数据仓库 Zookeeper分布式锁 spark大数据分析


公司B:


1.Spark工作的一个流程。


提交任务。
QQ图片20161019131411.png
用户提交一个任务。 入口是从sc开始的。 sc会去创建一个taskScheduler。根据不同的提交模式, 会根据相应的taskchedulerImpl进行任务调度。
同时会去创建Scheduler和DAGScheduler。DAGScheduler 会根据RDD的宽依赖或者窄依赖,进行阶段的划分。划分好后放入taskset中,交给taskscheduler 。
appclient会到master上注册。首先会去判断数据本地化,尽量选最好的本地化模式去执行。
打散 Executor选择相应的Executor去执行。ExecutorRunner会去创建CoarseGrainerExecutorBackend进程。 通过线程池的方式去执行任务。

反向:
Executor向 SchedulerBackend反向注册

Spark On Yarn模式下。 driver负责计算调度。appmaster 负责资源的申请。
2.Hbase的PUT的一个过程。

3.RDD算子里操作一个外部map比如往里面put数据。然后算子外再遍历map。有什么问题吗。

4.shuffle的过程。调优。

5.5个partition里面分布有12345678910.用算子求最大值或者和。不能用广播变量和累加器。或者sortbykey.

6.大表和小表join.
7.知道spark怎么读hbase吗?spark on hbase.。华为的。
8.做过hbase的二级索引吗?
9.sort shuffle的优点?
10.stage怎么划分的? 宽依赖窄依赖是什么?


公司C:


1.讲讲你做过的项目(一个整体思路)
2.问问大概情况。公司里集群规模。hbase数据量。数据规模。
3.然后挑选数据工厂开始详细问。问hbase.。加闲聊。
4.问二次排序是什么。topn是什么。二次排序要继承什么接口?
5.计算的数据怎么来的。
6.kakfadirect是什么,。为什么要用这个,有什么优点?。和其他的有什么区别。

http://blog.csdn.net/erfucun/article/details/52275369

  /**
   * Create an input stream that directly pulls messages from Kafka Brokers
   * without using any receiver. This stream can guarantee that each message
   * from Kafka is included in transformations exactly once (see points below).
   *
   * Points to note:
   *  - No receivers: This stream does not use any receiver. It directly queries Kafka
   *  - Offsets: This does not use Zookeeper to store offsets. The consumed offsets are tracked
   *    by the stream itself. For interoperability with Kafka monitoring tools that depend on
   *    Zookeeper, you have to update Kafka/Zookeeper yourself from the streaming application.
   *    You can access the offsets used in each batch from the generated RDDs (see
   *    [[org.apache.spark.streaming.kafka.HasOffsetRanges]]).
   *  - Failure Recovery: To recover from driver failures, you have to enable checkpointing
   *    in the [[StreamingContext]]. The information on consumed offset can be
   *    recovered from the checkpoint. See the programming guide for details (constraints, etc.).
   *  - End-to-end semantics: This stream ensures that every records is effectively received and
   *    transformed exactly once, but gives no guarantees on whether the transformed data are
   *    outputted exactly once. For end-to-end exactly-once semantics, you have to either ensure
   *    that the output operation is idempotent, or use transactions to output records atomically.
   *    See the programming guide for more details.
   *
   * @param ssc StreamingContext object
   * @param kafkaParams Kafka <a href="http://kafka.apache.org/documentation.html#configuration">
   *    configuration parameters</a>. Requires "metadata.broker.list" or "bootstrap.servers"
   *    to be set with Kafka broker(s) (NOT zookeeper servers) specified in
   *    host1:port1,host2:port2 form.
   * @param fromOffsets Per-topic/partition Kafka offsets defining the (inclusive)
   *    starting point of the stream
   * @param messageHandler Function for translating each message and metadata into the desired type
   */


7.问了shuffle过程。
8.怎么调优的,jvm怎么调优的?
9.jvm结构?堆里面几个区?
10.数据清洗怎么做的?
11.怎么用spark做数据清洗
12.跟我聊了spark的应用,商场里广告投放,以及黄牛检测
13.spark读取 数据,是几个Partition呢? hdfs几个block 就有几个 Partition?
14.spark on yarn的两种模式? client 模式? 和cluster模式?
15.jdbc?mysql的驱动包名字叫什么?
16.region多大会分区?



公司D


1.说说Mapreduce?一整个过程的理解。讲一下。
2.hbase存数据用什么rowkey?加时间戳的话,会不会出现时间戳重复的问题,怎么做的呢?
3.Spring的两大模块? AOP,IOC在你们项目中分别是怎么用的呢?
4.你们集群的规模, 数据量?



公司E
1.画图,画Spark的工作模式,部署分布架构图
2.画图,画图讲解spark工作流程。以及在集群上和各个角色的对应关系。

3.java自带有哪几种线程池。
4.数据是怎么收集的。 kafka收集数据的原理?
5.画图,讲讲shuffle的过程。那你怎么在编程的时候注意避免这些性能问题。
6.讲讲列式存储的 parquet文件底层格式。
7.dataset和dataframe?
8.通过什么方式学习spark的?
9.有哪些数据倾斜,怎么解决?
10.宽依赖窄依赖?
11.yarn的原理?
12.BlockManager怎么管理硬盘和内存的。
13.哪些算子操作涉及到shuffle
14.看过源码? 你熟悉哪几个部分的源码?
15.集群上 nodemanager和ResourceManager的数量关系?
16.spark怎么整合hive? 大概这样。 spark on hive 。 hive还是hive 执行引擎是spark。



其他人的:
1.Spark如何处理结构化数据,Spark如何处理非结构话数据?
2.Spark性能优化主要有哪些手段?
3.简要描述Spark分布式集群搭建的步骤
4.对于Spark你觉得他对于现有大数据的现状的优势和劣势在哪里?
5.对于算法是否进行过自主的研究设计?
6.简要描述你了解的一些数据挖掘算法与内容 基本我有印象的就这几个问题,聊了2个多小时,脑子都差点被问干了



http://blog.csdn.net/lxhandlbb/article/details/54599512

回复

使用道具 举报

是饭饭 发表于 2018-3-29 10:02:45
好资源,支持!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条