大数据开发高频面试题:(第50天)

系列文章目录

一、大数据开发常用技术栈

二、大数据开发高频面试题

文章目录


前言

本文总结了大数据开发常规高频面试题。

后面会出,系列面试题,涉及到hive,spark离线数仓,实时flink以及kafka,es,等技术栈专项面试题。

一、大数据开发常用技术栈?

  • CDH:阿里云、HDP、**TDH
  • SQL:HQL、SparkSQL、FlinkSQL
  • 离线数据采集:Sqoop、Kettle、DataX
  • 实时数据采集:Flume、DataX、FlinkCDC
  • 存储:HDFS、Kafka、ElasticSearch
  • 结果数据存储:MySQL、ElasticSearch,PGSQL
  • BI:FineBI、PowerBI
  • 调度:DolphinScheduler、Oozie

1.简述spark和hive的区别,

其实Spark和Hive在大数据处理领域各有特点。

Spark是一个快速、通用的大数据处理引擎,由于基于内存计算,所以处理速度非常快,尤其适合实时处理和交互式查询而且它提供了丰富的API和库,支持多种数据处理任务,包括实时处理、批处理、机器学习等,具有高效的计算速度和灵活性,而Hive则是一个基于Hadoop的数据仓库工具,基于磁盘计算,处理速度相对较慢,但能够处理更大规模的数据集它使用HiveQL查询语言,将SQL转换为MapReduce任务进行处理,主要用于大规模数据的查询和分析,适用于批处理作业,对硬件要求较低,适合构建数据仓库。

总的来说,在实际场景中Spark在数据处理速度、灵活性和多样性上更具优势,适合需要快速响应和复杂处理的场景;而Hive则在稳定性和大规模数据处理能力上更胜一筹,适合构建数据仓库和进行离线分析。可以根据具体需求选择合适的工具。

2. 简述datax,flume.sqoop,kettle,的主要区别

DataX、Flume、Sqoop、Kettle在大数据处理领域各有特色,主要区别如下:

  1. DataX:DataX是一个异构数据源离线同步工具,专注于实现关系型数据库、HDFS、Hive、ODPS、HBase、FTP等异构数据源之间稳定高效的数据同步。它采用Framework+plugin架构,支持全内存操作,适合批量数据迁移和同步任务。
  2. Flume:Flume是一个分布式的、高可靠的、高可用的日志数据收集、聚合和传输系统,主要用于将大批量的不同数据源的日志数据收集、聚合并移动到数据中心(如HDFS)进行存储。它侧重于数据的实时采集和传输,适合日志数据的收集和处理。
  3. Sqoop:Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,可以将关系型数据库(如MySQL、Oracle)的数据导入到Hadoop(如HDFS、Hive)中,也可以将Hadoop中的数据导出到关系型数据库中。它底层使用MapReduce实现数据迁移,适合大数据量的批量处理。
  4. Kettle(现更名为Pentaho Data Integration):Kettle是一款开源的ETL工具,纯Java编写,支持多数据源和多种中间件。它提供图形化界面,支持拖拽操作,上手简单,适合数据抽取、清洗、转换和装载等ETL任务。Kettle拥有强大的数据转换和处理能力,并支持工作流控制。

综上所述,DataX、Flume、Sqoop、Kettle在数据处理领域各有侧重,分别适用于数据同步、日志收集、大数据迁移和ETL任务等不同场景。

