前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据系列思考题----[持续更新]

大数据系列思考题----[持续更新]

作者头像
Maynor
发布2021-04-09 15:58:00
6490
发布2021-04-09 15:58:00
举报

文章目录

    • 每日精进
      • 1.hdfs启动流程
      • 2.hdfs ,spark streaming, flink三者中的checkpoint原理
      • 1、谈谈你对Hive内部表、外部表、分区表、分桶表的区别,并介绍一下使用场景
      • 2、介绍一下Sort By,Order By,Distrbute By,Cluster By的区别
      • 3、谈谈你所知道有哪些常用的Hive调优方式?
      • 1、清楚描述 MapReduce 的 shuffle 过程
      • 2、HBase 的 rowkey 设计需要遵循什么原则,以及如何解决热点问题
      • 3、早几年是有很多 elasticsearch /solr 为 mysql 或者 HBase 作二级索引,但是现在 elasticsearch 在不断的加大在大数据领域的支持,是否可以取代 HBase
      • 1、谈谈Hadoop里面的压缩格式以及使用场景
      • 2、Sqoop在导入数据的时候出现了数据倾斜,你有什么解决方案。另外,使用Sqoop的注意事项,你能列举出来几个?
      • 3、小鹏汽车充电有两种类型,快充、慢充,有如下数据:
      • 1、介绍一下拉链表的原理,以及适用于哪些场景?
      • 2、如果使用spark遇到了 OOM ,你会怎么处理?
      • 3、A 文件有 50 亿条 URL,B 文件也有 50 亿条 URL,每条 URL 大小为 64B,在一台只有 4G 内存的机器上,怎么找出 A、B 中相同的 URL?
      • 1、简述Spark中的缓存机制(cache和persist)与checkpoint机制,并指出两者的区别与联系
      • 2、Storm ,Spark Streaming , Spark structured streaming,Flink 的区别?
      • 3、给40亿个不重复的无符号的 int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
      • 1、简单讲述一下Yarn Application生命周期
      • 2、Hive如何避免小文件的产生,你会如何处理大量小文件?
      • 1、请谈谈 Flink 中的时间分类,以及适用的不同的场景
      • 2、谈谈你所知道的 HBase 常见的优化
      • 3、有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间
      • 1、简单谈谈 Flink 中重启策略
      • 2、介绍一下Zookeeper 的选举机制,以及我们还可以用 Zookeeper 做些什么
      • (player_id,event_date)是此表的主键。这张表显示了某些游戏的玩家的活动情况。每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。Activity table:
    • 更多思考题

每日精进

1.hdfs启动流程

个人理解:

hdfs启动流程

hdfs是Hadoop Distribute File System 的简称,即分布式文件系统,用于存储海量数据.

hdfs的启动分为三步:1.启动Namenode;2.启动Datanode;3.启动Secondary Namenode;

详细说说:

Secondary NameNode的工作流程:(为了方便Secondary NameNode以SN替代,NameNode)首先SN通知NN切换成edits文件;

NN中的edits和fsimage通过http的方式传输到SN,并在SN中合并成新的fsimage.ckpt,之后传输回NN,并将旧的fsimage替换;

NN中的edits生成新的edits文件并替换旧的edits

参考答案:

2.hdfs ,spark streaming, flink三者中的checkpoint原理

spark和flink还没学,就先不回答了

基础题:

1、谈谈你对Hive内部表、外部表、分区表、分桶表的区别,并介绍一下使用场景

Hive内部表和外部表的区别在于:一个被删除时,元数据和数据全部被删除,一个数据保留,元数据被删除;内部表适用不需要保留数据的场景,外部表仅删除数据,适用保证数据安全的场景.

分区表是在原有数据表的结构上添加分区,这样在扫描时只扫描指定的分区,未指定的分区不扫描,减少了扫描的数量从而加快查询的效率,分桶表是在表和分区的基础上新添加的结构,用于提高join效率及取样,

他们的区别在于:分区表的字段绝对不能出现在数据表结构中,多层分区,其结构是嵌套结构。分桶需要指定分桶字段,且字段必须是数据表中已有的一个字段,分桶表的数据只能通过insert overwrite加载数据。

