1000道 大数据面试题及答案(2023最新版)

您所在的位置:网站首页 数据仓库考试及答案 1000道 大数据面试题及答案(2023最新版)

1000道 大数据面试题及答案(2023最新版)

2023-04-18 22:08| 来源: 网络整理| 查看: 265

大数据面试题及答案【最新版】大数据高级面试题大全(2021版),发现网上很多大数据面试题都没有答案,所以花了很长时间搜集,本套大数据面试题大全

最近由于要准备面试就开始提早看些面试、笔试题。以下是自己总结的一些经常出现、有价值的试题,包含hadoop、hive、hbase、storm、spark等。答案仅供参考,如有错误,请指出。试题不定时更新。

如果不背 大数据面试题的答案,肯定面试会挂!

这套 大数据面试题大全,希望对大家有帮助哈~博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的1、datanode在什么情况下不会备份

强制关闭或非正常断电时

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

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

默认调度器FIFO

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

计算能力调度器CapacityScheduler

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

公平调度器FairScheduler

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

3、Hadoop安装在什么目录下?

Cloudera和Apache使用相同的目录结构,Hadoop被安装在cdusrlibhadoop-0.20。

4、当你输入hadoopfsck 造成“connection refused java exception’”时,系统究竟发生了什么?

这意味着Namenode没有运行在你的VM之上。

5、spark调优

1、 避免创建重复RDD

2、 尽可能复用同一个RDD

3、 对多次使用的RDD进行持久化

4、 避免使用shuffle算子

5、 使用map-side预聚合shuffle操作

6、 使用高性能的算子

7、 广播大变量

8、 使用Kryo序列化

9、 优化数据结构

6、RAM的溢出因子是?

溢出因子(Spill factor)是临时文件中储存文件的大小,也就是Hadoop-temp目录。

7、hive sql知识点

DML 数据操纵语言

DDL 数据定义语言,用语定义和管理数据库中的对象

8、为什么hive的分区

为了避免select扫描全表,hive提出了分区表partitionedby的概念,给文件归类打上表示

静态分区:

单分区建表

create table par_tab(name string,nation string) partitioned by (sex string) row format delimited fields terminated by ‘,’;

加载:load data local inpath ‘/hdfs/…’ into table par_tab partition(sex=‘man’)

在创建分区表的时候,系统会在hive数据仓库默认路径/user/hive/warehouse/创建目录,在创建sex=man的目录,最后在分区名下存放实际的数据文件

多分区建表

create table par_tab(name string,nation string) partitioned by (sex string,dt string) row format delimited fields terminated by ',';

load data local inpath '/hdfs/...' into table par_tab partition(sex='man',dt="2019-08-08")

当我们查询所有的man时候,man一下的所有日期下的数据都会被查出来;如果只查询日期分区,那么hive会对路径进行修剪,从而只扫描日期分区,性别分区不做过滤

动态分区

动态分区与静态分区区别就是不指定分区目录,有系统自己选择

开启动态分区 set hive.exec.dynamic.partition=true

9、当前日志采样格式为

a , b , c , d

b , b , f , e

a , a , c , f

10、Namenode、Job tracker和task tracker的端口号是?

Namenode,70;Job tracker,30;Task tracker,60。

1、请用java实现非递归二分查询