3.简述数据库,数据仓库,数据集市,数据湖的区别

  • 1.数据库(Database)

  • 它是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

  • 通过DBMS(数据库管理系统)创建和管理,支持数据的增删改查操作,适用于日常业务处理。

  • 2.数据仓库(Data Warehouse)

    面向主题的、集成的、相对稳定的、反映历史变化的数据集合,通常用于支持企业决策分析。

    是一个专门用于长期存储历史数据并支持在线分析处理(OLAP)的系统。它是企业决策分析和业务报表等的重要支撑工具,通过集成来自多个数据源的数据,提供统一的数据视图。

  • 3.数据集市(Data Mart)

  • 它是一个用来存储特定业务部门或特定业务需求的数据的数据库,它是数据仓库的一个子集

  • 也被称为数据市场,它按照多维的方式进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据

  • 数据湖(Data Lake)

  • 用于存储、管理和分析大量原始数据的分布式平台,支持多种数据格式和存储类型。它允许用户以任意格式存储任意规模的数据,并进行实时处理和分析,适用于大数据分析和机器学习等场景。

  • 如果企业主要关注日常业务处理和在线查询,且数据量不是特别大,那么数据库可能是一个较好的选择。

  • 如果企业需要对企业级数据进行长期存储和分析,以支持决策制定,那么数据仓库可能更适合。

  • 如果企业中有特定业务部门对数据分析有特别需求,或者需要快速响应市场变化,那么数据集市可能是一个不错的选择。

  • 如果企业拥有大量原始、未加工的数据,并希望进行高级分析和机器学习,那么数据湖可能是最佳选择。

4.简述数据库的acid四大特性

数据事务是数据库管理系统中用于处理并发控制、保证数据一致性和可靠性的重要机制。它通过将多个数据库操作封装为一个不可分割的工作单元,并通过ACID属性来确保事务的原子性、一致性、隔离性和持久性。原子性确保事务不可分割,要么全部成功,要么完全回滚;一致性保证事务执行前后数据库状态一致,满足所有规则;隔离性让并发事务互不干扰,避免数据不一致;持久性则确保事务提交后,对数据库的修改永久保存,不因系统故障而丢失。这些特性共同保障了数据库系统的稳定性和可靠性。

5.简述OLAP和OLTP的区别

OLAP(联机分析处理)和OLTP(联机事务处理)是数据库管理系统中两种不同的数据处理方式

  1. 应用目的:OLAP主要用于复杂的分析操作,侧重决策支持;而OLTP主要用于基本的、日常的事务处理,如增、删、改、查等操作。
  2. 实时性要求:OLAP的实时性要求相对较低,数据更新频率不高;OLTP则对实时性要求高,需要快速处理事务。
  3. 数据量:OLAP处理的数据量大,支持动态查询;OLTP处理的数据量相对较小,但更新频繁。
  4. 数据库设计:OLAP采用星型或雪花模型,面向主题设计;OLTP则采用实体-联系(ER)模型,面向应用设计。
  5. 应用场景:OLAP主要用于企业级的决策支持和战略分析;OLTP则用于处理企业日常的业务操作,如银行交易、超市销售等。

6. 指标分类

在数据开发中,按数据维度分类,可以根据数据的不同维度对指标进行分类,如用户维度、产品维度、时间维度

比如我们项目中,

按时间维度分类

  1. 时点指标:反映某一特定时刻状态的指标,如库存量、在线用户数等。这些指标有助于了解某一时刻的静态情况。
  2. 时期指标:反映某一段时间内的累计总量或平均水平的指标,如月收入、月平均访问量等。这些指标有助于分析一段时间内的动态变化。

按性质或内容分类

  1. 数量指标:反映总体规模或数量的指标,如用户总数、订单量、销售额等。这些指标主要用于描述数据的绝对量,是数据分析的基础。
  2. 质量指标:反映效率、质量或效益的指标,如用户满意度、转化率、复购率等。这些指标帮助评估产品或服务的性能和效果,对于业务优化和提升有重要意义。

按统计范围分类

  1. 全局指标:反映整体情况的指标,如公司整体销售额、总用户数等。这些指标有助于把握全局趋势和整体表现。
  2. 局部指标:聚焦某一具体领域或部门的指标,如某个产品的销量、某个地区的用户活跃度等。这些指标有助于深入了解局部情况,发现具体问题。

7.简述下分布式和集群的区别?