2、介绍一下Sort By,Order By,Distrbute By,Cluster By的区别

order by 全局排序,只有一个reduce,数据量大时效率较慢 sort by 一个reduce内部排序,不是全局排序。

DISTRIBUTE BY的字段与SORT BY的字段相同时,可以使用CLUSTER BY进行替换,但CLUSTER BY不能指定排序规则(只能是降序),DISTRIBUTE BY+SORT BY可以指定排序规则(可升可降)

思考题:

3、谈谈你所知道有哪些常用的Hive调优方式?

hive的优化很多,我们做项目时70%时间都花在hive的调优上.常见的Hive调优比如并行编译,小文件合并,矢量化查询,读取零拷贝优化,数据倾斜优化等等

关于hive的调优,我曾写过两篇博客专门总结了当时项目中存在的hive调优的点,各位大佬如果感兴趣可以点开链接看看:

链接

链接

基础题:

1、清楚描述 MapReduce 的 shuffle 过程

shuffle过程:分为四步

分区,排序,局部合并,分组

从内存角度看shuffle的过程:

Map将数据传入环形缓冲区(默认100MB),数据达到一定阈值(默认0.8)时,进行溢写生成n个临时文件,临时文件达到10个(可调整)后merge合并成一个大文件,

然后Reduce数据读取,reduce会主动发起拷贝线程到maptask获取属于自己的数据,数据进入到ReduceTask中的环形缓冲区,当达到一定阈值后进行溢写,生成临时文件,临时文件再合并成一个大文件,最后输出到Reduce

2、HBase 的 rowkey 设计需要遵循什么原则,以及如何解决热点问题

思考题:

3、早几年是有很多 elasticsearch /solr 为 mysql 或者 HBase 作二级索引,但是现在 elasticsearch 在不断的加大在大数据领域的支持,是否可以取代 HBase

基础题:

1、谈谈Hadoop里面的压缩格式以及使用场景

常用的压缩格式有LZO,LZ4,Gzip,Bzip2,Snappy,在实际项目开发中一般选用Snappy

思考题:

2、Sqoop在导入数据的时候出现了数据倾斜,你有什么解决方案。另外,使用Sqoop的注意事项,你能列举出来几个?

增加split by 解决

具体:

–split by 字段

-m 数量 使用几个Task进行数据采集

使用Sqoop遇到的bug:hdfs文件的权限问题,文件格式问题,没有设置主键,Output directory already exists…

智力题:

3、小鹏汽车充电有两种类型,快充、慢充,有如下数据:

车辆 ID 充电时间 充电类型

a 20200701 20:00:09 1

a 20200701 21:00:09 0

a 20200702 20:00:09 1

a 20200703 11:00:09 1

a 20200704 12:00:09 1

b 20200706 12:00:09 0

a 20200706 12:00:09 0

其中1为快充,0为慢充,求每辆车最长 连续快充次数 ,以上例子结果为

a 3

b 0

请写出对应的SQL

代码语言:javascript
复制
select id,count(1) as c from cars where (id+1,Num) in (select * from cars)
and (id+2,Num) in (select * from cars); 

基础题

1、介绍一下拉链表的原理,以及适用于哪些场景?

拉链表的原理:说白了就是在原有表基础上增加两个字段,一个start_time,一个end_time

数据如果不变就不动,如果有新数据进来,就将原数据的end_time天数-1(改成前天),start_time不变,新数据的start_time写成今天,end_time设置成9999-12-31

这其中的操作都在新建的两张临时表(update表和tmp表)中进行,它适合最大程度节省存储空间,又能满足数据历史状态的场景

拉链表就是之前我们讲过的SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。

拉链表的实现需要在原始字段基础上增加两个新字段:

start_time(表示该条记录的生命周期开始时间——周期快照时的状态)

end_time(该条记录的生命周期结束时间)

4.3.1.8.1.2 采集实现步骤

1.建立增量数据临时表update;

2.抽取昨日增量数据(新增和更新)到update表;

3.建立合并数据临时表tmp;

