大数据第二阶段测试
一、简答题
参考答案一
-上游和下游可以实现解耦,上游不需要关心下游的处理逻辑,下游不需要关心上游的数据源。
-上游和下游可以并行处理,提高整体处理效率。
-可以实现数据的分发和负载均衡,提高系统的稳定性和可扩展性。
参考答案二
- 可以很方便地将多个数据源的数据汇聚到一起,然后发送到下游的存储/计算系统中。
- 可以很容易地在 Flume agent 之间传递 event,实现更复杂的拓扑结构。
- 可以通过 Source、Channel、Sink 的灵活组合,实现不同的采集需求。
- 可以在 Flume 层面对数据流进行过滤、聚合等处理,减少下游系统的压力。
参考答案一
-内存 Channel:适合数据量较小、实时性要求高的场景。
-文件 Channel:适合数据量较大、可靠性要求高的场景。
-JDBC Channel:适合将数据实时写入数据库的场景。
-MemoryMapped Channel:适合数据量大且需要持久化的场景。
参考答案二
- 存储容量和可扩展性
- 性能,包括吞吐量和事件写入/读取延迟
- 可靠性
- 持久化需求
- 多 Agent 情况下是否支持事务
参考答案一
-使用可靠性 Channel,如文件 Channel,保证数据在传输过程中的可靠性。
-设置合适的事务超时时间,防止数据传输过程中出现长时间的等待。
-配置合适的重试策略,如设置重试次数和重试间隔时间。
参考答案二
- 使用时间戳插件TimestampInterceptor在Flume事件头中插入时间戳
- 使用Taildir Source读取新增文件,根据文件名判断时间
- 使用自定义Interceptor根据内容解析时间戳
参考答案一
-使用 DataX 的增量采集方式,如配置增量字段和增量查询条件。
-根据增量字段的值,判断是否需要采集该条数据。
-保存增量字段的最大值,下次采集时使用该值作为查询条件。
参考答案二
- 利用参数 incrementalRead 开启增量读模式
- 在 增量检测阶段,根据用户配置的 增量键,扫描目的表与增量状态表,过滤已存在的数据
- 在 增量同步阶段,使用增量键将源端新的数据同步到目的端
- 更新 增量状态表,保存增量键的状态
参考答案一
-使用 Hive 的 JSON SerDe,将 JSON 数据直接存储到 Hive 表中。
-使用 Spark 的 DataFrame API,将 JSON 数据转换为 DataFrame,并存储到 Hive 或其他数据源中。
-使用 Flume 将 JSON 数据采集到 Hadoop/HDFS 中,然后使用 Hive 或 Spark 进行处理和存储。
参考答案二
- 直接Load: 使用JsonSerDe解析Json,直接Load到Hive表中。
- 预处理:使用Spark、MapReduce 等进行Json解析,处理为结构化数据后再Load到hive。
- 使用Hive JSON函数:使用get_json_object、json_tuple等函数解析json。
参考答案一
-行转列:使用 Hive 的 Lateral View 和集合函数,如 explode、posexplode,将一行数据拆分为多行,每行包含一列。
-列转行:使用 Hive 的 Unpivot 操作,将多列数据合并为一列,可以使用 Lateral View 和 UDTF 函数实现。
参考答案二
- 列转行:使用 lateral view explode() 函数。
- 行转列:使用 pivot 进行,需要指定转列的字段、输出列名、聚合函数。
参考答案一
-在创建表时,可以通过指定字段的数据类型来设置数据格式,如 INT、STRING、DECIMAL、TIMESTAMP 等。
-可以使用 Hive 的 SerDe(序列化和反序列化)来自定义数据格式,如 CSV、JSON、Avro 等。
参考答案二
- 创建表时使用STORED AS指定存储格式,如STORED AS ORC
- 创建表时使用ROW FORMAT 指定行格式,如ROW FORMAT DELIMITED
- 创建分区时使用FILEFORMAT指定分区文件格式
参考答案一
-内部表:数据存储在 Hive 的默认位置,删除表时会同时删除数据。适合管理不频繁的临时数据。
-外部表:数据存储在外部目录中,删除表时不会删除数据。适合对外部数据进行管理和查询。
参考答案二
- 临时表用内部表,数据会在删除表时删除。
- 业务事实表等需要hive管理生命周期的使用内部表。
- 对外统一提供数据访问的表使用外部表,数据存放在外部位置。
- 需作为其他系统数据源的using外部表,prevent drop data
参考答案一
-数据抽取:从数据源中读取数据,可以使用 Spark 的 DataFrame、RDD、Streaming 等 API。
-数据清洗:对数据进行过滤、转换、去重等操作,可以使用 Spark 的转换操作和自定义函数。
-数据转换:将数据格式转换为目标格式,如将结构化数据转换为 JSON 或 Parquet 格式。
-数据加载:将处理后的数据写入到目标数据源,如 Hive、HDFS、关系型数据库等。
参考答案二
- 数据抽取:从数据源读取数据,封装为DataFrame
- 数据转换:对DataFrame进行各种转换,清洗、补全、修改数据
- 数据加载:将处理后的数据写入目标存储系统
实现方式是通过Spark SQL,Dataframe API进行业务转换,最后写入存储系统。
参考答案一
-使用 OLAP(联机分析处理)工具,如 Kylin、ClickHouse、Presto 等,可以对大规模数据进行多维分析。
-使用数据仓库和数据集市,通过事实表和维度表的关联,使用 SQL 进行多维分析查询。
-使用数据可视化工具,如 Tableau、Power BI 等,将数据以可视化的方式展示出来,进行多维分析。
参考答案二
- OLAP多维立方:使用OLAP工具构建多维Cube,进行多维分析。
- Hive多维分析:在Hive中建立Fact和Dimension表,使用Cube、Rollup、Grouping Sets实现多维聚合。
- Spark SQL pivoting: 使用grouping sets、rollup、cube实现多维聚合。
参考答案一
-Map 算子是对 RDD/DataFrame/Dataset 中的每个元素进行单独的操作,可以对每个元素应用一个函数。
-MapPartition 算子是对 RDD/DataFrame/Dataset 中的每个分区进行操作,可以对每个分区应用一个函数。
-MapPartition 比 Map 算子效率更高,因为它减少了函数调用的开销。但是需要注意,MapPartition 算子可能会导致内存溢出,因为它处理的是整个分区的数据。
参考答案二
- Map 对RDD每个分区的数据应用转换函数。MapPartition对每个分区作为整体应用转换函数。
- Map 针对RDD的每个元素进行转换,函数输入是单个元素。MapPartition以分区为单位,输入是迭代器。
- Map任务数和RDD分区数相同。MapPartition任务数等于RDD分区数。
参考答案一
-漏斗分析模型用于分析用户在一个流程中的转化情况,可以发现流程中的瓶颈和优化点。
-计算思路:统计每个步骤的用户数量,然后计算每个步骤之间的转化率。可以使用 SQL 或编程语言实现。
参考答案二
漏斗分析可以衡量用户从进入网站特定页面到达成交的转换率,识别转化路径中的堵点。
其计算思路是:
- 根据事件时间顺序,识别用户访问的各个页面
- 计算相邻页面之间的用户流失率
- 按照流失率高低找出转化路径的漏斗
参考答案一
数仓一般分为原始层、清洗层、集市层和报表层。
-原始层:存储原始数据,不做任何处理。
-清洗层:对原始数据进行清洗、过滤、去重等操作。
-集市层:对清洗后的数据进行加工和整合,构建维度模型。
-报表层:根据业务需求进行数据汇总、统计和可视化。
参考答案二
- ODS层:操作数据存储层,用于存放原始数据。
- DWD层:数据仓库存放层,对ODS层数据进行清洗、去重复、校验等处理。
- DWS层:数据集市层,对DWD层数据进行汇总、加工生成分析数据集。
- ADS层:应用数据存储层,存放生成报表及模型分析所需的数据集。
参考答案一
-可以使用 Hive 的变量(Variable)来传递参数,如使用 ${var_name} 的方式引用变量。
-在执行 HiveSQL 之前,可以使用 SET var_name=value 的方式设置变量的值。
参考答案二
- 使用变量 substitute 参数
- 使用 --hivevar 定义参数,SQL中使用 ${hivevar:name}引用
- 设置参数配置文件,SQL中使用 ${hivedvar:name} 引用
参考答案一
-DolphinScheduler 会根据任务的重试策略进行重试,直到达到最大重试次数。
-如果任务重试失败,则会将任务状态设置为失败,触发后续的失败处理流程。
-失败处理流程可以根据配置进行自定义,如发送通知、触发报警、记录日志等。
参考答案二
- 发送钉钉、邮件通知相关负责人
- 检查日志,分析失败原因,如资源不足、业务数据问题等
- 重试任务执行或修复失败原因后手动触发重试
- 如果非系统问题,需要更新任务方案,重新发布上线
参考答案一
-使用合适的索引,可以加快查询的速度。
-对查询语句进行优化,如使用合适的连接方式、减少子查询的使用、优化 WHERE 条件等。
-对数据表进行分区、分桶,可以提高查询性能。
-使用合适的缓存机制,如使用 Redis 缓存查询结果。
-使用合适的硬件设备,如使用 SSD 替代传统的机械硬盘。
参考答案二
- 使用explain分析执行计划,针对问题进行优化
- 加入索引,提高查询速度
- SQL改写,简化查询逻辑
- 参数调优,合理配置内存、并发等参数
- 使用分区、分桶改善数据存取
- 使用视频、序列等提升查询性能