复制代码
    集群和分布式,都是描述的一组计算机。集群的所有节点跑的是同样的任务,集群本质是多台服务器联合起来独立做相同的任务(多个服务器分担客户端发来的请求) 。而分布式系统的节点跑的是分解后的任务,分布式本质是多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)
    以修手机为例:维修手机要分为检测、维修、测试三个环节,当多部手机都需要维修的时候,为了提高效率,雇了10位工程师。如果每个工程师维修时,对每台手机进行检测、维修和测试,这就是集群的工作方式。如果2位工程师负责检测,5位工程师负责维修,剩下的3位工程师负责测试,这就是分布式的工作方式。

8.简述hadoop技术栈的组成?

复制代码
首先hadoop技术栈由HDFS , MapReduce ,YARN三大组件组成
其次三大组件核心知识如下:
    HDFS是(分布式文件系统),解决海量数据存储
        元数据是描述核心数据的数据
        NameNode是集群当中的主节点,主要用于管理集群当中的各种数据
        SecondaryNameNode是主要能用于辅助NameNode进行文件块元数据存储
        DataNode是集群当中的从节点,主要用于存储真实的海量的业务数据
    YARN是(作业调度和集群资源管理的框架),解决资源任务调度
        ResourceManager是接收用户的计算请求任务,并负责集群的资源管理和分配
        NodeManager是 负责执行主节点分配的任务(给MR的计算程序提供资源)
    MapReduce是(分布式运算编程框架),解决海量数据计算
        核心思想就是分而治之   Map负责分解,Reduce负责合并
最后概括下MapReduce计算需要的数据和产生的结果需要HDFS来进行存储,MapReduce的运行需要由Yarn集群来提供资源调度。

9. 请简述hive元数据服务配置的三种模式?**

复制代码
内嵌模式:
    优点: 配置简单 hive命令直接可以使用
    缺点: 不适用于生产环境,derby和Metastore服务都嵌入在主Hive Server进程中,一个服务只能被一个客户端连接(如果用两个客户端以上就非常浪费资源),且元数据不能共享
​
    
本地模式: 
    优点:可以单独使用外部的数据库(mysql),元数据共享
    缺点:相对浪费资源,metastore嵌入到了hive进程中,每启动一次hive服务,都内置启动了一个metastore。
    
远程模式:
    优点:可以单独使用外部库(mysql),可以共享元数据,本地可以连接metastore服务也可以连接hiveserver2服务,增加了扩展性(其他依赖hive的软件都可以通过Metastore访问hive)
    缺点:需要注意的是如果想要启动hiveserver2服务需要先启动metastore服务

10. 数据库和数据仓库的区别?

复制代码
    数据仓库与数据库的区别:实际讲的是OLTP与OLAP的区别,OLTP(On-Line Transaction Processin):叫联机事务处理,也可以称面向用户交易的处理系统,主要面向用户进行增删改查,OLAP(On-Line Analytical Processing):叫联机分析处理,一般针对某些主题的历史数据进行分析 主要面向分析,支持管理决策。
​
    数据仓库的出现,并不是要取代数据库,主要区别如下:数据库是面向事务的设计,数据仓库是面向主题设计的。数据库是为捕获数据而设计,数据仓库是为分析数据而设计.数据库一般存储业务数据,数据仓库存储的一般是历史数据。数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。

11.简述下数仓经典三层架构?

复制代码
    数据仓库是一个面向主题的、集成的、持久的(非易失的)、反映历史变化(随时间变化),用来支持管理人员决策的数据集合,按照数据流入流出的过程,数据仓库架构可分为三层------源数据层、数据仓库层、数据应用层。
​
    源数据层(ODS-Operational Data Store):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
​
    数据仓库层(DW-Data Warehouse):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
​
    数据应用层(DA-Data Application):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。

12.请简述内部表和外部表的区别?

复制代码
内部表: 
    内部表类型: MANAGED_TABLE
    未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,还可以叫托管表
    删除内部表:直接删除元数据(metadata)和存储数据本身
