大数据技术之_32_大数据面试题_01_Hive 基本面试 + Hive 数据分析面试 + Flume + Kafka 面试

一、Hive 基本面试 1、什么是 metastore 2、metastore 安装方式有什么区别 3、什么是 Managed Table 跟 External Table? 4、什么时候使用 Managed Table 跟 External Table? 5、hive 有哪些复合数据类型? 6、hive 分区有什么好处? 7、hive 分区跟分桶的区别 8、hive 如何动态分区 9、map join 优化手段 10、如何创建 bucket 表? 11、hive 有哪些 file formats 12、hive 最优的 file formats 是什么? 13、hive 传参 14、order by 和 sort by 的区别 15、hive 跟 hbase 的区别 二、Hive 数据分析面试 1、分组 TopN,选出今年每个学校、每个年级、分数前三的科目 2、今年,北航,每个班级,每科的分数,及分数上下浮动 2 分的总和 3、where 与 having:今年,清华 1 年级,总成绩大于 200 分的学生以及学生数 三、Flume + Kafka 面试 1、flume 如何保证数据的可靠性? 2、kafka 数据丢失问题,及如何保证? 3、kafka 工作流程原理 4、kafka 保证消息顺序 5、zero copy 原理及如何使用? 6、spark Join 常见分类以及基本实现机制

一、Hive 基本面试

metadata 即元数据。包含 database、tabel、column names、partitions 信息、bucketing 信息等的元数据信息。
元数据默认是存储在 Derby 中,建议存储在关系型数据库中。

内嵌模式
内嵌模式使用的是内嵌的 Derby 数据库来存储元数据,也不需要额外起 Metastore 服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

本地元存储
本地安装 mysql 替代 derby 存储元数据,这种安装方式和嵌入式的区别在于,不再使用内嵌的 Derby 作为元数据的存储介质,而是使用其他数据库比如 MySQL 来存储元数据。hive 服务和 metastore 服务运行在同一个进程中,mysql 是单独的进程,可以同一台机器,也可以在远程机器上。

远程元存储(HiveServer2)
Hive 服务和 metastore 在不同的进程内,可能是不同的机器,该模式需要将 hive.metastore.uris 设置为 metastore 服务器 URL,如果有多个 metastore 服务器,将 URL 之间用逗号分隔,metastore 服务器 URL 的格式为 thrift://127.0.0.1:9083。

  • 1、Hive 有两种类型的表 Managed Table(内部表) 跟 External Table(外部表)。
  • 2、Managed Table:也被称作 Internal table,这种表是 hive 的默认类型。如果你在创建表的时候没有指明 Managed 或者 External,那么默认就会给你创建 Managed Table。
    a、Managed Table 的数据,会存放在 HDFS 中的特定的位置中,通常是 /user/username/hive/warehouse
    b、我们可以使用 describe formatted table_name; 命令来查看表的信息。
    c、当你删除 drop table table_name; 删除表时,数据文件也会一并删除。
  • 3、External Table:特别适用于想要在 Hive 之外使用表的数据的情况.当你删除 External Table 时,只是删除了表的元数据,它的数据并没有被删除。

  • Managed Table

  • 适用于临时创建的中间表
  • External Table
  • 适用于数据多部门共享

1、MAP

    a.Map 复合数据类型提供了 key-value 对存储,你可以通过 key 获取 value。    b.zhangsan Math:90,Chinese:92,English:78        i.create table score_map(name string, score map) map keys terminated by ':';        ii.select name, score['English'], size(score) from score_map;

2、STRUCT

    a.Struct 是不同数据类型元素的集合。    b.zhangsan Math,90        i.create table course_struct(name string, course struct) collection items terminated by ',';        ii.select name, course.score, course.course from course_struct;

3、ARRAY

    a.Array 是同类型元素的集合.    b.zhangsan beijing,shanghai,hangzhou        i.create table person_array(name string, work_locations array) collection items terminated by ',';        ii.select name, work_locations[0], size(work_locations) from person_array;

