大数据面试题(一)

article/2025/8/26 9:38:19

一、.hdfs写文件的步骤

答案:

(1)client向NameNode申请上传…/xxx.txt文件

(2)NN向client响应可以上传文件

(3)Client向NameNode申请DataNode

(4)NN向Client返回DN1,DN2,DN3

(5)Client向DN1,DN2,DN3申请建立文件传输通道

(6)DN3,DN2,DN1依次响应连接

(7)Client向DN1上传一个block,DN1向DN2,DN3冗余文件

二、hdfs读取文件步骤

答案:

(1)client向NN请求下载…/xxx.txt文件

(2)NN向client返回文件的元数据

(3)Client向DN1请求访问读数据blk_1

(4)DN1向Client传输数据

(5)Client向DN2请求访问读数据blk_2

(6)DN2向Client传输数据

三、hadoop的shuffle过程

1.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过程就结束了。

2.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上。

 

四、fsimage和edit的区别?

当NN,SN要进行数据同步时叫做checkpoint时就用到了fsimage与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小事会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。

 

五、简单说一下hadoop的map-reduce模型

首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合,使用的是hadoop内置的数据类型,如Text,Longwritable等。

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

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

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

之后进行一个combiner归约操作,就是一个本地的reduce预处理,以减小shuffle,reducer的工作量。

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

六、运行hadoop集群需要哪些守护进程?

DataNode,NameNode,TaskTracker和JobTracker都是运行Hadoop集群需要的守护进程。

 

七、hadoop的TextInputFormat作用是什么,如何自定义实现?

InputFormat会在map操作之前对数据进行两方面的预处理。

1.是getSplits,返回的是InputSplit数组,对数据进行Split分片,每片交给map操作一次。

2.是getRecordReader,返回的是RecordReader对象,对每个Split分片进行转换为key-value键值对格式传递给map常用的InputFormat是TextInputFormat,使用的是LineRecordReader对每个分片进行键值对的转换,以行偏移量作为键,行内容作为值。

自定义类继承InputFormat接口,重写createRecordReaderisSplitable方法在createRecordReader中可以自定义分隔符。

 

八、hadoop和spark都是并行计算,那么他们有什么相同和区别?

两者都使用mr模型来进行并行计算,hadoop的一个作业称为job,job里面分为map task和reduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束。

Spark用户提交的任务称为application,一个application对应一个SparkContext,app中存在多个job,没触发一个action操作就会产生一个job。

这些job可以并行或者串行执行,每个job有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和application一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算的。

Hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系。

Spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作join,groupby等,而且通过DAG图可以实现良好的容错。

 

九、为什么要用flume导入hdfs,hdfs的架构是怎样的?

Flume可以实时的导入数据到hdfs中,当hdfs上的文件达到一个指定大小的时候会形成一个文件,或者超时所指定时间的话也形成一个文件。

文件都是存储在datanode上的,namenode存储着datanode的元数据信息,而namenode的元数据信息是存在内存中的,所以当文件切片很小或者很多的时候会卡死。

 

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

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

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

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

 

十一、简单说一下hadoop和spark的shuffle过程

Hadoop:map端保存分片数据,通过网络收集到reduce端。

Spark:spark的shuffle实在DAGSchedular划分Stage的时候产生的,TaskSchedular要分发Stage到各个worker的executor。减少shuffle可以提高性能。

十二、hive中存放的是什么?

表。

存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操作的都是hdfs上的文件,HQL就是用SQL语法来写的MR程序。

 

十三、Hive与关系型数据库的关系?

没有关系,hive是数据仓库,不能和数据库一样进行实时的CRUD操作。

是一次写入多次读取的操作,可以看成是ETL的工具。

 

十四、Flume的工作及时是什么?

核心概念是agent,里面包括source,channel和sink三个组件。

Source运行在日志收集节点进行日志采集,之后临时存储在channel中,sink负责将channel中的数据发送到目的地。

只有发送成功channel中的数据才会被删除。

首先书写flume配置文件,定义agent、source、channel和sink然后将其组装,执行flume-ng命令。

 

十五、Hbase行键列族的概念,物理模型,表的设计原则?