public class BinarySearchClass { public static int binary_search(int[] array, int value) { int beginIndex = 0;// 低位下标 int endIndex = array.length - 1;// 高位下标 int midIndex = -1; while (beginIndex NODE_LOCAL>ANY,尽量使数据以PROCESS_LOCAL或NODE_LOCAL方式读取。其中PROCESS_LOCAL还和cache有关,如果RDD经常用的话将该RDD cache到内存中,注意,由于cache是lazy的,所以必须通过一个action的触发,才能真正的将该RDD cache到内存中。

1、过滤器有什么用途:

增强hbase查询数据的功能

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

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

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

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

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

2、RDD缓存

rdd.cache

rdd.persist

3、什么是spark

基于内存计算发数据分析引擎,提高在大数据环境下数处理的实时性,spark仅涉及数据计算

4、假如Namenode中没有数据会怎么样?

没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据。

5、假如一个分区的数据逐步错误怎么通过hivesql删除

alter table ptable drop partition(daytime=‘20140921’,city=‘bj’);全部删除,文件夹还在

6、storm怎么保障消息不丢失

nimbus 告诉 Zookeeper 调度接收数据 ,spout接收数据 ack响应,其他节点进程 在spout消费拉去数据,每个tuple发送个bolt进行处理,如果成功处理则发送ack消息给zookeeper,发送消息 tuple消费失败则标记为fail,Zookeeper根据偏移量从新发送数据直到消费为止

Kafka

7、解释下hbase实时查询原理

实时查询,可疑人物是从内存中查询,一般响应为1秒内。

Hbase机制是数据先写入到内存中,当数据达到一定量,再写入磁盘中,在内存中不进行数据的更新和合并操作,值增加数据,使得用户的写操作值进入内存中可以立即返回,保证了Hasee的高性能

8、RDD 是什么

弹性分布式数据集,是spark中最基本的数据抽象,可以存于内存中或者磁盘中,分布式存储可用于分布式计算

一个不可变,可分区,里面的数据可并行计算的集合

9、描述Hbase的rowkey的设计原则

1、 rowkey长度原则:设计为定长,如果rowkey过长,内存使用率降低,会降低检索效率

2、 rowkey散列原则:将rowkey的高位作为散列字段,有程序随机生成,这样将提高数据均衡分布在每个RegionServer上,以实现负载均衡。

如果没有散列字段,所有数据就会集中在一个RegionServer上,数据检索时负载会集中在个别RegionServer上,造成热点问题,降低效率

3、 rowkey唯一原则:必须在设计上保证唯一性,rowkey是按照字段顺序排序存储的,设计rowkey时,充分利用排序这个特点,将经常读取的数据存在一块,可能被访问的数据放在一起

10、Sqoop工作原理是什么?

hadoop生态圈上的数据传输工具。

可以将关系型数据库的数据导入非结构化的hdfs、hive或者bbase中,也可以将hdfs中的数据导出到关系型数据库或者文本文件中。

使用的是mr程序来执行任务,使用jdbc和关系型数据库进行交互。

import原理:通过指定的分隔符进行数据切分,将分片传入各个map中,在map任务中在每行数据进行写入处理没有reduce。

export原理:根据要操作的表名生成一个java类,并读取其元数据信息和分隔符对非结构化的数据进行匹配,多个map作业同时执行写入关系型数据库

11、谈谈Zookeeper理解

Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题( 解决单点故障问题 )。

Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化,通过监控这些数据状态的变化,从而可以达到基于数据的集群管理

总结: Zookeeper=文件系统+通知机制

spark

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

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

/ect/sudoers

/etc/hosts

/etc/sysconfig/network

/etc/inittab

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

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

14、offset是每天消息的偏移量

每个日志文件都有一个offset来唯一标记一条信息,由8个自己数字表示,表示此消息在分区中所处的起始位置

每个分区再物理存储层面,由多个logfile组成(segment)

最小的offset表示segment中起始消息的offset

15、hbase中表的特点

大:上亿行,上百万列

无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列

面向列的存储和权限控制,列族独立索引

对于为null的列,并不占用存储空间,因此表可以设置的非常稀疏

数据多版本:可以有多个版本,系统自动分配,时间戳为版本号

数据类型单一:只有字节数组 byte[]

129.hbase 表逻辑结构

表有 行 和 列组成,列划分为若干个列族cloumn

表明 test

rowkey 列族1:base_info 列族2:xxx_info

0001 name:zhangsan age:20 address:bj

0002 name:lishi age:50 sex:male address:shanghai hoppies:sing

rowkey:hbase的行索引,按照rowkey字典顺序排序

cell可以锁定一个值:Rowkey+列族+列族下的列的名字+值+时间戳

16、请写出以下的shell命令

1、 杀死一个job

2、 删除hdfs上的 /tmp/aaa目录

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

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

5、 hadoopfs -rmr /tmp/aaa

6、 增加一个新的节点在新的几点上执行

Hadoop daemon.sh start datanode

Hadooop daemon.sh start tasktracker/nodemanager

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

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

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

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

17、简答说一下hadoop的map-reduce编程模型

首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合

使用的是hadoop内置的数据类型,比如longwritable、text等

将键值对集合输入mapper进行业务处理过程,将其转换成需要的key-value在输出

之后会进行一个partition分区操作,默认使用的是hashpartitioner,可以通过重写hashpartitioner的getpartition方法来自定义分区规则

之后会对key进行进行sort排序,grouping分组操作将相同key的value合并分组输出,在这里可以使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则

之后进行一个combiner归约操作,其实就是一个本地段的reduce预处理,以减小后面shufle和reducer的工作量

reduce task会通过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job

18、MR程序运行的时候会有什么比较常见的问题?

比如说作业中大部分都完成了,但是总有几个reduce一直在运行。

这是因为这几个reduce中的处理的数据要远远大于其他的reduce,可能是对键值对任务划分的不均匀造成的数据倾斜。

解决的方法可以在分区的时候重新定义分区规则对于value数据很多的key可以进行拆分、均匀打散等处理,或者是在map端的combiner中进行数据预处理的操作。

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

当然能了。

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

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

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

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

21、Hadoop的shuffle过程

Map端的shuffle

Map端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,而不是HDFS。每个Map的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做spill。

在spill写入之前,会先进行二次排序,首先根据数据所属的partition进行排序,然后每个partition中的数据再按key来排序。partition的目是将记录划分到不同的Reducer上去,以期望能够达到负载均衡,以后的Reducer就会根据partition来读取自己对应的数据。接着运行combiner(如果设置了的话),combiner的本质也是一个Reducer,其目的是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后将数据写到本地磁盘产生spill文件(spill文件保存在{mapred.local.dir}指定的目录中,Map任务结束后就会被删除)。

最后,每个Map任务可能产生多个spill文件,在每个Map任务完成前,会通过多路归并算法将这些spill文件归并成一个文件。至此,Map的shuffle过程就结束了。

Reduce端的shuffle

Reduce端的shuffle主要包括三个阶段,copy、sort(merge)和reduce。

首先要将Map端产生的输出文件拷贝到Reduce端,但每个Reducer如何知道自己应该处理哪些数据呢?

因为Map端进行partition的时候,实际上就相当于指定了每个Reducer要处理的数据(partition就对应了Reducer),所以Reducer在拷贝数据的时候只需拷贝与自己对应的partition中的数据即可。

每个Reducer会处理一个或者多个partition,但需要先将自己对应的partition中的数据从每个Map的输出结果中拷贝过来。

接下来就是sort阶段,也成为merge阶段,因为这个阶段的主要工作是执行了归并排序。

从Map端拷贝到Reduce端的数据都是有序的,所以很适合归并排序。

最终在Reduce端生成一个较大的文件作为Reduce的输入。

最后就是Reduce过程了,在这个过程中产生了最终的输出结果,并将其写到HDFS上。

22、什么是Kafka?

开源消息系统,由scala写成

Kafka是一个分布式消息队列:生产者、消费者的功能,他提供类似于JMS的特性,但是设计上完全不同,此外它并不是JMS规范的实现

Kafka对消息保存 根据Topic进行归类,Producer生产者为发送消息 ,接收消息为Consumer 消费者,Kafka集群有多个Kafka实例组成,每个实例为broker

Kafka所有组件都依赖于Zookeeper集群保存一些元数据信息,来保证系统可用性

23、Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?

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

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

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

列族的创建:

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

大数据面试题更多70道

01、什么是DAG

02、为什么会产生RDD

03、如果在SSH中添加key,是否还需要设置密码?

04、Hadoop是否遵循UNIX模式?

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

06、请简述mapreduce中的combine和partition的作用

07、Hadoop的shuffle过程

08、什么是Kafka?

09、Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?

10、hadoop-metrics.properties文件的作用是?

11、如何知道消费者消费到哪一条消息了?

12、hbase和hive的区别

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

14、hadoop-env.sh是用于做什么的?

15、是否可以自行搭建Hadoop集群?

16、介绍一下hbase

17、如何访问hbase中的行

18、hbase如何调优

19、hive内部表和外部表的区别

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

21、谈谈Zookeeper理解

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

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

24、offset是每天消息的偏移量

25、hbase中表的特点

26、请写出以下的shell命令

27、简答说一下hadoop的map-reduce编程模型

28、MR程序运行的时候会有什么比较常见的问题?

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

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

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

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

33、hbase过滤器实现原则

34、查看所有的topic

35、insert into 和override write区别

36、Kafka的消息发送

37、Hive与关系型数据库的关系?

38、hive的内表和外表

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

40、那些RDD 需要cache

41、过滤器有什么用途:

42、RDD缓存

43、什么是spark

44、假如Namenode中没有数据会怎么样?

45、假如一个分区的数据逐步错误怎么通过hivesql删除

46、storm怎么保障消息不丢失

47、解释下hbase实时查询原理

48、RDD 是什么

49、描述Hbase的rowkey的设计原则

50、Sqoop工作原理是什么?

51、datanode在什么情况下不会备份

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

53、Hadoop安装在什么目录下?

54、当你输入hadoopfsck 造成“connection refused java exception’”时,系统究竟发生了什么?

55、spark调优

56、RAM的溢出因子是?

57、hive sql知识点

58、为什么hive的分区

59、当前日志采样格式为

60、Namenode、Job tracker和task tracker的端口号是?

61、请用java实现非递归二分查询

62、是客户端还是Namenode决定输入的分片?

63、mapred.job.tracker命令的作用?

64、全分布模式又有什么注意点?

65、hive 跟hbase的区别

66、请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么?

67、KafkaUtils.createDstream 和 KafkaUtils.createDirectstream 区别

68、Kafka与传统消息队列的区别

69、Master文件是否提供了多个入口?

70、Spark的数据本地性有哪几种?

如果不背 大数据面试题的答案,肯定面试会挂!

这套 大数据面试题大全,希望对大家有帮助哈~博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3