4、UNIONTYPE

    a.它代表一个可以具有属于你所选择的任何数据类型的值的列。    b.官方支持不完整,在 join 查询中,group by 或者 where 字句会失败,目前可以不用这个集合。
  • 最大的好处就是可以更快的执行查询。
  • 在分区的帮助下,将使用分区列的名称创建一个子目录,并且当使用 WHERE 子句执行查询时,将只扫描特定的子目录,而不是扫描整个表。这时可以更快地执行查询。

  • 分区: 是以字段的形式在表结构中存在,通过 describe table 命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列)。

  • 分桶:对于表(table)或者分区,Hive 可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive 也是针对某一列进行桶的组织。 Hive 采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。实际使用比较少。

  • 与分区有关的有两种类型的分区:静态和动态。在静态分区中,您将在加载数据时(显式)指定分区列。

  • 而在动态分区中,您将数据推送到 Hive,然后 Hive 决定哪个值应进入哪个分区。要启用动态分区,请设置下面的属性:hive.exec.dynamic.parition.mode=nonstrict;
insert overwrite table emp_details_partitioned partition(location)select * from emp_details;
Hive 可以进行多表 Join。Join 操作尤其是 Join 大表的时候代价是非常大的。表 Join 的顺序(大表放在后面)    当 Hive 执行 Join 时,需要选择哪个表被流式传输(stream),哪个表被缓存(cache)。 Hive 将 JOIN 语句中的最后一个表用于流式传输,因此我们需要确保这个流表在两者之间是最大的。    如果要在不同的 key 上 join 更多的表,那么对于每个 join 集,只需在 ON 条件右侧指定较大的表。 Sort-Merge-Bucket(SMB) Map Join    它是另一种 Hive join 优化技术,使用这个技术的前提是所有的表都必须是桶分区(bucket)和排序了的(sort)。    set hive.enforce.sortmergebucketmapjoin=false;      set hive.auto.convert.sortmerge.join=true;      set hive.optimize.bucketmapjoin=true;      set hive.optimize.bucketmapjoin.sortedmerge=true;      set hive.auto.convert.join=false;  
  • 默认情况下,在 Hive 中禁用分桶功能,可以通过设置下面的属性强制启用分桶功能:hive.enforce.bucketing=true;
Text File format : 默认格式,数据不做压缩,磁盘开销大,数据解析开销大。Sequence File format :    SequenceFile 是 Hadoop API 提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。    SequenceFile 支持三种压缩选择:NONE, RECORD, BLOCK。 Record 压缩率低,一般建议使用 BLOCK 压缩。RC file format : RCFILE 是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个 record 在一个块上,避免读一个记录需要读取多个 block。其次,块数据列式存储,有利于数据压缩和快速的列存取。RCFile 目前没有性能优势,只有存储上能省 10% 的空间。Parquet : 列式数据存储。AVRO : avro Schema 数据序列化。ORC : 对RCFile做了一些优化,支持各种复杂的数据类型。
ORC file formats:     1、ORC 将行的集合存储在一个文件中,并且集合内的行数据将以列式存储。采用列式格式,压缩非常容易,从而降低了大量的存储成本。    2、当查询时,会查询特定列而不是查询整行,因为记录是以列式存储的。    3、ORC 会基于列创建索引,当查询的时候会很快。
使用 env 获取当前 shell 环境的环境变量eg: export datatime='2017-11-10'select * from tabliname where datatime = ${env:datatime};使用 hive select * from tablename where datatime = ${hivevar:datatime} limit ${hivevar:limit}

使用 order by 会引发全局排序,有可能会导致任务失败。
使用 distribute by + sort by 替代方案,进行优化。

hive 支持 sql 查询,hbase 不支持。
hive 不支持 record 级(一行记录)的更新,删除操作。
hive 定义为数据仓库,hbase 定义为 nosql 数据库。

二、Hive 数据分析面试

场景举例:北京市学生成绩分析
成绩的数据格式:时间,学校,年纪,姓名,科目,成绩
样例数据如下:

2013,&#x5317;&#x5927;,1,&#x88D8;&#x5BB9;&#x7D6E;,&#x8BED;&#x6587;,97<br>2013,&#x5317;&#x5927;,1,&#x5E86;&#x7720;&#x62D4;,&#x8BED;&#x6587;,52<br>2013,&#x5317;&#x5927;,1,&#x4E4C;&#x6D12;&#x7B79;,&#x8BED;&#x6587;,85<br>2012,&#x6E05;&#x534E;,0,&#x94A6;&#x5C27;,&#x82F1;&#x8BED;,61<br>2015,&#x5317;&#x7406;&#x5DE5;,3,&#x51BC;&#x6BBF;,&#x7269;&#x7406;,81<br>2016,&#x5317;&#x79D1;,4,&#x51B5;&#x98D8;&#x7D22;,&#x5316;&#x5B66;,92<br>2014,&#x5317;&#x822A;,2,&#x5B54;&#x987B;,&#x6570;&#x5B66;,70<br>2012,&#x6E05;&#x534E;,0,&#x738B;&#x810A;,&#x82F1;&#x8BED;,59<br>2014,&#x5317;&#x822A;,2,&#x65B9;&#x90E8;&#x76FE;,&#x6570;&#x5B66;,49<br>2014,&#x5317;&#x822A;,2,&#x4E1C;&#x95E8;&#x96F9;,&#x6570;&#x5B66;,77

问题:

hive -e "set mapreduce.job.queuename=low;select t.*from(select       school,       class,       subjects,       score,       row_number() over (partition by school, class, subjects order by score desc) rank_codefrom spark_test_wxwhere partition_id = "2017") twhere t.rank_code 3;"

结果截图如下:

详解如下:

row_number函数:row_number() 按指定的列进行分组生成行序列,从 1 开始,如果两行记录的分组列相同,则行序列 +1。

over 函数:是一个窗口函数。

over (order by score) 按照 score 排序进行累计,order by 是个默认的开窗函数。

over (partition by class) 按照班级分区。

over (partition by class order by score) 按照班级分区,并按着分数排序。

over (order by score range between 2 preceding and 2 following) 窗口范围为当前行的数据幅度减2加2后的范围内的数据求和。

select school, class, subjects, score,sum(score) over (order by score range between 2 preceding and 2 following) sscorefrom spark_test_wxwhere partition_id = "2017" and school="北航";

结果截图如下:

over (order by score rows between 2 preceding and 2 following):窗口范围为当前行前后各移动2行。

提问,上述 sql 有没有可优化的点?

row_number() over (distribute by school, class, subjects sort by score desc) rank_code
hive -e "set mapreduce.job.queuename=low;select school,class,name,sum(score) as total_score,count(1) over (partition by school, class) nctfrom spark_test_wxwhere partition_id = "2017" and school="清华" and class = 1group by school, class, namehaving total_score > 200;"

结果截图如下:

having 是分组(group by)后的筛选条件,分组后的数据组内再筛选,也就是说 HAVING 子句可以让我们筛选成组后的各组数据。
where 则是在分组,聚合前先筛选记录。也就是说作用在 GROUP BY 子句和 HAVING 子句前。

4、情景分析题
今年加入进来了 10 个学校,学校数据差异很大计算每个学校的平均分。
该题主要是考察数据倾斜的处理方式。
group by &#x65B9;&#x5F0F;&#x5F88;&#x5BB9;&#x6613;&#x4EA7;&#x751F;&#x6570;&#x636E;&#x503E;&#x659C;,需要注意一下几点:

Map 端部分聚合hive.map.aggr=true(用于设定是否在 map 端进行聚合,默认值为真,相当于 combine) hive.groupby.mapaggr.checkinterval=100000(用于设定 map 端进行聚合操作的条数)有数据倾斜时进行负载均衡设定 hive.groupby.skewindata,当选项设定为 true 是,生成的查询计划有两个 MapReduce 任务。(先打散数据)第一个 MapReduce 中,map 的输出结果集合会随机分布到 reduce 中, 每个 reduce 做部分聚合操作,并输出结果。这样处理的结果是,相同的 group by key 有可能分发到不同的 reduce 中,从而达到负载均衡的目的;第二个 MapReduce 任务再根据预处理的数据结果按照 group by key 分布到 reduce 中(这个过程可以保证相同的 group by key 分布到同一个 reduce 中),最后完成最终的聚合操作。

5、情景分析题
假设我创建了一张表,其中包含了 2016 年客户完成的所有交易的详细信息:

CREATE TABLE transaction_details (cust_id INT, amount FLOAT, month STRING, country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

现在我插入了 100 万条数据,我想知道每个月的总收入。

问:如何高效的统计出结果,写出步骤即可。

1.首先分析这个需求,其实并不难,但是由于题目说了,要高效.而且数据量也不小,直接写sql查询估计肯定会挂.2.分析:    a.我们可以通过根据每个月对表进行分区来解决查询慢的问题。 因此,对于每个月我们将只扫描分区的数据,而不是整个数据集。    b.但是我们不能直接对现有的非分区表进行分区。所以我们会采取以下步骤来解决这个问题:    c.创建一个分区表,partitioned_transaction:        i.create table partitioned_transaction (cust_id int, amount float, country string) partitioned by (month string) row format delimited fields terminated by ',' ;    d.在 Hive 中启用动态分区:        i.SET hive.exec.dynamic.partition=true;        ii.SET hive.exec.dynamic.partition.mode=nonstrict;    e.将数据从非分区表导入到新创建的分区表中:        i.insert overwrite table partitioned_transaction partition (month) select cust_id, amount, country, month from transaction_details;    f.使用新建的分区表实现需求。

三、Flume + Kafka 面试

  • Flume 提供三种可靠性:JDBC、FILE、MEMORY
  • Flume 使用事务的办法来保证 event 的可靠传递。Source 和 Sink 分别被封装在事务中,这些事务由保存 event 的存储提供或者由 Channel 提供。这就保证了 event 在数据流的点对点传输中是可靠的。

1、kafka 数据丢失问题

a&#x3001;acks=1&#xA0;&#xA0;&#xA0;&#xA0;&#x7684;&#x65F6;&#x5019;(&#x53EA;&#x4FDD;&#x8BC1;&#x5199;&#x5165;&#xA0;leader&#xA0;&#x6210;&#x529F;)&#xFF0C;&#x5982;&#x679C;&#x521A;&#x597D;&#xA0;leader&#xA0;&#x6302;&#x4E86;&#xFF0C;&#x5219;&#x6570;&#x636E;&#x4F1A;&#x4E22;&#x5931;&#x3002;<br>b&#x3001;acks=0&#xA0;&#xA0;&#xA0;&#xA0;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F7F;&#x7528;&#x5F02;&#x6B65;&#x6A21;&#x5F0F;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8BE5;&#x6A21;&#x5F0F;&#x4E0B;&#xA0;kafka&#xA0;&#x65E0;&#x6CD5;&#x4FDD;&#x8BC1;&#x6D88;&#x606F;&#xFF0C;&#x6709;&#x53EF;&#x80FD;&#x4F1A;&#x4E22;&#x3002;

2、brocker 如何保证不丢失

a&#x3001;acks=all&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#x6240;&#x6709;&#x526F;&#x672C;&#x90FD;&#x5199;&#x5165;&#x6210;&#x529F;&#x5E76;&#x786E;&#x8BA4;&#x3002;<br>b&#x3001;retries=&#x4E00;&#x4E2A;&#x5408;&#x7406;&#x503C;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;kafka&#xA0;&#x53D1;&#x9001;&#x6570;&#x636E;&#x5931;&#x8D25;&#x540E;&#x7684;&#x91CD;&#x8BD5;&#x503C;&#x3002;&#xFF08;&#x5982;&#x679C;&#x603B;&#x662F;&#x5931;&#x8D25;&#xFF0C;&#x5219;&#x53EF;&#x80FD;&#x662F;&#x7F51;&#x7EDC;&#x539F;&#x56E0;&#xFF09;<br>c&#x3001;<span class="hljs-built_in">min</span>.insync.replicas=<span class="hljs-number">2</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#x6D88;&#x606F;&#x81F3;&#x5C11;&#x8981;&#x88AB;&#x5199;&#x5165;&#x5230;&#x8FD9;&#x4E48;&#x591A;&#x526F;&#x672C;&#x624D;&#x7B97;&#x6210;&#x529F;&#x3002;<br>d&#x3001;unclean.leader.election.enable=<span class="hljs-literal">false</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#x5173;&#x95ED;&#xA0;unclean&#xA0;leader&#xA0;&#x9009;&#x4E3E;&#xFF0C;&#x5373;&#x4E0D;&#x5141;&#x8BB8;&#x975E;&#xA0;ISR&#xA0;&#x4E2D;&#x7684;&#x526F;&#x672C;&#x88AB;&#x9009;&#x4E3E;&#x4E3A;&#xA0;leader&#xFF0C;&#x4EE5;&#x907F;&#x514D;&#x6570;&#x636E;&#x4E22;&#x5931;&#x3002;

3、consumer 如何保证不丢失?

a&#x3001;&#x5982;&#x679C;&#x5728;&#x6D88;&#x606F;&#x5904;&#x7406;&#x5B8C;&#x6210;&#x524D;&#x5C31;&#x63D0;&#x4EA4;&#x4E86;&#xA0;offset&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x6709;&#x53EF;&#x80FD;&#x9020;&#x6210;&#x6570;&#x636E;&#x7684;&#x4E22;&#x5931;&#x3002;<br>b&#x3001;enable.<span class="hljs-keyword">auto</span>.commit=<span class="hljs-literal">false</span>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#x5173;&#x95ED;&#x81EA;&#x52A8;&#x63D0;&#x4EA4;&#xA0;offset&#x3002;<br>c&#x3001;&#x5904;&#x7406;&#x5B8C;&#x6570;&#x636E;&#x4E4B;&#x540E;&#x624B;&#x52A8;&#x63D0;&#x4EA4;&#x3002;

大致原理即可。有几个点稍微详细即可。

1、全局顺序
a、全局使用一个生产者,一个分区,一个消费者。
2、局部顺序
a、每个分区是有序的,根据业务场景制定不同的 key 进入不同的分区。

  • 1、zero copy 在内核层直接将文件内容传送给网络 socket,避免应用层数据拷贝,减小 IO 开销。
  • 2、java.nio.channel.FileChannel 的 transferTo() 方法实现 zero copy。

1、shuffle hash join、broadcast hash join 以及 sort merge join。

2、shuffle hash join

&#x5C0F;&#x8868;&#xA0;<span class="hljs-keyword">join</span>&#xA0;&#x5927;&#x8868;&#xFF0C;&#x4F9D;&#x6B21;&#x8BFB;&#x53D6;&#x5C0F;&#x8868;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E00;&#x884C;&#x6570;&#x636E;&#x6839;&#x636E;&#xA0;<span class="hljs-keyword">join</span>&#xA0;key&#xA0;&#x8FDB;&#x884C;&#xA0;hash&#xFF0C;hash&#xA0;&#x5230;&#x5BF9;&#x5E94;&#x7684;&#xA0;Bucket(&#x6876;)&#xFF0C;&#x751F;&#x6210;&#xA0;hash&#xA0;table&#xA0;&#x4E2D;&#x7684;&#x4E00;&#x6761;&#x8BB0;&#x5F55;&#x3002;<br>&#x6570;&#x636E;&#x7F13;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x5185;&#x5B58;&#x653E;&#x4E0D;&#x4E0B;&#x9700;&#x8981;&#xA0;<span class="hljs-keyword">dump</span>&#xA0;&#x5230;&#x5916;&#x5B58;&#x3002;<br>&#x518D;&#x4F9D;&#x6B21;&#x626B;&#x63CF;&#x5927;&#x8868;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4F7F;&#x7528;&#x76F8;&#x540C;&#x7684;&#xA0;hash&#xA0;&#x51FD;&#x6570;&#x6620;&#x5C04;&#xA0;Hash&#xA0;Table&#xA0;&#x4E2D;&#x7684;&#x8BB0;&#x5F55;&#xFF0C;&#x6620;&#x5C04;&#x6210;&#x529F;&#x4E4B;&#x540E;&#x518D;&#x68C0;&#x67E5;&#xA0;<span class="hljs-keyword">join</span>&#xA0;&#x6761;&#x4EF6;&#xFF0C;&#x5982;&#x679C;&#x5339;&#x914D;&#x6210;&#x529F;&#x5C31;&#x53EF;&#x4EE5;&#x5C06;&#x4E24;&#x8005;&#xA0;<span class="hljs-keyword">join</span>&#xA0;&#x5728;&#x4E00;&#x8D77;&#x3002;

3、broadcast hash join

&#x5982;&#x679C;&#x5C0F;&#x8868;&#x6570;&#x636E;&#x91CF;&#x589E;&#x5927;&#xFF0C;&#x5185;&#x5B58;&#x4E0D;&#x80FD;&#x653E;&#x4E0B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5206;&#x522B;&#x5C06;&#x4E24;&#x4E2A;&#x8868;&#x6309;&#x7167;&#xA0;<span class="hljs-keyword">join</span>&#xA0;<span class="hljs-keyword">key</span>&#xA0;&#x8FDB;&#x884C;&#x5206;&#x533A;&#xFF0C;&#x5C06;&#x76F8;&#x540C;&#xA0;<span class="hljs-keyword">join</span>&#xA0;<span class="hljs-keyword">key</span>&#xA0;&#x7684;&#x8BB0;&#x5F55;&#x91CD;&#x5206;&#x5E03;&#x5230;&#x540C;&#x4E00;&#x8282;&#x70B9;&#xFF0C;&#x4E24;&#x5F20;&#x8868;&#x7684;&#x6570;&#x636E;&#x4F1A;&#x88AB;&#x91CD;&#x5206;&#x5E03;&#x5230;&#x96C6;&#x7FA4;&#x4E2D;&#x6240;&#x6709;&#x8282;&#x70B9;&#x3002;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#x79F0;&#x4E3A;&#xA0;shuffle(&#x7F51;&#x7EDC;&#x6DF7;&#x542F;)&#x3002;<br>&#x6BCF;&#x4E2A;&#x5206;&#x533A;&#x8282;&#x70B9;&#x4E0A;&#x7684;&#x6570;&#x636E;&#x5355;&#x72EC;&#x6267;&#x884C;&#x5355;&#x673A;&#xA0;hash&#xA0;<span class="hljs-keyword">join</span>&#xA0;&#x7B97;&#x6CD5;&#x3002;

4、sort merge join

&#x4E24;&#x5F20;&#x5927;&#x8868;&#xA0;join&#xA0;&#x91C7;&#x7528;&#x4E86;&#xA0;sort&#xA0;<span class="hljs-keyword">merge</span>&#xA0;<span class="hljs-keyword">join</span>&#xA0;&#x7B97;&#x6CD5;&#xFF1A;<br>&#xA0;&#xA0;&#xA0;&#xA0;shuffle&#xA0;&#x9636;&#x6BB5;&#xFF1A;&#x5C06;&#x4E24;&#x5F20;&#x5927;&#x8868;&#x6839;&#x636E;&#xA0;<span class="hljs-keyword">join</span>&#xA0;<span class="hljs-keyword">key</span>&#xA0;&#x8FDB;&#x884C;&#x91CD;&#x65B0;&#x5206;&#x533A;&#xFF0C;&#x4E24;&#x5F20;&#x8868;&#x6570;&#x636E;&#x4F1A;&#x5206;&#x5E03;&#x5230;&#x6574;&#x4E2A;&#x96C6;&#x7FA4;&#xFF0C;&#x4EE5;&#x4FBF;&#x5206;&#x5E03;&#x5F0F;&#x5E76;&#x884C;&#x5904;&#x7406;&#x3002;<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-keyword">sort</span>&#xA0;&#x9636;&#x6BB5;&#xFF1A;&#x5BF9;&#x5355;&#x4E2A;&#x5206;&#x533A;&#x8282;&#x70B9;&#x7684;&#x4E24;&#x8868;&#x6570;&#x636E;&#xFF0C;&#x5206;&#x522B;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#x3002;<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-keyword">merge</span>&#xA0;&#x9636;&#x6BB5;&#xFF1A;&#x5BF9;&#x6392;&#x597D;&#x5E8F;&#x7684;&#x4E24;&#x5F20;&#x5206;&#x533A;&#x8868;&#x6570;&#x636E;&#x6267;&#x884C;&#xA0;<span class="hljs-keyword">join</span>&#xA0;&#x64CD;&#x4F5C;&#x3002;<span class="hljs-keyword">join</span>&#xA0;&#x64CD;&#x4F5C;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5206;&#x522B;&#x904D;&#x5386;&#x4E24;&#x4E2A;&#x6709;&#x5E8F;&#x5E8F;&#x5217;&#xFF0C;&#x78B0;&#x5230;&#x76F8;&#x540C;&#xA0;<span class="hljs-keyword">join</span>&#xA0;<span class="hljs-keyword">key</span>&#xA0;&#x5C31;&#xA0;<span class="hljs-keyword">merge</span>&#xA0;&#x8F93;&#x51FA;&#xFF0C;&#x5426;&#x5219;&#x53D6;&#x66F4;&#x5C0F;&#x4E00;&#x8FB9;&#x3002;

128G 内存、多磁盘、万兆网卡、吞吐(几千到一万)

Original: https://www.cnblogs.com/chenmingjun/p/11048029.html
Author: 黑泽君
Title: 大数据技术之_32_大数据面试题_01_Hive 基本面试 + Hive 数据分析面试 + Flume + Kafka 面试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8395/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部