外部表: 
    外部表类型: EXTERNAL_TABLE
    被external关键字修饰的即是外部表, 即关联表。 还可以叫非管理表或非托管表
    删除外部表:仅仅是删除元数据(metadata),不会删除存储数据本身

13.请谈一下Hive的特点以及Hive和RDBMS有什么异同?

参考答案:

复制代码
    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql
查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现
简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析,但是Hive不支持实时
查询。

14.简述下分区表和分桶表的区别?

复制代码
    分区表
    创建表的时候使用关键字: partition by (分区字段名 分区字段类型)
    分区字段名注意事项: 是一个新的字段,需要指定类型,且不能和其他字段重名
    分区表好处: 使用分区字段作为条件的时候,底层直接找到对应的分区目录,能够避免全表扫描,提升查询效率
    分区表最直接的效果: 在hfds表目录下,分成多个分区目录(year=xxxx,month=xx,day=xx)
    不建议直接上传文件在hdfs表根路径下: 分区表直接不能识别对应文件中数据,因为分区表会找分区目录下的数据文件
    使用load方式加载hdfs中文件: 本质是移动文件到对应分区目录下
​
分桶表
    创建表的时候使用关键字: clustered by (分桶字段名) into 桶数量 buckets
    分桶字段名注意事项: 是指定一个已存在的字段,不需要指定类型
    分桶表好处: 使用分桶字段做抽样等特定操作的时候,也能提升性能效率
    分桶表最直接的效果: 在hdfs表目录或者分区目录下,分成多个分桶文件(000000_0,000001_0,000002_0...)
    不建议直接上传文件在hdfs表根路径下: 分桶表可以识别对应文件中数据,但是并没有分桶效果,也是不建议的
    使用load方式加载hdfs中文件: 本质是复制数据到各个分桶文件中

15.简述下行存储和列存储的区别?

参考答案:

复制代码
    行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
    列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
​
行存储: textfile和squencefile
    优点: 每行数据连续存储              select * from 表名; 查询速度相对较快
    缺点: 每列类型不一致,空间利用率不高   select 列名 from 表名; 查询速度相对较慢
列存储: orc和parquet
    优点: 每列数据连续存储         select 列名 from 表名;  查询速度相对较快
    缺点: 因为每行数据不是连续存储  select * from 表名;查询速度相对较慢
    
注意: ORC文件格式的数据, 默认内置一种压缩算法:zlib , 在实际生产中一般会将ORC压缩算法替换为 snappy使用,格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY") 

16.简述下hive的调优手段?

复制代码
Hive数据压缩
Hive数据存储格式
fetch抓取策略
本地模式
join优化操作
SQL优化(列裁剪,分区裁剪,map端聚合,count(distinct),笛卡尔积)
动态分区
MapReduce并行度调整
并行执行严格模式   
JVM重用
推测执行
执行计划explain

17.简述下apache hadoop3.x中HDFS写入数据原理?

参考答案:

复制代码
1.客户端发起写入数据的请求给namenode
2.namenode接收到客户端请求,开始校验(是否有权限,路径是否存在,文件是否存在等),如果校验没问题,就告知客户端可以写入
3.客户端收到消息,开始把文件数据分割成默认的128m大小的的block块,并且把block块数据拆分成64kb的packet数据包,放入传输序列
​
4.客户端携带block块信息再次向namenode发送请求,获取能够存储block块数据的datanode列表
5.namenode查看当前距离上传位置较近且不忙的datanode,放入列表中返回给客户端
6.客户端连接datanode,开始发送packet数据包,第一个datanode接收完后就给客户端ack应答(客户端就可以传入下一个packet数据包),同时第一个datanode开始复制刚才接收到的数据包给node2,node2接收到数据包也复制给node3(复制成功也需要返回ack应答),最终建立了pipeline传输通道以及ack应答通道
7.其他packet数据根据第一个packet数据包经过的传输通道和应答通道,循环传入packet,直到当前block块数据传输完成(存储了block信息的datanode需要把已经存储的块信息定期的同步给namenode)
​
8.其他block块数据存储,循环执行上述4-7步,直到所有block块传输完成,意味着文件数据被写入成功(namenode把该文件的元数据保存上)
9.最后客户端和namenode互相确认文件数据已经保存完成(也会汇报不能使用的datanode)
​
注意: 不要死记硬背,要结合自己的理解,转换为自己的话术,用于面试

