




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大数据技术面试大纲范文第一篇大数据技术面试大纲范文第一篇Hive支持索引(版本之前),但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。并且Hive索引提供的功能很有限,效率也并不高,因此Hive索引很少使用。
适用于不更新的静态字段。以免总是重建索引数据。每次建立、更新数据后,都要重建索引以构建索引表。
hive在指定列上建立索引,会产生一张索引表(Hive的一张物理表),里面的字段包括:索引列的值、该值对应的HDFS文件路径、该值在文件中的偏移量。
Hive版本后引入bitmap索引处理器,这个处理器适用于去重后,值较少的列(例如,某字段的取值只可能是几个枚举值)因为索引是用空间换时间,索引列的取值过多会导致建立bitmap索引表过大。
注意:Hive中每次有数据时需要及时更新索引,相当于重建一个新表,否则会影响数据查询的效率和准确性,Hive官方文档已经明确表示Hive的索引不推荐被使用,在新版本的Hive中已经被废弃了。
扩展:Hive是在版本之后支持索引的,在版本后引入bitmap索引处理器,在版本开始移除索引的功能,取而代之的是版本开始的物化视图,自动重写的物化视图替代了索引的功能。
大数据技术面试大纲范文第二篇Sparkstreaming是sparkcoreAPI的一种扩展,可以用于进行大规模、高吞吐量、容错的实时数据流的处理。
它支持从多种数据源读取数据,比如Kafka、Flume、Twitter和TCPSocket,并且能够使用算子比如map、reduce、join和window等来处理数据,处理后的数据可以保存到文件系统、数据库等存储中。
Sparkstreaming内部的基本工作原理是:接受实时输入数据流,然后将数据拆分成batch,比如每收集一秒的数据封装成一个batch,然后将每个batch交给spark的计算引擎进行处理,最后会生产处一个结果数据流,其中的数据也是一个一个的batch组成的。
大数据技术面试大纲范文第三篇数据商业分析的目标是利用大数据为所有职场人员做出迅捷,高质,高效的决策提供可规模化的解决方案。商业分析是创造价值的数据科学。
数据商业分析中会存在很多判断:
比如想知道线上渠道A、B各自带来了多少流量,新上线的产品有多少用户喜欢,新注册流中注册的人数有多少。这些都需要通过数据来展示结果。
我们需要知道渠道A为什么比渠道B好,这些是要通过数据去发现的。也许某个关键字带来的流量转化率比其他都要低,这时可以通过信息、知识、数据沉淀出发生的原因是什么。
在对渠道A、B有了判断之后,根据以往的知识预测未来会发生什么。在投放渠道C、D的时候,猜测渠道C比渠道D好,当上线新的注册流、新的优化,可以知道哪一个节点比较容易出问题,这些都是通过数据进行预测的过程。
所有工作中最有意义的还是商业决策,通过数据来判断应该做什么。这是商业分析最终的目的。
大数据面试中考察的算法相对容易一些,常考的有排序算法,查找算法,二叉树等,下面讲解一些最容易考的算法。
大数据技术面试大纲范文第四篇相同点:都是将mapper(Spark里是ShuffleMapTask)的输出进行partition,不同的partition送到不同的reducer(Spark里reducer可能是下一个stage里的ShuffleMapTask,也可能是ResultTask)
不同点:
MapReduce默认是排序的,spark默认不排序,除非使用sortByKey算子。
MapReduce可以划分成split,map()、spill、merge、shuffle、sort、reduce()等阶段,spark没有明显的阶段划分,只有不同的stage和算子操作。
MR落盘,Spark不落盘,spark可以解决mr落盘导致效率低下的问题。
大数据技术面试大纲范文第五篇
Spark运行流程
具体运行流程如下:
SparkContext向资源管理器注册并向资源管理器申请运行Executor
资源管理器分配Executor,然后资源管理器启动Executor
Executor发送心跳至资源管理器
SparkContext构建DAG有向无环图
将DAG分解成Stage(TaskSet)
把Stage发送给TaskScheduler
Executor向SparkContext申请Task
TaskScheduler将Task发送给Executor运行
同时SparkContext将应用程序代码发放给Executor
Task在Executor上运行,运行完毕释放所有资源
大数据技术面试大纲范文第六篇receiver方式的容错性:在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制,让数据零丢失,就必须启用SparkStreaming的预写日志机制(WriteAheadLog,WAL)。该机制会同步地将接收到的Kafka数据写入分布式文件系统(比如HDFS)上的预写日志中。所以,即使底层节点出现了失败,也可以使用预写日志中的数据进行恢复。
Kafka中的topic的partition,与Spark中的RDD的partition是没有关系的。在1、()中,提高partition的数量,只会增加Receiver方式中读取partition的线程的数量。不会增加Spark处理数据的并行度。可以创建多个Kafka输入DStream,使用不同的consumergroup和topic,来通过多个receiver并行接收数据。
优点:简化并行读取:如果要读取多个partition,不需要创建多个输入DStream然后对它们进行union操作。Spark会创建跟Kafkapartition一样多的RDDpartition,并且会并行从Kafka中读取数据。所以在Kafkapartition和RDDpartition之间,有一个一对一的映射关系。
高性能:如果要保证零数据丢失,在基于receiver的方式中,需要开启WAL机制。这种方式其实效率低下,因为数据实际上被复制了两份,Kafka自己本身就有高可靠的机制,会对数据复制一份,而这里又会复制一份到WAL中。而基于direct的方式,不依赖Receiver,不需要开启WAL机制,只要Kafka中作了数据的复制,那么就可以通过Kafka的副本进行恢复。
基于receiver的方式,是使用Kafka的高阶API来在ZooKeeper中保存消费过的offset的。这是消费Kafka数据的传统方式。这种方式配合着WAL机制可以保证数据零丢失的高可靠性,但是却无法保证数据被处理一次且仅一次,可能会处理两次。因为Spark和ZooKeeper之间可能是不同步的。
基于direct的方式,使用Kafka的低阶API,SparkStreaming自己就负责追踪消费的offset,并保存在checkpoint中。Spark自己一定是同步的,因此可以保证数据是消费一次且仅消费一次。
Receiver方式是通过zookeeper来连接kafka队列,Direct方式是直接连接到kafka的节点上获取数据。
大数据技术面试大纲范文第七篇ORC和Parquet都是高性能的存储方式,这两种存储格式总会带来存储和性能上的提升。
Parquet:
Parquet支持嵌套的数据模型,类似于ProtocolBuffers,每一个数据模型的schema包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名。重复次数可以是以下三种:required(只出现1次),repeated(出现0次或多次),optional(出现0次或1次)。每一个字段的数据类型可以分成两种:group(复杂类型)和primitive(基本类型)。
Parquet中没有Map、Array这样的复杂数据结构,但是可以通过repeated和group组合来实现的。
由于Parquet支持的数据模型比较松散,可能一条记录中存在比较深的嵌套关系,如果为每一条记录都维护一个类似的树状结可能会占用较大的存储空间,因此Dremel论文中提出了一种高效的对于嵌套数据格式的压缩算法:Striping/Assembly算法。通过Striping/Assembly算法,parquet可以使用较少的存储空间表示复杂的嵌套格式,并且通常Repetitionlevel和Definitionlevel都是较小的整数值,可以通过RLE算法对其进行压缩,进一步降低存储空间。
Parquet文件是以二进制方式存储的,是不可以直接读取和修改的,Parquet文件是自解析的,文件中包括该文件的数据和元数据。
ORC:
ORC文件是自描述的,它的元数据使用ProtocolBuffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗。
和Parquet类似,ORC文件也是以二进制方式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的。
ORC会尽可能合并多个离散的区间尽可能的减少I/O次数。
ORC中使用了更加精确的索引信息,使得在读取数据时可以指定从任意一行开始读取,更细粒度的统计信息使得读取ORC文件跳过整个rowgroup,ORC默认会对任何一块数据和索引信息使用ZLIB压缩,因此ORC文件占用的存储空间也更小。
在新版本的ORC中也加入了对BloomFilter的支持,它可以进一步提升谓词下推的效率,在Hive版本以后也加入了对此的支持。
大数据技术面试大纲范文第八篇在Oracle中,什么是OCR、OLR和VF?♣答案部分Oracle集群使用两种类型的文件来管理集群资源和节点:OCR(OracleClusterRegistry,Oracle集群注册表)和VF(VotingFile,表决磁盘文件)。这两种文件必须存放在共享存储上。其中,OCR相当于集群的控制文件,用于解决健忘问题,VF用于解决脑裂问题。在中引入一个新的文件,称作OLR(OracleLocalRegistry,Oracle本地注册表),它只允许存放在本地。Oracle集群软件(Clusterware)把整个集群的配置信息放在共享存储上,这个存储就是OCR磁盘(OCRDisk)。OCR是OracleRAC配置信息仓库,它管理集群节点的相关信息及实例到节点的映射信息。因此,OCR的内容非常的重要,对OCR的操作必须确保OCR内容完整性。在整个集群运行过程中,并不是所有节点都能操作OCR磁盘,而只有一个节点能对OCR磁盘进行读写操作,这个节点叫作MasterNode。在每个节点的内存中都有一份OCR内容的拷贝,这份拷贝叫作OCRCache。同时,每个节点都有一个OCRP
大数据技术面试大纲范文第九篇shuffle阶段分为四个步骤:依次为:分区,排序,规约,分组,其中前三个步骤在map阶段完成,最后一个步骤在reduce阶段完成。
shuffle是Mapreduce的核心,它分布在Mapreduce的map阶段和reduce阶段。一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。
Collect阶段:将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partition分区信息等。
Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
MapTask阶段的Merge:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
Copy阶段:ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到一定的阀值的时候,就会将数据写到磁盘之上。
ReduceTask阶段的Merge:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。
Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序,ReduceTask只需保证Copy的数据的最终整体有效性即可。
Shuffle中的缓冲区大小会影响到mapreduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。缓冲区的大小可以通过参数调整,参数:默认100M
大数据技术面试大纲范文第十篇Flink运行时由两种类型的进程组成:一个JobManager和一个或者多个TaskManager。
Client不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行Java/Scala程序的一部分运行,也可以在命令行进程./bin/flinkrun...中运行。
可以通过多种方式启动JobManager和TaskManager:直接在机器上作为standalone集群启动、在容器中启动、或者通过YARN等资源框架管理并启动。TaskManager连接到JobManagers,宣布自己可用,并被分配工作。
JobManager:
JobManager具有许多与协调Flink应用程序的分布式执行有关的职责:它决定何时调度下一个task(或一组task)、对完成的task或执行失败做出反应、协调checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:
ResourceManager负责Flink集群中的资源提供、回收、分配,管理taskslots。
Dispatcher提供了一个REST接口,用来提交Flink应用程序执行,并为每个提交的作业启动一个新的JobMaster。它还运行FlinkWebUI用来提供作业执行信息。
JobMaster负责管理单个JobGraph的执行。Flink集群中可以同时运行多个作业,每个作业都有自己的JobMaster。
TaskManagers:
TaskManager(也称为worker)执行作业流的task,并且缓存和交换数据流。
必须始终至少有一个TaskManager。在TaskManager中资源调度的最小单位是taskslot。TaskManager中taskslot的数量表示并发处理task的数量。请注意一个taskslot中可以执行多个算子。
大数据技术面试大纲范文第十一篇当jobclient向YARN提交一个应用程序后,YARN将分两个阶段运行这个应用程序:一是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,监控运行直到结束。具体步骤如下:
用户向YARN提交一个应用程序,并指定ApplicationMaster程序、启动ApplicationMaster的命令、用户程序。
RM为这个应用程序分配第一个Container,并与之对应的NM通讯,要求它在这个Container中启动应用程序ApplicationMaster。
ApplicationMaster向RM注册,然后拆分为内部各个子任务,为各个内部任务申请资源,并监控这些任务的运行,直到结束。
AM采用轮询的方式向RM申请和领取资源。
RM为AM分配资源,以Container形式返回。
AM申请到资源后,便与之对应的NM通讯,要求NM启动任务。
NodeManager为任务设置好运行环境,将任务启动命令写到一个脚本中,并通过运行这个脚本启动任务。
各个任务向AM汇报自己的状态和进度,以便当任务失败时可以重启任务。
应用程序完成后,ApplicationMaster向ResourceManager注销并关闭自己。
大数据技术面试大纲范文第十二篇Flink摒弃了Java原生的序列化方法,以独特的方式处理数据类型和序列化,包含自己的类型描述符,泛型类型提取和类型序列化框架。
TypeInformation是所有类型描述符的基类。它揭示了该类型的一些基本属性,并且可以生成序列化器。
TypeInformation支持以下几种类型:
BasicTypeInfo:任意Java基本类型或String类型
BasicArrayTypeInfo:任意Java基本类型数组或String数组
WritableTypeInfo:任意HadoopWritable接口的实现类
TupleTypeInfo:任意的FlinkTuple类型(支持Tuple1toTuple25)。Flinktuples是固定长度固定类型的JavaTuple实现
CaseClassTypeInfo:任意的ScalaCaseClass(包括Scalatuples)
PojoTypeInfo:任意的POJO(JavaorScala),例如,Java对象的所有成员变量,要么是public修饰符定义,要么有getter/setter方法
GenericTypeInfo:任意无法匹配之前几种类型的类
大数据技术面试大纲范文第十三篇面试的时候遇到了一个笔试题,是leetcode的原题,原题的连接:复制大概的内容:删除链表的倒数第N个节点,并返回链表的头节点。一开始遇到这个题也是一脸懵,通过查看解题思路才了解到有几种解决方式:单向项链表实现类:publicclassListNode{intval;ListNodenext;ListNode(intx){val=x;}}复制0x01:两次循环求长度实现思路:1、先循环一遍链表,求出链表的长度L,倒数第N个节点就是从开头数第(L-N+1)个节点,将此节点的next指向下下节点就可以了。在解题的过程中要添加一个亚节点(dummy)进行辅助(如:图1),D就是我们的亚节点。图1代码:ListNodedummy=newListNode(0);//亚节点;intlength=0;ListNodefirst=head;//通过移动头节点循环求出链表的长度while(first!=null){
大数据技术面试大纲范文第十四篇本文档是根据
discourse/·discourse/discourse·GitHub
页面中的内容进行翻译的。云平台安装在基于云平台的Discourse安装通常不会超过30分钟,哪怕你没有任何有关Rails或Linuxshell的知识都能够顺利完成安装。下面我们是通过
DigitalOcean
服务提供商来进行安装测的,但是所有的安装步骤都能够在所有兼容
Docker
的云计算平台上进行,同时也可以在本地的服务器上完成安装。
如果你连30分钟都没有的话?你可以联系Discourse社区来帮你完成安装,Discourse社区将会收取一次性$150(美元)的费用。
单击此处链接来对服务进行购买
。创建一个新的云服务器创建一个你的新云服务器,例如:DigitalOcean
,当然你也可以使用其他平台提供的服务器。默认配置
当前版本的LTSUbuntu操作系统
能够很好的工作。最少,需要一个64位的Linux操作系统,并且这个操作系统的内核需要更新到最新的版本。默认配置
1GB
的内存针对小型的Discourse社区通常都能很好的运行。但我们推荐
大数据技术面试大纲范文第十五篇Client:客户端
切分文件。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储
与NameNode交互,获取文件的位置信息
与DataNode交互,读取或者写入数据
Client提供一些命令来管理HDFS,比如启动关闭HDFS、访问HDFS目录及内容等
NameNode:名称节点,也称主节点,存储数据的元数据信息,不存储具体的数据
管理HDFS的名称空间
管理数据块(Block)映射信息
配置副本策略
处理客户端读写请求
DataNode:数据节点,也称从节点。NameNode下达命令,DataNode执行实际的操作
存储实际的数据块
执行数据块的读/写操作
SecondaryNameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
辅助NameNode,分担其工作量
定期合并Fsimage和Edits,并推送给NameNode
在紧急情况下,可辅助恢复NameNode
大数据技术面试大纲范文第十六篇数据倾斜以为着某一个或者某几个partition的数据特别大,导致这几个partition上的计算需要耗费相当长的时间。
在spark中同一个应用程序划分成多个stage,这些stage之间是串行执行的,而一个stage里面的多个task是可以并行执行,task数目由partition数目决定,如果一个partition的数目特别大,那么导致这个task执行时间很长,导致接下来的stage无法执行,从而导致整个job执行变慢。
避免数据倾斜,一般是要选用合适的key,或者自己定义相关的partitioner,通过加盐或者哈希值来拆分这些key,从而将这些数据分散到不同的partition去执行。
如下算子会导致shuffle操作,是导致数据倾斜可能发生的关键点所在:groupByKey;reduceByKey;aggregaByKey;join;cogroup;
大数据技术面试大纲范文第十七篇这道题常考,这里只是给大家一个思路,简单说下!面试之前还需做更多准备。
join其实常见的就分为两类:map-sidejoin和reduce-sidejoin。
当大表和小表join时,用map-sidejoin能显著提高效率。
如果其中有张表较小的话,我们则可以自己实现在map端实现数据关联,跳过大量数据进行shuffle的过程,运行时间得到大量缩短,根据不同数据可能会有几倍到数十倍的性能提升。
在大数据量的情况下,join是一中非常昂贵的操作,需要在join之前应尽可能的先缩小数据量。
对于缩小数据量,有以下几条建议:
若两个RDD都有重复的key,join操作会使得数据量会急剧的扩大。所有,最好先使用distinct或者combineByKey操作来减少key空间或者用cogroup来处理重复的key,而不是产生所有的交叉结果。在combine时,进行机智的分区,可以避免第二次shuffle。
如果只在一个RDD出现,那你将在无意中丢失你的数据。所以使用外连接会更加安全,这样你就能确保左边的RDD或者右边的RDD的数据完整性,在join之后再过滤数据。
如果我们容易得到RDD的可以的有用的子集合,那么我们可以先用filter或者reduce,如何在再用join。
大数据技术面试大纲范文第十八篇简单描述:
Reduce大致分为copy、sort、reduce三个阶段,重点在前两个阶段。
copy阶段包含一个eventFetcher来获取已完成的map列表,由Fetcher线程去copy数据,在此过程中会启动两个merge线程,分别为inMemoryMerger和onDiskMerger,分别将内存中的数据merge到磁盘和将磁盘中的数据进行merge。待数据copy完成之后,copy阶段就完成了。
开始进行sort阶段,sort阶段主要是执行finalMerge操作,纯粹的sort阶段,完成之后就是reduce阶段,调用用户定义的reduce函数进行处理。
详细步骤:
Copy阶段:简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过HTTP方式请求maptask获取属于自己的文件(maptask的分区会标识每个maptask属于哪个reducetask,默认reducetask的标识从0开始)。
Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
merge有三种形式:内存到内存;内存到磁盘;磁盘到磁盘。默认情况下第一种形式不启用。当内存中的数据量到达一定阈值,就直接启动内存到磁盘的merge。与map端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。内存到磁盘的merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的文件。
合并排序:把分散的数据合并成一个大的数据后,还会再对合并后的数据排序。
对排序后的键值对调用reduce方法:键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。
大数据技术面试大纲范文第十九篇七、Memcached客户端程序Memcached的java客户端已经存在三种了:?官方提供的基于传统阻塞io由GregWhalin维护的客户端?DustinSallings实现的基于javanio的Spymemcached?XMemcached1.三种API比较1)较早推出的memcachedJAVA客户端API,应用广泛,运行比较稳定。2)spymemcachedAsimple,asynchronous,single-.支持异步,单线程的memcached客户端,用到了版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。3)xmemcachedXMemcached同样是基于javanio的客户端,javanio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做
大数据技术面试大纲范文第二十篇数据倾斜问题主要有以下几种:
空值引发的数据倾斜
不同数据类型引发的数据倾斜
不可拆分大文件引发的数据倾斜
数据膨胀引发的数据倾斜
表连接时引发的数据倾斜
确实无法减少数据量引发的数据倾斜
以上倾斜问题的具体解决方案可查看:Hive千亿级数据倾斜解决方案
注意:对于leftjoin或者rightjoin来说,不会对关联的字段自动去除null值,对于innerjoin来说,会对关联的字段自动去除null值。
小伙伴们在阅读时注意下,在上面的文章(Hive千亿级数据倾斜解决方案)中,有一处sql出现了上述问题(举例的时候原本是想使用leftjoin的,结果手误写成了join)。此问题由公众号读者发现,感谢这位读者指正。
大数据技术面试大纲范文第二十一篇YARN的基本设计思想是将MapReduceV1中的JobTracker拆分为两个独立的服务:ResourceManager和ApplicationMaster。
ResourceManager负责整个系统的资源管理和分配,ApplicationMaster负责单个应用程序的的管理。
调度器根据容量、队列等限制条件,将系统中的资源分配给正在运行的应用程序,在保证容量、公平性和服务等级的前提下,优化集群资源利用率,让所有的资源都被充分利用应用程序管理器负责管理整个系统中的所有的应用程序,包括应用程序的提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重启它。
ApplicationMaster:用户提交的一个应用程序会对应于一个ApplicationMaster,它的主要功能有:
与RM调度器协商以获得资源,资源以Container表示。
将得到的任务进一步分配给内部的任务。
与NM通信以启动/停止任务。
监控所有的内部任务状态,并在任务运行失败的时候重新为任务申请资源以重启任务。
NodeManager:NodeManager是每个节点上的资源和任务管理器,一方面,它会定期地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,他接收并处理来自AM的Container启动和停止请求。
Container:Container是YARN中的资源抽象,封装了各种资源。一个应用程序会分配一个Container,这个应用程序只能使用这个Container中描述的资源。不同于MapReduceV1中槽位slot的资源封装,Container是一个动态资源的划分单位,更能充分利用资源。
大数据技术面试大纲范文第二十二篇在hbase中每当有memstore数据flush到磁盘之后,就形成一个storefile,当storeFile的数量达到一定程度后,就需要将storefile文件来进行compaction操作。
Compact的作用:
合并文件
清除过期,多余版本的数据
提高读写数据的效率4HBase中实现了两种compaction的方式:minorandmajor.这两种compaction方式的区别是:
Minor操作只用来做部分文件的合并操作以及包括minVersion=0并且设置ttl的过期版本清理,不做任何删除数据、多版本数据的清理工作。
Major操作是对Region下的HStore下的所有StoreFile执行合并操作,最终的结果是整理合并出一个文件。
大数据技术面试大纲范文第二十三篇采集层主要可以使用Flume,Kafka等技术。
Flume:Flume是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展API.
Kafka:Kafka是一个可持久化的分布式的消息队列。Kafka是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题Topics。
相比之下,Flume是一个专用工具被设计为旨在往HDFS,HBase发送数据。它对HDFS有特殊的优化,并且集成了Hadoop的安全特性。
所以,Cloudera建议如果数据被多个系统消费的话,使用kafka;如果数据被设计给Hadoop使用,使用Flume。
大数据技术面试大纲范文第二十四篇我们学习了面向对象的一些理论知识,比如,面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格、基于接口而非实现编程和多用组合少用继承设计思想等等。接下来,我们再用四节课的时间,通过两个更加贴近实战的项目来进一步学习,如何将这些理论应用到实际的软件开发中。据我了解,大部分工程师都是做业务开发的,所以,今天我们讲的这个实战项目也是一个典型的业务系统开发案例。我们都知道,很多业务系统都是基于MVC三层架构来开发的。实际上,更确切点讲,这是一种基于贫血模型的MVC三层架构开发模式。虽然这种开发模式已经成为标准的Web项目的开发模式,但它却违反了面向对象编程风格,是一种彻彻底底的面向过程的编程风格,因此而被有些人称为反模式(antipattern)。特别是领域驱动设计(DomainDrivenDesign,简称DDD)盛行之后,这种基于贫血模型的传统的开发模式就更加被人诟病。而基于充血模型的DDD开发模式越来越被人提倡。所以,我打算用两节课的时间,结合一个虚拟钱包系统的开发案例,带你彻底弄清楚这两种开发模式。考虑到你有可能不太了解我刚刚提到的这几个概念,所以,在正式进入实战项目的讲解之前,
大数据技术面试大纲范文第二十五篇可以这样说:
flume那边采用的channel是将数据落地到磁盘中,保证数据源端安全性(可以在补充一下,flume在这里的channel可以设置为memory内存中,提高数据接收处理的效率,但是由于数据在内存中,安全机制保证不了,故选择channel为磁盘存储。整个流程运行有一点的延迟性)
sparkStreaming通过拉模式整合的时候,使用了FlumeUtils这样一个类,该类是需要依赖一个额外的jar包()
要想保证数据不丢失,数据的准确性,可以在构建StreamingConext的时候,利用(checkpoint,creatingFunc:()=>StreamingContext)来创建一个StreamingContext,使用来创建StreamingContext对象,传入的第一个参数是checkpoint的存放目录,第二参数是生成StreamingContext对象的用户自定义函数。如果checkpoint的存放目录存在,则从这个目录中生成StreamingContext对象;如果不存在,才会调用第二个函数来生成新的StreamingContext对象。在creatingFunc函数中,除了生成一个新的StreamingContext操作,还需要完成各种操作,然后调用(checkpointDirectory)来初始化checkpoint功能,最后再返回StreamingContext对象。
这样,在之后,就可以直接调用start()函数来启动(或者是从中断点继续运行)流式应用了。如果有其他在启动或继续运行都要做的工作,可以在start()调用前执行。
大数据技术面试大纲范文第二十六篇十种常见排序算法可以分为两大类:
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
算法复杂度:
相关概念:
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。
下面讲解大数据中最常考的两种:快排和归并
大数据技术面试大纲范文第二十七篇机器人在家庭和工作中提供帮助的梦想已成为当今的现实。环顾四周,您可能会发现一个机器人!目前,机器人在世界各地发挥着作用-从打扫客厅,送货上门到检查高风险环境和在机场停车库巡逻-等等。机器人技术已经在提高家庭和工作场所的效率和安全性。随着机器人变得更加自主并且能够执行越来越复杂的任务,这些好处将成倍增长。“NVIDIA致力于解决计算机可以解决的非常困难的挑战。毫无疑问,机器人技术是人工智能的最后前沿之一。它需要多种技术的融合。”NVIDIA首席执行官黄仁勋在2019年该公司位于西雅图的机器人研究实验室开幕时曾表示说。VelodyneLidar正在与NVIDIA合作,将先进的传感器技术和开发平台引入自动移动机器人。两者都是构建可在受控情况下安全运行的移动机器人的关键组件。VelodyneLidar为自动驾驶汽车,驾驶员辅助,交付解决方案,机器人技术,导航,地图绘制等提供了智能,强大的激光雷达解决方案。Velodyne总部位于加利福尼亚州圣何塞,其突破性的激光雷达传感器技术产品组合享誉全球。实际中的机器人应用程序:NVIDIAJetsonEdgeAI平台Velodyne和NVIDIA的能力使
大数据技术面试大纲范文第二十八篇Flink中的时间有三种类型,如下图所示:
EventTime:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。
IngestionTime:是数据进入Flink的时间。
ProcessingTime:是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是ProcessingTime。
例如,一条日志进入Flink的时间为2021-01-2210:00:,到达Window的系统时间为2021-01-2210:00:,日志的内容如下:2021-01-0618:37:INFOFailovertorm2
对于业务来说,要统计1min内的故障日志个数,哪个时间是最有意义的?——eventTime,因为我们要根据日志的生成时间进行统计。
大数据技术面试大纲范文第二十九篇一.介绍很多模块当前不用,在编译安装的时候没有编译进去。php支持将模块单独添加进去,不用重新编译了。php可以将源码包中的模块单独编译,然后将编译完的模块在中指定,重启即可加载。当前模拟添加curl模块二.操作1.移动到源码包中的ext文件中cd/root/tar/这个文件夹下每个模块都有一个文件夹,现在移动到curl模块文件夹中cdcurl2.执行phpize,如果有多个版本,要执行对应版本/usr/local/php/bin/phpize结果类似:Configuringfor:PHPApiVersion:20151012ZendModuleApiNo:20151012ZendExtensionApiNo:320151012复制如果提示有如下报错,安装m4和autoconfyum-yinstallm4autoconf3.编译这个模块./configure--with-php-config=/usr/local/php/bin/php-config``make&&makeinstall结果类似:Installings
大数据技术面试大纲范文第三十篇Client写入->存入MemStore,一直到MemStore满->Flush成一个StoreFile,直至增长到一定阈值->触发Compact合并操作->多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除->当StoreFilesCompact后,逐步形成越来越大的StoreFile->单个StoreFile大小超过一定阈值后(默认10G),触发Split操作,把当前RegionSplit成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上
由此过程可知,HBase只是增加数据,没有更新和删除操作,用户的更新和删除都是逻辑层面的,在物理层面,更新只是追加操作,删除只是标记操作。
用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。
大数据技术面试大纲范文第三十一篇什么叫透明压缩呢?OkHttp在发送请求的时候,会自动加入gzip请求头Accept-Encoding:gzip。所以,当返回的数据带有gzip响应头时Content-Encoding=gzip,OkHttp会自动帮我们解压数据。(Accept-Encoding和Content-Encoding是一对请求头,分别对应着请求和返回)为什么要进行压缩呢?因为它能大幅减少传输的容量。像一些CPU资源占用不高的服务,比如Kafka,我们就可以开启gzip压缩,加快信息的流转。这个压缩比有多高呢?可以看下下面实实在在的截图,对于普通的xml或者json,数据可以由9MB压缩到350KB左右,压缩比足足达到了26。它让系统性能飞起来SpringCloud微服务体系,现在有非常多的公司在用。即使是一些传统企业,一些大数据量的toB企业,也想尝一尝螃蟹。对于一个简单的SpringBoot服务,我们只需要在yml文件中配置上相应的压缩就可以了。这样,我们就打通了浏览器到Web服务的这一环。这种压缩方式,对于大数据量的服务来说,是救命式的!具体配置如下。server:port:8082compress
大数据技术面试大纲范文第三十二篇首先一点需要明白:Hbase是基于HDFS来存储的。
HDFS:
一次性写入,多次读取。
保证数据的一致性。
主要是可以部署在许多廉价机器中,通过多副本提高可靠性,提供了容错和恢复机制。
HBase:
瞬间写入量很大,数据库不好支撑或需要很高成本支撑的场景。
数据需要长久保存,且量会持久增长到比较大的场景。
HBase不适用与有join,多级索引,表关系复杂的数据模型。
大数据量(100sTB级数据)且有快速随机访问的需求。如:淘宝的交易历史记录。数据量巨大无容置疑,面向普通用户的请求必然要即时响应。
业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。
大数据技术面试大纲范文第三十三篇在Kafka中,生产者写入消息、消费者读取消息的操作都是与leader副本进行交互的,从而实现的是一种主写主读的生产消费模型。Kafka并不支持主写从读,因为主写从读有2个很明显的缺点:
数据一致性问题:数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间窗口会导致主从节点之间的数据不一致。某一时刻,在主节点和从节点中A数据的值都为X,之后将主节点中A的值修改为Y,那么在这个变更通知到从节点之前,应用读取从节点中的A数据的值并不为最新的Y,由此便产生了数据不一致的问题。
而kafka的主写主读的优点就很多了:
大数据技术面试大纲范文第三十四篇这个问题虽然见过无数次,面试官问过无数次,还是有不少面试者不能完整的说出来,所以请务必记住。并且很多问题都是从HDFS读写流程中引申出来的。
HDFS写流程:
Client客户端发送上传请求,通过RPC与NameNode建立通信,NameNode检查该用户是否有上传权限,以及上传的文件是否在HDFS对应的目录下重名,如果这两者有任意一个不满足,则直接报错,如果两者都满足,则返回给客户端一个可以上传的信息;
Client根据文件的大小进行切分,默认128M一块,切分完成之后给NameNode发送请求第一个block块上传到哪些服务器上;
注:Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。
客户端收到地址之后与服务器地址列表中的一个节点如A进行通信,本质上就是RPC调用,建立pipeline,A收到请求后会继续调用B,B在调用C,将整个pipeline建立完成,逐级返回Client;
Client开始向A上发送第一个block(先从磁盘读取数据然后放到本地内存缓存),以packet(数据包,64kb)为单位,A收到一个packet就会发送给B,然后B发送给C,A每传完一个packet就会放入一个应答队列等待应答;
数据被分割成一个个的packet数据包在pipeline上依次传输,在pipeline反向传输中,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipelineack发送给Client;
当一个block传输完成之后,Client再次请求NameNode上传第二个block,NameNode重新选择三台DataNode给Client。
HDFS读流程:
Client向NameNode发送RPC请求。请求文件block的位置;
大数据技术面试大纲范文第三十五篇假设NameNode1当前为Active状态,NameNode2当前为Standby状态。如果某一时刻NameNode1对应的ZKFailoverController进程发生了“假死”现象,那么Zookeeper服务端会认为NameNode1挂掉了,根据前面的主备切换逻辑,NameNode2会替代NameNode1进入Active状态。但是此时NameNode1可能仍然处于Active状态正常运行,这样NameNode1和NameNode2都处于Active状态,都可以对外提供服务。这种情况称为脑裂。
脑裂对于NameNode这类对数据一致性要求非常高的系统来说是灾难性的,数据会发生错乱且无法恢复。zookeeper社区对这种问题的解决方法叫做fencing,中文翻译为隔离,也就是想办法把旧的ActiveNameNode隔离起来,使它不能正常对外提供服务。
在进行fencing的时候,会执行以下的操作:
首先尝试调用这个旧ActiveNameNode的HAServiceProtocolRPC接口的transitionToStandby方法,看能不能把它转换为Standby状态。
如果transitionToStandby方法调用失败,那么就执行Hadoop配置文件之中预定义的隔离措施,Hadoop目前主要提供两种隔离措施,通常会选择sshfence:
大数据技术面试大纲范文第三十六篇输入数据有很多task,尤其是有很多小文件的时候,有多少个输入block就会有多少个task启动;
spark中有partition的概念,每个partition都会对应一个task,task越多,在处理大规模数据的时候,就会越有效率。不过task并不是越多越好,如果平时测试,或者数据量没有那么大,则没有必要task数量太多。
参数可以通过spark_home/conf/配置文件设置:
针对sparksql的task数量:
非sparksql程序设置生效:
大数据技术面试大纲范文第三十七篇这个问题如果深挖还挺复杂的,这里简单介绍下总体流程:
parser:基于antlr框架对sql解析,生成抽象语法树。
变量替换:通过正则表达式找出符合规则的字符串,替换成系统缓存环境的变量
SQLConf中的,默认是可用的;参考SparkSqlParser
parser:将antlr的tree转成sparkcatalyst的LogicPlan,也就是未解析的逻辑计划;详细参考AstBuild,ParseDriver
analyzer:通过分析器,结合catalog,把logicalplan和实际的数据绑定起来,将未解析的逻辑计划生成逻辑计划;详细参考QureyExecution
缓存替换:通过CacheManager,替换有相同结果的logicalplan(逻辑计划)
logicalplan优化,基于规则的优化;优化规则参考Optimizer,优化执行器RuleExecutor
生成sparkplan,也就是物理计划;参考QueryPlanner和SparkStrategies
sparkplan准备阶段
构造RDD执行,涉及spark的wholeStageCodegenExec机制,基于janino框架生成java代码并编译
大数据技术面试大纲范文第三十八篇MR:抽象层次低,需要使用手工代码来完成程序编写,使用上难以上手;
Spark:Spark采用RDD计算模型,简单容易上手。
MR:只提供map和reduce两个操作,表达能力欠缺;
Spark:Spark采用更加丰富的算子模型,包括map、flatmap、groupbykey、reducebykey等;
MR:一个job只能包含map和reduce两个阶段,复杂的任务需要包含很多个job,这些job之间的管理以来需要开发者自己进行管理;
Spark:Spark中一个job可以包含多个转换操作,在调度时可以生成多个stage,而且如果多个map操作的分区不变,是可以放在同一个task里面去执行;
MR:中间结果存放在hdfs中;
Spark:Spark的中间结果一般存在内存中,只有当内存不够了,才会存入本地磁盘,而不是hdfs;
MR:只有等到所有的maptask执行完毕后才能执行reducetask;
Spark:Spark中分区相同的转换构成流水线在一个task中执行,分区不同的需要进行shuffle操作,被划分成不同的stage需要等待前面的stage执行完才能执行。
MR:只适合batch批处理,时延高,对于交互式处理和实时处理支持不够;
Spark:Sparkstreaming可以将流拆成时间间隔的batch进行处理,实时计算。
大数据技术面试大纲范文第三十九篇1.架构模型
SparkStreaming在运行时的主要角色包括:Master、Worker、Driver、Executor,Flink在运行时主要包含:Jobmanager、Taskmanager和Slot。
2.任务调度
SparkStreaming连续不断的生成微小的数据批次,构建有向无环图DAG,SparkStreaming会依次创建DStreamGraph、JobGenerator、JobScheduler。
Flink根据用户提交的代码生成StreamGraph,经过优化生成JobGraph,然后提交给JobManager进行处理,JobManager会根据JobGraph生成ExecutionGraph,ExecutionGraph是Flink调度最核心的数据结构,JobManager根据ExecutionGraph对Job进行调度。
3.时间机制
SparkStreaming支持的时间机制有限,只支持处理时间。Flink支持了流处理程序在时间上的三个定义:处理时间、事件时间、注入时间。同时也支持watermark机制来处理滞后数据。
4.容错机制
对于SparkStreaming任务,我们可以设置checkpoint,然后假如发生故障并重启,我们可以从上次checkpoint之处恢复,但是这个行为只能使得数据不丢失,可能会重复处理,不能做到恰一次处理语义。
Flink则使用两阶段提交协议来解决这个问题。
大数据技术面试大纲范文第四十篇Hadoop底层使用MapReduce计算架构,只有map和reduce两种操作,表达能力比较欠缺,而且在MR过程中会重复的读写hdfs,造成大量的磁盘io读写操作,所以适合高时延环境下批处理计算的应用;
Spark是基于内存的分布式计算架构,提供更加丰富的数据集操作类型,主要分成转化操作和行动操作,包括map、reduce、filter、flatmap、groupbykey、reducebykey、union和join等,数据分析更加快速,所以适合低时延环境下计算的应用;
spark与hadoop最大的区别在于迭代式计算模型。基于mapreduce框架的Hadoop主要分为map和reduce两个阶段,两个阶段完了就结束了,所以在一个job里面能做的处理很有限;spark计算模型是基于内存的迭代式计算模型,可以分为n个阶段,根据用户编写的RDD算子和程序,在处理完一个阶段后可以继续往下处理很多个阶段,而不只是两个阶段。所以spark相较于mapreduce,计算模型更加灵活,可以提供更强大的功能。
但是spark也有劣势,由于spark基于内存进行计算,虽然开发容易,但是真正面对大数据的时候,在没有进行调优的情况下,可能会出现各种各样的问题,比如OOM内存溢出等情况,导致spark程序可能无法运行起来,而mapreduce虽然运行缓慢,但是至少可以慢慢运行完。
大数据技术面试大纲范文第四十一篇
构建抽象语法树的事情交给了Calcite去做。SQLquery会经过Calcite解析器转变成SQL节点树,通过验证后构建成Calcite的抽象语法树(也就是图中的LogicalPlan)。另一边,TableAPI上的调用会构建成TableAPI的抽象语法树,并通过Calcite提供的RelBuilder转变成Calcite的抽象语法树。然后依次被转换成逻辑执行计划和物理执行计划。
在提交任务后会分发到各个TaskManager中运行,在运行时会使用Janino编译器编译代码后运行。
大数据技术面试大纲范文第四十二篇导读:XGBoost是一个高效、可扩展的机器学习算法,用于回归和分类(),使得XGBoostGradientBoosting开源包可用。Oracle20c数据库中引入的一个新的机器学习算法叫做XGBoost。XGBoost是一个开源软件库,它在大多数常用的数据科学、机器学习和软件开发语言中提供了一个梯度提升框架。该算法是在之前的决策树、Bagging、随机森林、Boosting和梯度提升等工作的基础上发展而来。XGBoost是一个高效、可扩展的机器学习算法,经过多年的研究、开发和验证,XGBoost可以用于分类的典型用例,包括分类、回归和排名问题()。OML4SQLXGBoost(OracleMachineLearningforSQLXGBoost)是一个可扩展的梯度树提升系统,支持分类和回归。它提供了开源的梯度提升框架。通过准备训练数据,调用XGBoost,构建和持久化模型,并应用该模型进行预测,使得XGBoostGradientBoosting开源包在数据库中可用。你可以
大数据技术面试大纲范文第四十三篇spark通过这个参数指定master元数据在zookeeper中保存的位置,包括Worker,Driver和Application以及Executors。standby节点要从zk中,获得元数据信息,恢复集群运行状态,才能对外继续提供服务,作业提交资源申请等,在恢复前是不能接受请求的。
注:Master切换需要注意2点:1、在Master切换的过程中,所有的已经在运行的程序皆正常运行!因为SparkApplication在运行前就已经通过ClusterManager获得了计算资源,所以在运行时Job本身的调度和处理和Master是没有任何关系。2、在Master的切换过程中唯一的影响是不能提交新的Job:一方面不能够提交新的应用程序给集群,因为只有ActiveMaster才能接受新的程序的提交请求;另外一方面,已经运行的程序中也不能够因Action操作触发新的Job的提交请求。
大数据技术面试大纲范文第四十四篇快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
算法描述
快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:
从数列中挑出一个元素,称为“基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
大数据技术面试大纲范文第四十五篇完整版教程下载地址:;tid=94547第3章
Matlab简易使用之基础操作本期教程开始讲解Matlab的简易使用之基础操作,作为学习DSP的必备软件,掌握简单的Matlab操作是必须的。初学者重要提示界面说明矩阵和阵列检索矩阵中的数据工作区中的数据保存和加载字符串函数绘图功能总结
初学者重要提示
本章主要介绍了matlab的基础操作,如果之前没有接触过这方面的知识,务必要实际动手操作。
Matlab界面说明
当前文件夹(Current
Folder)用于访问电脑中的文件。
命令窗口(CommandWindow)用于输入命令,公式计算等也可以在这里进行。
工作区(Workspace)浏览用户创建的数据或者从文件中导入的数据。
命令历史记录(CommandHistory)记录用户在command窗口输入的命令,双击这些历史命令可以返回到
大数据技术面试大纲范文第四十六篇未被external修饰的是内部表,被external修饰的为外部表。
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除。
大数据技术面试大纲范文第四十七篇SecondaryNameNode是合并NameNode的editlogs到fsimage文件中;
它的具体工作机制:
SecondaryNameNode询问NameNode是否需要checkpoint。直接带回NameNode是否检查结果;
SecondaryNameNode请求执行checkpoint;
NameNode滚动正在写的edits日志;
生成新的镜像文件;
拷贝到NameNode;
NameNode将重新命名成fsimage;
所以如果NameNode中的元数据丢失,是可以从SecondaryNameNode恢复一部分元数据信息的,但不是全部,因为NameNode正在写的edits日志还没有拷贝到SecondaryNameNode,这部分恢复不了。
大数据技术面试大纲范文第四十八篇Hbase中的每张表都通过行键(rowkey)按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,由HRegionServer管理,管理哪些HRegion由Hmaster分配。HRegion存取一个子表时,会创建一个HRegion对象,然后对表的每个列族(ColumnFamily)创建一个store实例,每个store都会有0个或多个StoreFile与之对应,每个StoreFile都会对应一个HFile,HFile就是实际的存储文件,一个HRegion还拥有一个MemStore实例。
大数据技术面试大纲范文第四十九篇简单概述:
inputFile通过split被切割为多个split文件,通过Record按行读取内容给map(自己写的处理逻辑的方法),数据被map处理完之后交给OutputCollect收集器,对其结果key进行分区(默认使用的hashPartitioner),然后写入buffer,每个maptask都有一个内存缓冲区(环形缓冲区),存放着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式溢写到磁盘,当整个maptask结束后再对磁盘中这个maptask产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reducetask的拉取。
详细步骤:
读取数据组件InputFormat(默认TextInputFormat)会通过getSplits方法对输入目录中的文件进行逻辑切片规划得到block,有多少个block就对应启动多少个MapTask。
将输入文件切分为block之后,由RecordReader对象(默认是LineRecordReader)进行读取,以\n作为分隔符,读取一行数据,返回,Key表示每行首字符偏移值,Value表示这一行文本内容。
读取block返回,进入用户自己继承的Mapper类中,执行用户重写的map函数,RecordReader读取一行这里调用一次。
Mapper逻辑结束之后,将Mapper的每条结果通过进行collect数据收集。在collect中,会先对其进行分区处理,默认使用HashPartitioner。
接下来,会将数据写入内存,内存中这片区域叫做环形缓冲区(默认100M),缓冲区的作用是批量收集Mapper结果,减少磁盘IO的影响。我们的Key/Value对以及Partition的结果都会被写入缓冲区。当然,写入之前,Key与Value值都会被序列化成字节数组。
当环形缓冲区的数据达到溢写比列(默认),也就是80M时,溢写线程启动,需要对这80MB空间内的Key做排序(Sort)。排序是MapReduce模型默认的行为,这里的排序也是对序列化的字节做的排序。
合并溢写文件,每次溢写会在磁盘上生成一个临时文件(写之前判断是否有Combiner),如果Map
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度新股东入资大数据分析合作协议
- 保险合同履约金保障条款
- 二零二五年度劳动合同变更解除与经济补偿金支付合同
- 2025年度猎头行业人才挖掘与培养合作协议模板
- 二零二五年度体育用品电商平台合作框架协议
- 古董艺术品买卖协议
- 小型短期餐饮活动承办合同
- 出租物品协议
- 雨伞竞争策略分析报告
- 石油化工生产过程安全措施
- 常见意外伤害的处理课件
- 第八章运动和力单元试卷 (含答案) 2024-2025学年人教版物理八年级下
- 2025年中央一号文件高频重点考试题库150题(含答案解析)
- 风电项目电网接入系统可行性研究报告编制服务方案投标文件(技术方案)
- 2024人教版新教材初中地理七年级下册内容解读课件(深度)
- 2025年辽宁医药职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 2023-2028年中国油画行业市场发展现状及投资规划建议报告
- 100以内加减法练习100题(50套)-可直接打印
- 2024年干式电力电容器项目可行性研究报告
- 河南12系列建筑设计图集一(12YJ1)
- 2025年村三会一课工作计划表
评论
0/150
提交评论