4.合并昨日增量数据(update表)与历史数据(拉链表)

(1)新数据end_time设为’9999-12-31’,也就是当前有效;

(2)如果增量数据有重复id的旧数据,将旧数据end_time更新为前天(昨日-1),也就是从昨天开始不再生效;

(3)合并后的数据写入tmp表;

5.将临时表的数据,覆盖到拉链表中;

6.下次抽取需要重建update表和tmp表。

查询拉链表数据时,可以通过start_time和end_time查询出快照数据。

思考题

2、如果使用spark遇到了 OOM ,你会怎么处理?

智力题

3、A 文件有 50 亿条 URL,B 文件也有 50 亿条 URL,每条 URL 大小为 64B,在一台只有 4G 内存的机器上,怎么找出 A、B 中相同的 URL?

1、简述Spark中的缓存机制(cache和persist)与checkpoint机制,并指出两者的区别与联系

2、Storm ,Spark Streaming , Spark structured streaming,Flink 的区别?

智力题

3、给40亿个不重复的无符号的 int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

1、简单讲述一下Yarn Application生命周期

2、Hive如何避免小文件的产生,你会如何处理大量小文件?

基础题

1、请谈谈 Flink 中的时间分类,以及适用的不同的场景

在 flink 中被划分为事件时间,提取时间,处理时间三种。

如果以 EventTime 为基准来定义时间窗口那将形成 EventTimeWindow,要 求消息本身就应该携带 EventTime。如果以 IngesingtTime 为基准来定义时间窗口那将形成 IngestingTimeWindow,以 source 的 systemTime 为准。如果以 ProcessingTime 基准来定义时间窗口那将形成 ProcessingTimeWindow,以 operator 的 systemTime 为准。

思考题

2、谈谈你所知道的 HBase 常见的优化

Hbase的优化:

①热点问题引起的性能下降,可通过创建表时给定多个分区,Rowkey写入时不能连续解决。

②分布式设计思想:预分区

方式一:指定分隔段,实现预分区

方式二:指定Region个数,自动进行Hash划分:字母和数字的组合

方式三:JavaAPI

③Hbase表设计思想:Rowkey设计

业务原则:尽量将最常用的查询条件作为Rowkey的前缀

唯一原则:Rowkey必须时唯一标识

组合原则:尽量将最常用的几个查询条件组合成Rowkey

散列原则:构建无序的Rowkey

长度原则:长度不宜过长

④HBase 的列簇设计:将强相关的Key-Value都放在同一个列簇下,这样既能做到查询效率最高,也能保持尽可能少的访问不同的磁盘文件。

智力题:

3、有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间

答:设A,B两根香,A点燃一头,B点燃两头,由于每只香烧完的时间都是1小时,B烧完时时间过去

30分钟,此时再点燃A的另一头,A烧完时恰好是45分钟,也就确定了烧15分钟的时间.

基础题

1、简单谈谈 Flink 中重启策略

Flink 支持不同的重启策略,这些重启策略控制着 job 失败后如何重启: 固定延迟重启策略 固定延迟重启策略会尝试一个给定的次数来重启 Job,如果超过了最大的重启次 数,Job 最终将失败。在连续的两次重启尝试之间,重启策略会等待一个固定的 时间。 失败率重启策略 失败率重启策略在 Job 失败后会重启,但是超过失败率后,Job 会最终被认定失 败。在两个连续的重启尝试之间,重启策略会等待一个固定的时间。 无重启策略 Job 直接失败,不会尝试进行重启。思考题

2、介绍一下Zookeeper 的选举机制,以及我们还可以用 Zookeeper 做些什么

以五个节点的Zookeeper为例,按照12345顺序启动集群。1、第1个节点启动后,投一票给自己。2345节点没有启动,第1个节点的票数不过半,不能是Leader,进入looking状态。2、第2个节点启动后,投一票给自己。345节点没有启动,第2个节点id为2,权重大于第1个节点id为1,所以获得第1个节点的1票,此时第2个节点有2票。票数不过半,不能是Leader,进入looking状态。3、第3个节点启动后,投一票给自己。45节点没有启动,第3个节点id为3,权重大于第2个节点id为2,所以获得第2个节点的2票,此时第3个节点有3票。票数过半,状态为Leader。第1、2节点变为Follower.4、第4个节点启动后,投一票给自己。 但此时第3个节点为Leader,第4个节点状态变为Follower。