18.简述apache hadoop3.x中HDFS读取数据原理?

参考答案:

复制代码
1.客户端发送读取文件请求给namenode
​
2.namdnode接收到请求,然后进行一系列校验(路径是否存在,文件是否存在,是否有权限等),如果没有问题,就告知可以读取
3.客户端需要再次和namenode确认当前文件在哪些datanode中存储
4.namenode查看当前距离下载位置较近且不忙的datanode,放入列表中返回给客户端
​
5.客户端找到最近的datanode开始读取文件对应的block块信息(每次传输是以64kb的packet数据包),放到内存缓冲区中
6.接着读取其他block块信息,循环上述3-5步,直到所有block块读取完毕(根据块编号拼接成完整数据)
7.最后从内存缓冲区把数据通过流写入到目标文件中
​
8.最后客户端和namenode互相确认文件数据已经读取完成(也会汇报不能使用的datanode)
​
注意: 不要死记硬背,要结合自己的理解,转换为自己的话术,用于面试

19.请简述 apache hadoop3.x关于MR中MapTask的工作流程机制

参考答案:

复制代码
1) 第一阶段是把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划,默认情况下Split size 等于 Block size。每一个切片由一个MapTask处理(当然也可以通过参数单独修改split大小)     
​
2) 第二阶段是对切片中的数据按照一定的规则解析成对。默认规则是把每一行文本内容解析成键值对。key是每一行的起始位置(单位是字节),value是本行的文本内容。  
​
3) 第三阶段是调用Mapper类中的map方法。上阶段中每解析出来的一个,调用一次map方法。每次调用map方法会输出零个或多个键值对  
​
4) 第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。默认是只有一个区。分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务   
​
5) 第五阶段是对每个分区中的键值对进行排序。首先,按照键进行排序,对于键相同的键值对,按照值进行排序。比如三个键值对<2,2>、<1,3>、<2,1>,键和值分别是整数。那么排序后的结果是<1,3>、<2,1>、<2,2>。如果有第六阶段,那么进入第六阶段;如果没有,直接输出到文件中
​
6) 第六阶段是对数据进行局部聚合处理,也就是combiner处理。键相等的键值对会调用一次reduce方法。经过这一阶段,数据量会减少。本阶段默认是没有的。  
​
注意: 不要死记硬背,要结合自己的理解,转换为自己的话术,用于面试

20.请简述YARN提交mr任务流程?

参考答案:

复制代码
1.客户端提交一个MR程序给ResourceManager(校验请求是否合法...)
​
2.如果请求合法,ResourceManager随机选择一个NodeManager用于生成appmaster(应用程序控制者,每个应用程序都单独有一个appmaster)
3.appmaster会主动向ResourceManager的应用管理器(application manager)注册自己,告知自己的状态信息,并且保持心跳
4.appmaster会根据任务情况计算自己所需要的container资源(cpu,内存...),主动向ResourceManager的资源调度器(resource scheduler)申请并获取这些container资源
​
5.appmaster获取到container资源后,把对应指令和container分发给其他NodeManager,让NodeManager启动task任务(maptask任务,reducetask任务)
6.NodeManager要和appmaster保持心跳,把自己任务计算进度和状态信息等同步给appmaster,(注意当maptask任务完成后会通知appmaster,appmaster接到消息后会通知reducetask去maptask那儿拉取数据)直到最后任务完成
​
7.appmaster会主动向ResourceManager注销自己(告知ResourceManager可以把自己的资源进行回收了,回收后自己就销毁了)
​