行键:是hbase表自带的,每个行键对应一条数据。

列族:是创建表时指定的,为列的集合,每个列族作为一个文件单独存储,存储的数据都是字节数组,其中数据可以有很多,通过时间戳来区分。

物理模型:整个hbase表会拆分成多个region,每个region记录着行键的起始点保存在不同的节点上,查询时就是对各个节点的并行查询,当region很大时使用.META表存储各个region的起始点,-ROOT又可以存储.META的起始点。

Rowkey的设计原则:各个列族数据平衡,长度原则、相邻原则,创建表的时候设置表放入regionserver缓存中,避免自动增长和时间,使用字节数组代替string,最大长度64kb,最好16字节以内,按天分表,两个字节散列,四个字节存储时分毫秒。

列族的设计原则:尽可能少(按照列族进行存储,按照region进行读取,不必要的io操作),经常和不经常使用的两类数据放入不同列族中,列族名字尽可能短。

 

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

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

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

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

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

Tasktracker: 执行JobTracker分配的任务。

ResourcemanagerNodemanagerJournalnodeZookeeperZkfc

 

十七、请说明hive中Sort By、Order By、Cluster By,Distribute By各代表什么意思?

order by:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。

sort by:不是全局排序,其在数据进入reducer前完成排序。

distribute by:按照指定的字段对数据进行划分输出到不同的reduce中。

cluster by:除了具有 distribute by 的功能外还兼具 sort by 的功能。

 

十八、HBase简单读写流程?

读:

找到要读数据的region所在的RegionServer,然后按照以下顺序进行读取:先去BlockCache读取,若BlockCache没有,则到Memstore读取,若Memstore中没有,则到HFile中去读。

写:

找到要写数据的region所在的RegionServer,然后先将数据写到WAL(Write-Ahead Logging,预写日志系统)中,然后再将数据写到Memstore等待刷新,回复客户端写入完成。

 

十九、HBase的特点是什么?

(1)hbase是一个分布式的基于列式存储的数据库,基于hadoop的HDFS存储,zookeeper进行管理。

(2)hbase适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。

(3)hbase为null的记录不会被存储。

(4)基于的表包括rowkey,时间戳和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本。

(5)hbase是主从结构。Hmaster作为主节点,hregionserver作为从节点。

 

二十、请描述如何解决Hbase中region太小和region太大带来的结果。

Region过大会发生多次compaction,将数据读一遍并写一遍到hdfs上,占用io,region过小会造成多次split,region会下线,影响访问服务,调整hbase.heregion.max.filesize为256m。


http://chatgpt.dhexx.cn/article/CJdCDlEd.shtml

相关文章

15道经典大数据面试题

自我介绍 项目介绍 数仓为什么要分层? 数据仓库都分哪几层? 简单介绍一下 Mapreduce 工作原理? Hdfs 的读数据流程了解吗? Hdfs 的写操作呢? zookeeper的选举过程 Spark 为什么比 MapReduce 快? Spark 任务执…

大数据相关面试题

linux 常见linux高级命令? top、iotopnetstatdf -hjmap -heaptarrpmps -ef shell 用过的shell工具? awk Awk 命令详解 - 简书 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用…

2023大数据必看面试题

1、请讲述HDFS输入文件的具体步骤? 1、Client向NameNode 提交需要上传文件的申请 2、NameNode返回响应给Client,同意上传文件的请求 3、Client向NameNode 申请子节点DataNode. 4、NameNode 响应给Client它的子节点DataNode 5、Client 向DataNode提交申请建立传…

大数据面试题汇总【持续更新】

前言 本文内容是根据自身对相应知识的浅薄理解,如有错误欢迎指正~ 大数据生态圈 Hadoop架构 HDFS(分布式文件系统) : 解决海量数据的存储问题 NameNode:集群当中的主节点,管理元数据,主要用于管理集群当中…

大数据面试题大全

卡夫卡的消息包括哪些信息 一个卡夫卡的消息由一个固定长度的报头和一个变长的消息体体组成 标题部分由一个字节的魔法(文件格式)和四个字节的CRC32(用于判断身体消息体是否正常)构成。当魔术的值为1的时候,会在魔术…

