下面是面试题: 由于我准备面试时大部分的项目准备是围绕数据仓库开发准备的, 而我面试的是货拉拉的大数据开发岗, 所以整个面试过程面试官也在反复和我确认到底是面试应用开发还是数仓开发。。。...如何处理Hive的数据倾斜 如何解决数据倾斜一类的问题,可参见这篇: Hive千亿级数据倾斜解决方案 描述一下Hive的MapReduce过程 mapreduce的三大阶段: map阶段:并行处理的阶段...k2进行字典排序 规约–默认没有此阶段,是优化手段,可以提前合并 分组–相同k2的value会放到同一个集合中 自定义reduce函数,讲分组得到的k2,v2转成k3,v3输出 设置输出的OutputFormat...唯一原则:每条rowkey唯一表示一条数据 组合原则:常用的查询条件组合作为Rowkey 散列原则:rowkey构建不能连续 长度原则:满足业务需求越短越好 最后一问:项目的数据流转 4....一些问题 union和union all的区别 左连接和右连接 内连接和外连接 什么是最左前缀原则?
2、散列原则:由于rowkey是按字典有序的,故应避免rowkey连续有序而导致在某一台RegionServer上堆积的现象。例如可以拼接随机数、将时间戳倒序等。...1、TCP的keep-alive机制可能在短暂的网络异常中,将一个良好的连接给断开; 2、keep-alive设计初衷是清除和回收死亡时间长的连接,不适合实时性高的场合,而且它会先要求连接一定时间内没有活动...四、请介绍一下MapReduce的工作原理。 【解】MapReduce是一个分布式计算框架,用于大规模数据集的并行运算。...合并(Merge):溢写可能会生成多个文件,这时需要将多个文件合并成一个文件。合并的过程中会不断地进行 sort & combine 操作,最后合并成了一个已分区且已排序的文件。...2、Shuffle阶段:广义上Shuffle阶段横跨Map端和Reduce端,在Map端包括Spill过程,在Reduce端包括copy和merge/sort过程。
取决于连接列是否有索引 取决于连接列是否排序 下面来介绍三种不同连接工作方式的不同: 实验sql 假如有10000个城市,对应于10个国家(此例子仅仅可以解释join工作的过程) 更换优化器,添加索引...Hash join散列连接是CBO 做大数据集连接时的常用方式,优化器使用两个表中较小的表(通常是小一点的那个表或数据源)利用连接键(JOIN KEY)在内存中建立散列表,将列数据存储到hash列表中...二.SORT MERGE JOIN:排序合并连接 Merge Join 是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。...因为merge join需要做更多的排序,所以消耗的资源更多。 通常来讲,能够使用merge join的地方,hash join都可以发挥更好的性能,即散列连接的效果都比排序合并连接要好。...然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。
对应 Nested Loops,Hash Join 和 Sort Merge Join. ---- 三种连接方式 NESTED LOOP 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择。...---- Sort Merge Join 通常情况下散列连接的效果都比排序合并连接要好,然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。...Hash Join 散列连接(Hash Join )是CBO 做大数据集连接时的常用方式,优化器使用两个表中较小的表(或数据源)利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行...也可以用USE_HASH(table_name1 table_name2)提示来强制使用散列连接. Hash join用在两个表的数据量差别很大的时候....---- 三种连接工作方式比较 Hash join的工作方式是将一个表(通常是小一点的那个表)做hash运算,将列数据存储到hash列表中,从另一个表中抽取记录,做hash运算,到hash 列表中找到相应的值
CBO 做大数据集连接时的常用方式,优化器使用两个表中较小的表(通常是小一点的那个表或数据源)利用连接键(JOIN KEY)在内存中建立散列表,将列数据存储到hash列表中,然后扫描较大的表 ...1 可以用USE_HASH(table_name1 table_name2)提示来强制使用散列连接。...,hash join都可以发挥更好的性能,即散列连接的效果都比排序合并连接要好。...然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。 ...可以使用USE_MERGE(table_name1 table_name2)来强制使用排序合并连接.
三、FIink 算子连接模式 上下游算子通过数据流进行连接,有 one-to-one (or forwarding) pattern 和 redistributing pattern 两种模式: One-to-one...:保留元素的分区和排序。...比如 keyBy()(其重新分区通过散列键),broadcast(), or rebalance()(其重新分区随机地)。...在重新分配交换中,元素之间的顺序仅保留在每对发送和接收子任务中 四、Flink 的 task 和 subtask 如何划分?...img 上图中将 KeyAggregation 和 Sink 两个 operator 进行了合并,因为这两个合并后并不会改变整体的拓扑结构。
而通过强化学习,系统会在给定的程序状态之下保留树结构中不同分支的工作信息。随着时间推移,系统将逐渐“学会”如何以最高得分(代表最低延迟)获得游戏胜利(成功完成排序)。...从排序到散列 在发现更快的排序算法后,DeepMind 测试了 AlphaDev 是否可以概括和改进不同的计算机科学算法:散列。 哈希是计算中用于检索、存储和压缩数据的基本算法。...就像使用分类系统来定位某本书的图书管理员一样,散列算法可以帮助用户知道他们正在寻找什么以及在哪里可以找到它。...计算机使用此散列来快速检索与密钥相关的数据,而不是搜索所有数据。 DeepMind 将 AlphaDev 应用于数据结构中最常用的散列算法之一,以尝试发现更快的算法。...当将其应用于散列函数的 9-16 字节范围时,AlphaDev 发现的算法速度提高了 30%。
在 Map 任务结束时,它会产生 2 个文件,一个用来存储 Shuffle 数据,另一个用来索引前者的 Shuffle 块。为了这样做, Map 任务会根据分区键的散列值对所有转换的记录进行排序。...一旦此信息变为可用,每个Reduce 任务将会建立和对应的 Spark ESS 实例的连接,以便获取其输入数据。...在该体系上,所有连接异常都是non-fatal的,可以理解为每个环节上的连接断开或异常,都有一个对应的备选和兜底方案: 如果Map task输出的Block没有成功Push到magnet上,并且反复重试仍然失败...这些元数据会告诉 Spark Driver 每个未合并的 Shuffle block 块和已合并的 Shuffle 文件的位置和大小,还有哪些 block 块会合并到每一个 Shuffle 合并文件中。...因此,Spark Driver 可以完整的看到,怎样去获取每个 Reduce 任务已合并的Shuffle 文件和未合并的 Shuffle 块。
算法对应的函数是rangeBounds 15.什么是二次排序,你是如何用spark实现二次排序的?...按天分表,两个字节散列,四个字节存储时分毫秒。...③基于目的地址的hash散列 这种调度算法和基于源地址的hash散列异曲同工,都是为了维持一个session,基于目的地址的hash散列,将记住同一请求的目的地址,将这类请求发往同一台目的服务器。...简而言之,就是发往这个目的地址的请求都发往同一台服务器。而基于源地址的hash散列,就是来自同一源地址的请求都发往同一台服务器。 ④基于源地址的hash散列 上述已讲,不再赘述。...也就是说,将数据按行排序,按列存储,将相同字段的数据作为一个列族来聚合存储。
(Stack) PGA=UGA+排序区+散列区+位图合并区 3、UGA 与PGA相关的另一概念即是UGA(User Global Area),即用户全局区,与特定的会话相关联...如果采用专用服务器连接模式,PGA中包含UGA,其他区域用来排序,散列和位图合并。 ...手动PGA内存管理:用户指定排序区和散列区所使用的内存,每个连接使用相同的内存。 ...被分为可调整区和不可调整区,可调整区为SQL工作区,其余为不可调整区 e.当少量用户连接到数据库时,则每个用户享有相对较多的PGA内存,而当大量用户连接时则每个用户分配相对较少的PGA内存。...f.单个串行查询(非并行查询)可能包括多个排序/散列操作,每个排序/散列操作最多使用5%的PGA内存。 h.单个并行查询最多可用到30%的PGA内存,无论有多少并行进程。
AQE完全基于精确的运行时统计信息进行优化,引入了一个基本的概念Query Stages,并且以Query Stage为粒度,进行运行时的优化,其工作原理如下所示: 由shuffle和broadcast...当CustomShuffleReader的标志为coalesced时,表示AQE已根据目标分区大小在shuffle后检测并合并了小分区。此节点的详细信息显示合并后的无序分区数和分区大小。 ?...当CustomShuffleReader的标志为"skewed"时,这意味着AQE在排序合并连接操作之前检测到一个或多个分区中的数据倾斜。...为了查看使用Spark UI的效果,用户可以比较查询执行之前和执行完成后的计划图: ? || 检测倾斜join 倾斜连接优化的效果可以通过连接节点名来识别。 在Spark UI中: ?...为了获得最佳的估计精度和规划结果,通常需要维护详细的、最新的统计信息,其中一些统计信息的收集成本很高,比如列直方图,它可用于提高选择性和基数估计或检测数据倾斜。
) 加载数据到Hive 加载到普通表 可以将本地文本文件内容批量加载到Hive表中,要求文本文件中的格式和Hive表的定义一致,包括:字段个数、字段顺序、列分隔符都要一致。...排序后,如果指定了conmbiner方法,就运行combiner方法使得map的结果更紧凑,从而减少写入磁盘和将来网络传输的数据量 ##### 合并溢出文件 环形缓冲区每次溢出,都会生成一个文件,所以在...map任务全部完成之前,会进行合并成为一个溢出文件,每次溢出的各个文件都是按照分区进行排好序的,所以在合并文件过程中,也要进行分区和排序,最终形成一个已经分区和排好序的map输出文件。...写入磁盘之前,会对各个map节点来的数据进行合并排序,合并时如果指定了combiner,则会再次执行combiner以尽量减少写入磁盘的数据量。...为了合并,如果map输出是压缩过的,要在内存中先解压缩后合并 ##### 合并数据 合并排序其实是和复制文件同时并行执行的,最终目的是将来自各个map节点的数据合并并排序后,形成一个文件 ####
Reduce阶段都发生了什么,有没有进行分组MapReduce Shuffle的排序算法shuffle为什么要排序?说一下map是怎么到reduce的?说一下你了解的用哪几种shuffle机制?...HBase的预分区HBase的热点问题HBase的memstore冲刷条件HBase的MVCCHBase的大合并与小合并,大合并是如何做的?...Spark Streaming的工作原理?Spark Streaming的DStream和DStreamGraph的区别?Spark输出文件的个数,如何合并小文件?...死锁产生的条件是什么?如何预防死锁?介绍下数据库的ioin(内连接,外连接,全连接),内连接和外连接(左,右连接)的区别MySQL的join过程MySQL有哪些存储引擎?...数据库一般对哪些列建立索引?索引的数据结构?
在实际的工作中,我们可能需要处理的是一系列的数值型数据框,如何将这个函数应用到数据框中的每一列呢?可以使用apply函数,这个非常类似于R中的apply的应用方法。...删除列 bank.drop(‘job’, axis=1) #删除年龄列,axis=1必不可少 排序 bank.sort_values(by=[‘job’,’age’]) #根据工作、年龄升序排序...bank.sort_values(by=[‘job’,’age’], ascending=False) #根据工作、年龄降序排序 多表连接 准备数据: import numpy as np...左连接中,没有Score的学生Score为NaN 缺失值处理 现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作,那么我们该如何处理这些缺失值呢...数据打乱(shuffle) 实际工作中,经常会碰到多个DataFrame合并后希望将数据进行打乱。在pandas中有sample函数可以实现这个操作。
图5 - 计划在每个表上使用支持索引的JOIN查询 因为两个输入流现在都由连接谓词列ContactID排序; 查询的JOIN部分可以在不分割流的情况下完成,也不需要散列; 从而将工作负荷的26 + 5...排序,推送和散列 许多查询操作要求在执行操作之前将数据分组。这些包括DISTINCT,UNION(意味着不同),GROUP BY(及其各种聚合函数)和JOIN。...实际上,如果将鼠标放在最近查询中的“合并连接”图标上,则会使用两个适当排序的输入流匹配行,并利用它们的排序顺序。会出现。这会通知您两个表/索引的行使用内存和处理器时间的绝对最小值进行连接。...哈希是一种可以使用大量内存的技术,但通常比分类更有效。在执行DISTINCT,UNION和JOIN操作时,散列与排序相比有一个优势,即单个行可以传递到下一个操作,而不必等待所有传入行被散列。...散列信息所需的内存量与所需组的数量直接相关。
6.当循环缓冲区中的数据达到溢出比列(默认为0.8)即80M时,溢出线程启动,需要对这80MB空间中的键进行排序。排序是MapReduce模型的默认行为。这里的排序也是序列化字节的排序。...合并排序:把分散的数据合并成一个大的数据后,还会再对合并后的数据排序。...2.溢出阶段:当内存中的数据量达到一定阈值时,数据将被写入本地磁盘。在将数据写入磁盘之前,需要对数据进行一次排序。如果配置了合并器,具有相同分区号和键的数据也将被排序。...5.在ReduceTask阶段合并:当reduce任务远程复制数据时,将在后台启动两个线程,将数据文件从内存合并到本地。 6.排序阶段:在合并数据的同时,进行排序操作。...(2) 增加 Reducer,提升并行度 JobConf.setNumReduceTasks(int) (3) 实现自定义分区 根据数据分布情况,自定义散列函数,将 key 均匀分配到不同 Reducer
当然为了保证多台数据库数据的一致性,需要主从复制。 如何处理负载,高并发?...图片服务器分离 把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等 数据库集群和库表散列及缓存 数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手...NULL 合并运算符:由于日常使用中存在大量同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。...使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?...选取最适用的字段属性,应该尽量把字段设置为NOT NULL 使用连接(JOIN)来代替子查询(Sub-Queries) 使用联合(UNION)来代替手动创建的临时表 尽量少使用 LIKE 关键字和通配符
查询的初始阶段被推送到 LLAP。 在 reduce 阶段,大型 shuffle 在单独的容器中执行。 多个查询和应用程序可以同时访问 LLAP。...查询片段执行 对于如上所述的部分执行,LLAP 节点执行“查询片段”,例如过滤器、投影、数据转换、部分聚合、排序、分桶、散列连接/半连接等。...数据以简单的 RLE 编码列格式传递给执行,该格式已准备好进行矢量化处理; 这也是缓存格式,旨在最大限度地减少 I/O、缓存和执行之间的复制。 多种文件格式。...在将数据放入缓存之前执行合并增量文件以产生表的特定状态。 多个版本是可能的,并且请求指定要使用哪个版本。 这样做的好处是异步进行合并,并且只对缓存数据进行一次合并,从而避免了对操作员管道的影响。...安全 LLAP 服务器是在比“每个文件”更细粒度的级别强制执行访问控制的自然场所。 由于守护进程知道处理了哪些列和记录,因此可以对这些对象实施策略。
传统的 Shuffle 实现如上图中间部分所示,每个 Mapper 对 Shuffle Output 的数据,根据 Partition ID 做排序,然后把排序好的数据和索引写入本地盘。...第三,Shuffle Read 有大量的网络连接,逻辑连接数是 m×n。 第四,存在大量的随机读盘。...同时 Shuffle Read 从随机读转换成了顺序读,网络的连接数也从乘数关系变成了线性关系。这就解决了传统 Shuffle 的主要缺陷。...众所周知,行存和列存是两种常见的数据布局方式。列存的好处是相同类型的数据放在一起,易于编码,如字典编码、行程编码、Delta 编码、前缀编码等,可以非常大程度降低数据量。...为了在 Apache Spark 中实现列式 Shuffle,Celeborn 引入了行列转换和代码生成,在 Shuffle Write 的时候把行存的数据转化成列存,在 Shuffle Read 的时候把列转化为行存
领取专属 10元无门槛券
手把手带您无忧上云