5、第5个节点启动后,投一票给自己。 但此时第3个节点为Leader,第5个节点状态变为Follower。智力题

3、

±-------------±--------+

| Column Name | Type |

±-------------±--------+

| player_id | int |

| device_id | int |

| event_date | date |

| games_played | int |

±-------------±--------+

(player_id,event_date)是此表的主键。这张表显示了某些游戏的玩家的活动情况。每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。Activity table:

±----------±----------±-----------±-------------+

| player_id | device_id | event_date | games_played |

±----------±----------±-----------±-------------+

| 1 | 2 | 2016-03-01 | 5 |

| 1 | 2 | 2016-03-02 | 6 |

| 2 | 3 | 2017-06-25 | 1 |

| 3 | 1 | 2016-03-02 | 0 |

| 3 | 4 | 2018-07-03 | 5 |

±----------±----------±-----------±-------------+编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的分数,四舍五入到小数点后两位。换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。查询结果格式如下所示:Result table:

±----------+

| fraction |

±----------+

| 0.33 |

±----------+

只有 ID 为 1 的玩家在第一天登录后才重新登录,所以答案是 1/3 = 0.33请写出SQL … select distinct (logs.player_id/5) as fraction from players p

where (player_id +1,Num) in (select from logs)

and (player_id +2,Num) in (select from logs) and p.games_played !=0;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 每日精进
    • 1.hdfs启动流程
      • 2.hdfs ,spark streaming, flink三者中的checkpoint原理
        • 1、谈谈你对Hive内部表、外部表、分区表、分桶表的区别,并介绍一下使用场景
          • 2、介绍一下Sort By,Order By,Distrbute By,Cluster By的区别
            • 3、谈谈你所知道有哪些常用的Hive调优方式?
              • 1、清楚描述 MapReduce 的 shuffle 过程
                • 2、HBase 的 rowkey 设计需要遵循什么原则,以及如何解决热点问题
                  • 3、早几年是有很多 elasticsearch /solr 为 mysql 或者 HBase 作二级索引,但是现在 elasticsearch 在不断的加大在大数据领域的支持,是否可以取代 HBase
                    • 1、谈谈Hadoop里面的压缩格式以及使用场景
                      • 2、Sqoop在导入数据的时候出现了数据倾斜,你有什么解决方案。另外,使用Sqoop的注意事项,你能列举出来几个?
                        • 3、小鹏汽车充电有两种类型,快充、慢充,有如下数据:
                          • 1、介绍一下拉链表的原理,以及适用于哪些场景?
                            • 2、如果使用spark遇到了 OOM ,你会怎么处理?
                              • 3、A 文件有 50 亿条 URL,B 文件也有 50 亿条 URL,每条 URL 大小为 64B,在一台只有 4G 内存的机器上,怎么找出 A、B 中相同的 URL?
                                • 1、简述Spark中的缓存机制(cache和persist)与checkpoint机制,并指出两者的区别与联系
                                  • 2、Storm ,Spark Streaming , Spark structured streaming,Flink 的区别?
                                    • 3、给40亿个不重复的无符号的 int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
                                      • 1、简单讲述一下Yarn Application生命周期
                                        • 2、Hive如何避免小文件的产生,你会如何处理大量小文件?
                                          • 1、请谈谈 Flink 中的时间分类,以及适用的不同的场景
                                            • 2、谈谈你所知道的 HBase 常见的优化
                                              • 3、有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间
                                                • 1、简单谈谈 Flink 中重启策略
                                                  • 2、介绍一下Zookeeper 的选举机制,以及我们还可以用 Zookeeper 做些什么
                                                    • (player_id,event_date)是此表的主键。这张表显示了某些游戏的玩家的活动情况。每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。Activity table:
                                                    相关产品与服务
                                                    TDSQL MySQL 版
                                                    TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
                                                    领券
                                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档