大数据面试题整理1

Java语言特性 1. static关键字 最主要作用:方便在没有创建对象的情况下来进行调用(方法/变量)。被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。权限&#…

大数据面试题

Hadoop hdfs中小文件的处理 (1)采用har归档方式,将小文件归档 (2)采用Combine TextInputFormat 请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么? namenode &g…

大数据常见面试题总结,有问必答

这些都是一些笔者不太熟悉的面试题,有问题欢迎评论区留言!看到就会回复,并把题目整理到文章里! 文章目录 1、MapReduce如何选择垃圾回收器?2、如何配置hdfs集群?3、如何搭建yarn集群?4、hdfs存储…

2020大数据面试题真题总结(附答案)

https://my.oschina.net/u/4631230/blog/4533362 版本更新时间更新内容v1.02020-07-01新建v1.12020-06-13朋友面试大数据工程师提供的关于架构及数仓方面的题目v1.22020-08-08朋友面试数据专家提供的数据驱动,spark及flink方面面试题v1.32020-08-22朋友面试数据开发…

面试系列一:精选大数据面试真题10道(混合型)-附答案详细解析

本公众号(五分钟学大数据)将推出大数据面试系列文章—五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类…

50个最受欢迎的大数据面试问题

50个最受欢迎的大数据面试问题 大数据时代才刚刚开始。随着越来越多的公司倾向于大数据来运营他们的业务,对人才的需求空前高涨。这对您意味着什么?如果您想在任何大数据岗位上工作,它只会转化为更好的机会。您可以选择成为数据分析师&#…

「面试必背」大数据面试题100道(收藏)

前言 随着 5G 时代的到来,大数据人工智能产业链又一次迎来了井喷式的爆发,随着岗位需求的不断增加,越来越多的人选择大数据课程,但是没有真正从事大数据工作的人面对企业面试有种无从下手的感觉,面对面试说不到技术的…

《大数据面试题》面试大数据这一篇就够了

文章目录 Hadoop 常见面试题1. mr 工作原理 ☆☆☆☆2. split 机制 ☆☆☆☆☆3. namenode,datanode,secondaryNameNode分别是干什么的?☆☆☆☆☆4. mr on yarn 工作原理 ☆☆☆☆☆5. fsimage 和 edits 是干什么的?为什么要使用?☆☆☆☆6.…

android codecs app,MiX Codecs

MiX Codecs app是一款mix插件包,MiX Codecs app整个在线的操作非常的简单,是没有任何的广告和收费问题的,MiX Codecs app适合的类型比较多。 软件介绍 MiX Codecs app是一个平滑的、功能齐全的文件管理应用程序MiXplorer文件管理器的插件工具…

python codecs_python中转换模块codecs的讲解(附示例)

本篇文章给大家带来的内容是关于python中转换模块codecs的讲解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 0、编码 编码转换时,通常需要以unicode作为中间编码,…

python codecs_python模块之codecs

python 模块codecs python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。 有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码,转换…

第六章:文件系统-codecs:字符串编码和解码-Unicode入门

6.10 codecs:字符串编码和解码 codecs模块提供了流接口和文件接口来完成文本数据不同表示之间的转换。通常用于处理Unicode文本,不过也提供了其他编码来满足其他用途。 6.10.1 Unicode入门 CPython 3.x区分了文本(text)和字节(byte)串。byte…

Java中的方法重载

1.方法重载概述 方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载: 多个方法在同一个类中多个方法具有相同的方法名多个方法的参数不相同,类型不同或者数量不同 2.方法重载特点 重载仅对应方法的定义&a…

java方法命名规范(持续更新)

前言:命名的目的是见名知意。业界目前没有强制的命名规范,但是用过了JPA之类的人,自己新建DAO层的方法的时候,也有一个参考,所以,用hibernate那一套,其实挺好的,维护起来也是很方便。…

java的静态方法

Java中方法分为静态方法和普通方法 所谓静态方法,就是方法前面加上static关键字,调用静态方法时一般用类名.方法名,当然也可以用对象名.方法名; 一般Java中工具类里面的工具方法都用static修饰,作为静态方法&#xff1…