21.请简述ZooKeeper的watch监听机制?

参考答案:

复制代码
watch监听机制过程: 客户端向服务端注册Watcher     服务端事件发生触发Watcher     客户端回调Watcher得到触发事件情况
Watch监听机制注册格式:  get /节点绝对路径 watch
Watch监听机制特点:
    先注册再触发: Zookeeper中的watch机制,必须客户端先去服务端注册监听,这样事件发送才会触发监听,通知给客户端
    一次性触发: 事件发生触发监听,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的事件,不会再次触发。
    异步发送: watcher的通知事件从服务端发送到客户端是异步的。
    通知内容: 通知状态(keeperState),事件类型(EventType)和节点路径(path)

22.简述下集群选举中用到的ZK知识点以及对应选举流程 ?

参考答案:

复制代码
在分布式环境下,不管是主从架构集群,还是主备架构集群,要求在服务的时候有且有一个正常的对外提供服务,我们称之为master。
当master出现故障之后,需要重新选举出的新的master。保证服务的连续可用性。zookeeper可以提供这样的功能服务。
主要用到知识点: znode唯一性、临时节点短暂性、监听机制。
​
选举要求: 过半原则,所以搭建集群一般奇数,只要某个node节点票数过半立刻成为leader
集群第一次启动: 启动follower每次投票后,他们会相互同步投票情况,如果票数相同,谁的myid大,谁就当选leader,一旦确定了leader,后面来的默认就是follower,即使它的myid大,leader也不会改变(除非leader宕机了)
leader宕机后启动: 每一个leader当老大的时候,都会产生新纪元epoch,且每次操作完节点数据都会更新事务id(高32位_低32位) ,当leader宕机后,剩下的follower就会综合考虑几个因素选出最新的leader,先比较最后一次更新数据事务id(高32位_低32位),谁的事务id最大,谁就当选leader,如果更新数据的事务id都相同的情况下,就需要再次考虑myid,谁的myid大,谁就当选leader

23.简述一下电商数仓中处理半结构化和结构化数据时使用到的函数。

复制代码
在电商数仓中处理半结构化和结构化数据时,会使用到多种函数来满足不同的数据处理需求。以下是对这些函数的详细分类和说明:

一、处理结构化数据时使用的函数
结构化数据通常存储在关系型数据库中,如Hive等,处理这类数据时常用的函数包括:

字符串处理函数
concat:连接两个或多个字符串。如果任一字符串为NULL,则返回NULL。
concat_ws:使用指定的分隔符连接两个或多个字符串。与concat不同,只要有一个字符串不是NULL,就不会返回NULL。
STR_TO_MAP:将字符串按照指定的分隔符转换成Map类型,常用于将K-V格式的字符串转换为Map以方便后续处理。
集合处理函数
collect_set:将分组中的不同元素聚合成一个集合(Set),自动去除重复元素。
空值处理函数
nvl:如果表达式1为空值,则返回表达式2的值;否则返回表达式1的值。常用于空值填充。
日期处理函数
date_format:根据指定的格式整理日期。
date_add:在日期上加上或减去指定的天数。
next_day:返回指定日期之后的第一个星期几的日期。
last_day:返回指定日期所在月份的最后一天。
二、处理半结构化数据时使用的函数
半结构化数据,如JSON格式的数据,在电商数仓中也越来越常见。处理这类数据时,通常会使用到支持JSON解析的函数:

JSON解析函数
在Hive中,可以使用get_json_object函数来从JSON字符串中提取指定路径的JSON对象或数组,并将其作为字符串返回。例如:get_json_object(json_data, '$.key')。
在更高级的数据仓库系统中,如Hologres,可能直接支持JSON类型,并提供更丰富的JSON处理函数,如JSONB相关的函数,用于加速JSON数据的查询和存储。
自定义函数(UDF)
当内置的JSON处理函数无法满足特定需求时,可以编写自定义函数(UDF)来处理复杂的JSON数据。UDF允许用户根据自己的需求实现特定的数据处理逻辑。
三、总结
在电商数仓中处理半结构化和结构化数据时,会根据数据的具体格式和需求选择合适的函数。对于结构化数据,主要使用字符串处理、集合处理、空值处理和日期处理等函数;对于半结构化数据,则主要使用JSON解析函数和自定义函数。同时,随着技术的发展,数据仓库系统也在不断迭代更新,提供更多高效、便捷的数据处理函数和工具。

