大数据开发高频面试题:(第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开销、优化内存使用和提高计算效率的分布式计算任务中。通过合理地使用广播变量,可以显著提升数据仓库的性能和效率。

  • 48
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据飞总

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值