24.简述Linux命令的vim是什么 如果我在vim里面查看文件,需要快速查看某一行,怎么使用命令

vim 是一文本编辑器,是 vi 编辑器的增强版,提供了更多的功能和更强大的文本处理能力。

vim 中,命令行模式下通过行号加 G 命令(或者ex模式下或 :行号G)是快速跳转到特定行

25. 项目技术栈问题,

这个题可以基于简历项目中技术栈进行准备。

1.4.1 Presto是什么?为什么使用它?
复制代码
    Presto是facebook开源的分布式SQL查询引擎,因为它是基于内存运算,相较于Hive查询速度快得多。因为本次项目用的是Hive进行数据开发,Hive要走MR任务分析数据慢,因此在项目中引入Presto用于快速测试SQL代码是否符合需求。
    
趣闻: presto由facebook维护,其开发团队独立开发了另一款类似软件Trino。
1.4.2 PostgreSQL是什么,为什么使用它?
复制代码
    PostgreSQL是功能强大的关系型数据库,支持多种查询语言,并具有约束和索引。选用它作为指标结果库主要是考虑到BI人员能快速从指定数据库中查询到数据。为什么不选用Mysql,这是项目经理决定的。
1.4.3 介绍下DataX和Sqoop的区别
复制代码
    DataX是阿里巴巴开源的一个离线数据源同步框架,采用Framework+Plugin架构构建。它本身是一个星型数据链路结构,通过构建Reader数据采集模块、Writer数据写入模块、FrameWork组成的数据传输通道,实现各种数据源之间的数据同步。

26.数仓中的广播变量

是一种用于高效分发较大对象的技术手段,简单来说,它就像是一个公共的、只读的共享变量。在分布式计算环境中,如果一个变量(如字典、集合、黑白名单等)需要被多个节点或任务频繁访问,使用广播变量可以将其广播到每个节点上,每个节点上只存储一份副本,从而避免重复传输和节省网络带宽。这样,每个节点在需要时可以直接从本地内存中读取该变量的值,提高了计算效率。同时,由于广播变量是只读的,确保了数据的一致性和安全性。

综上所述,数仓中广播变量的使用场景主要集中在需要频繁访问大对象、减少网络IO开销、优化内存使用和提高计算效率的分布式计算任务中。通过合理地使用广播变量,可以显著提升数据仓库的性能和效率。

相关推荐
汤姆yu18 分钟前
基于python大数据的旅游可视化及推荐系统
大数据·旅游·可视化·算法推荐
zhangjin122233 分钟前
kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
大数据·数据仓库·mysql·etl·kettle实战·kettlel批量插入·kettle mysql
哈哈真棒1 小时前
hadoop 集群的常用命令
大数据
阿里云大数据AI技术1 小时前
百观科技基于阿里云 EMR 的数据湖实践分享
大数据·数据库
泛微OA办公系统2 小时前
上市电子制造企业如何实现合规的质量文件管理?
大数据·制造
镜舟科技2 小时前
迈向云原生:理想汽车 OLAP 引擎变革之路
大数据·数据库·云原生
山山而川粤2 小时前
SSM考研信息查询系统
java·大数据·运维·服务器·开发语言·数据库·考研
rkshangan4 小时前
软考高级:探寻易考科目与高效备考之路
大数据·网络
FLGB4 小时前
Kafka延迟队列实现分级重试
分布式·kafka
莹雨潇潇6 小时前
大数据时代的隐私与自由(演讲稿)
大数据