大数据开发需要知道的-面试(2023)

目录

前言

数据的采集和存储

数据的分析和处理

数据可视化

数据安全性


前言

大数据体系从业务处理的角度看,可以分为一下几个层面:

  1. 数据采集和存储:这个阶段主要涉及数据的采集、传输和存储。常见的数据采集方式包括:日志收集、传感器数据、社交媒体数据等。数据存储技术包括传统的关系型数据库,以及更适合大数据的 NoSQL 数据库和分布式文件系统,如 Hadoop HDFS、Apache Cassandra、MongoDB 等。

  2. 数据处理和分析:这个阶段主要用于对采集到的数据进行处理和分析。常见的大数据处理框架包括 Apache Hadoop、Apache Spark、Apache Storm 等。这些框架可以帮助处理大量的数据,并提供一些高级分析功能,如机器学习、图像处理、自然语言处理等。

  3. 数据可视化和呈现:这个阶段主要涉及如何将处理后的数据可视化呈现给用户,以便于用户理解和分析数据。常见的数据可视化工具包括 Tableau、QlikView、Power BI 等。

  4. 数据安全和隐私:大数据体系中的数据安全和隐私是非常重要的。在大数据处理过程中,需要采取一些措施来确保数据的保密性、完整性和可用性,以及遵守相关的法规和规定。常见的数据安全和隐私技术包括数据加密、访问控制、数据备份和恢复等。

针对上面业务层面的维度,下面是一些大数据开发过程中经常会问到的问题:

数据的采集和存储

Q:HDFS的读写流程是怎么样的呢?

读流程:

1)客户端通过HDFS向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位来做校验)。

4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。

写流程:

1)Client将FileA按128M分块。分成两块,block1和Block2;

2)Client向nameNode发送写数据请求,如图蓝色虚线①------>。

3)NameNode节点,记录block信息。并返回可用的DataNode,如粉色虚线②--------->。

Block1: host2,host1,host6

Block2: host7,host3,host4

4)client向DataNode发送block1;发送过程是以流式写入。

Q:HDFS的数据文件备份策略?

数据文件默认在HDFS上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份, 不同机架的某一节点上一份

Q:mapreduce的工作原理是什么?

MapReduce 模型由两个主要的阶段组成:Map 和 Reduce。Map 阶段首先将输入数据划分为多个数据块,然后对每个数据块并行执行 Map 函数。Map 函数通常接收一条记录,并将其转换为(key,value)对,其中 key 是要传递给 Reduce 函数的键,value 是对应的值。Map 函数的输出结果被分组成多个集合,每个集合对应一个唯一的键值。Reduce 阶段接收 Map 阶段的输出结果作为输入,并对所有具有相同键的值进行合并和聚合。Reduce 函数通常接收一个键和一个值列表,并将值列表中的所有值合并成一个或多个输出值。Reduce 函数的输出是最终结果,它将被写入到文件系统或传递给其他应用程序进行处理。

Q:namenode 和datanode有什么区别?

NameNode 用于维护整个文件系统的命名空间和文件系统的元数据。

Datanode用于存储 HDFS 中的数据块

Q:hive中外部表和内部表的区别?

内部表数据由Hive自身管理,外部表数据由HDFS管理;

删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

Q:Secondary NameNode了解吗,它的工作机制是怎样的?
Secondary NameNode是合并NameNode的edit logs到fsimage文件中的。

Q:NAMENODE高可用指的是什么?它的实现机制是什么?

那就配置双NameNode,配置有两个关键点,一是必须要保证这两个NameNode的元数据信息必须要同步的,二是一个NameNode挂掉之后另一个要立马补上。元数据信息同步在 HA 方案中采用的是“共享存储”

Q:MR中的shuffl是指什么?

shuffle 是指将 Map 阶段输出的中间结果按照键进行排序和分组,然后传递给 Reduce 阶段的过程。

  1. Partition:根据键的哈希值将中间结果分发到对应的 Reduce 任务上。

  2. Sort:在每个 Reduce 任务内部,对分配到该任务的中间结果进行排序,以便 Reduce 函数能够按照键的顺序进行迭代。

  3. Group:将排序后的中间结果按照键进行分组,每个键对应一个迭代器,Reduce 函数对每个键对应的迭代器进行迭代,并对其中的值进行聚合操作。

Q:简答说一下yarn框架

YARN的基本设计思想是将MapReduce 中的JobTracker拆分为两个独立的服务:ResourceManager和ApplicationMaster。ResourceManager负责整个系统的资源管理和分配,ApplicationMaster负责单个应用程序的的管理。

Q: 数据建模用的哪些模型?

星型模型:星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。星形模式的维度建模由一个事实表和一组维表成。

雪花模型:雪花模式的维度表可以拥有其他维度表的。

星座模型:星座模式是基于多张事实表的,而且共享维度信息

Q:为什么要对数据仓库分层?

  • 用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据。如果不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。
  • 通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

Q:

数据的分析和处理

Q:spark的数据倾斜指的是什么?如何解决?

数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于 其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈。

Q:如何定位数据倾斜?

  1. 查看任务执行日志:
    通过分析任务日志,可以定位某些任务执行时间明显长于其他任务的情况,这可能是由于数据倾斜导致的。可以通过将任务日志与数据分布图表结合起来,找出哪些分区的数据量过大,从而确定倾斜的原因。

  2. 使用 Spark 监控工具:
    Spark 提供了一些监控工具,如 Spark UI 和 Spark History Server,可以帮助开发人员了解作业的执行情况。

  3. 使用 Spark 内置工具:
    Spark 提供了一些内置工具,如 Spark SQL 的数据分析功能和 Spark Streaming 的窗口聚合功能,可以帮助开发人员识别和处理数据倾斜。

  4. 使用第三方工具:
    除了 Spark 提供的工具之外,还有一些第三方工具可以帮助开发人员识别和解决数据倾斜问题。

Q:如何解决?

  1. 重新分区:
    重新分区是解决数据倾斜问题的一种简单有效的方法。可以使用 Spark 的 repartition() 或 coalesce() 方法来重新分区数据,从而平均分配数据量。

  2. 使用随机前缀:
    随机前缀是一种常用的解决数据倾斜问题的方法。可以在 Map 阶段中为键添加一个随机前缀,将数据随机分配到多个分区中。

  3. 使用聚合操作:
    聚合操作是一种可以处理数据倾斜问题的方法。可以使用 Spark SQL 的聚合函数来计算每个键的数据量,并根据数据量调整分区数。

  4. 使用外部工具:
    除了 Spark 提供的工具之外,还可以使用一些外部工具来处理数据倾斜问题。例如,可以使用 Hadoop 的 Combiner 函数或 MapReduce 的 Partitioner 函数来平衡数据分布。同时,可以使用 Hive 或 Pig 等工具来处理数据倾斜问题。

Q:什么是rdd的宽依赖和窄依赖?

当一个 RDD 的每个分区只依赖于另一个 RDD 的一个或多个分区时,就称为窄依赖。窄依赖的多个分区可以并行计算。

当一个 RDD 的每个分区依赖于另一个 RDD 的多个分区时,就称为宽依赖。必须等到上一阶段计算完成才能计算下一阶段。

Q:spark的运行流程是怎么样的?

 Q:Spark 中的 RDD 机制理解吗? 

RDD 是 spark 提供的核心抽象,全称为弹性分布式数据集。RDD 在逻辑上是一个 hdfs 文件,在抽象上是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同结点上,从而让 RDD 中的数据可以被并行操作(分布式数据集)

Q:spark有哪些组件?

  • master:管理集群和节点,不参与计算。
  • worker:计算节点,进程本身不参与计算,和 master 汇报。
  • Driver:运行程序的 main 方法,创建 spark context 对象。
  • spark context:控制整个 application 的生命周期,包括 dagsheduler 和 task scheduler 等组件。
  • client:用户提交程序的入口。

Q:spark的怎么修改默认任务数量?

针对 spark sql 的 task 数量:spark.sql.shuffle.partitions=50

非 spark sql 程序设置生效:spark.default.parallelism=1

Q:spark join的优化经验是什么?

join 操作是常用的数据转换操作之一,用于将两个 RDD 或 DataFrame 中的数据按照某些键进行连接。由于 join 操作需要进行数据的 shuffle 和排序,因此在大数据集上执行 join 操作时,容易出现性能问题。以下是一些 join 操作优化的经验:

  1. 使用 Broadcast 变量:
    如果其中一个 RDD 或 DataFrame 的大小比较小,可以将其转换成 Broadcast 变量,然后将其广播到所有节点上。这样,节点就可以直接访问广播变量,而不需要进行网络传输,从而减少数据的传输量和网络开销。

  2. 调整分区数:
    在执行 join 操作之前,可以通过调整 RDD 或 DataFrame 的分区数来优化性能。如果两个 RDD 或 DataFrame 的分区数相差较大,可以使用 coalesce() 或 repartition() 方法来将其分区数调整为相同的值,以提高 join 操作的效率。

  3. 使用 Sort-Merge Join:
    在 Spark 中,join 操作有两种实现方式,即 Shuffle Hash Join 和 Sort-Merge Join。Shuffle Hash Join 是默认实现方式,它需要进行数据的 shuffle 和排序,因此开销较大。而 Sort-Merge Join 则不需要进行数据的 shuffle 和排序,而是直接对两个 RDD 或 DataFrame 进行排序,然后进行连接操作。因此,如果数据集较大且需要进行多次 join 操作,可以考虑使用 Sort-Merge Join 来优化性能。

  4. 使用 Bucket Join:
    Bucket Join 是一种高效的 join 操作实现方式,它将数据按照相同的键分到不同的桶中,然后对每个桶进行 join 操作。由于相同键的数据在同一个桶中,因此可以减少 shuffle 的开销。在 Spark 中,可以使用 bucketBy() 和 sortByBucket() 方法来实现 Bucket Join。

Q:Hadoop 和 Spark 的相同点和不同点?

相同点:

  1. 都是分布式计算框架,用于处理大规模数据集。
  2. 都可以在集群中运行,利用集群中的多台机器来处理任务。
  3. 都支持并行计算,能够将一个任务分成多个子任务并行执行。
  4. 都支持数据的持久化和存储,能够处理多种数据格式。

不同点:

  1. 数据处理模型不同:Hadoop 使用 MapReduce 模型,将数据处理任务分为 Map 和 Reduce 两个阶段;而 Spark 支持多种数据处理模型,包括 MapReduce、SQL、流处理、机器学习等。
  2. 计算速度不同:Spark 的计算速度比 Hadoop 快,这是因为 Spark 将数据存放在内存中,能够充分利用内存计算,而 Hadoop 则将数据存放在磁盘中,计算速度相对较慢。
  3. 数据处理效率不同:Spark 在数据处理效率方面比 Hadoop 更高效,因为 Spark 支持内存计算和数据缓存等技术,能够减少数据的读写和网络传输开销。
  4. 数据处理范围不同:Hadoop 更适合处理大规模批量数据,而 Spark 更适合处理实时数据流和交互式数据分析。
  5. 编程模型不同:Hadoop 使用 Java 和 MapReduce 编程模型,而 Spark 支持多种编程语言和编程模型,包括 Java、Scala、Python 和 R 等。

Q:Hadoop 和 Spark 使用场景?

Hadoop 的主要使用场景包括:

  1. 批量数据处理:Hadoop 的 MapReduce 模型适合处理大规模批量数据,能够进行离线数据处理、数据清洗和数据分析等任务。
  2. 分布式存储:Hadoop 的 HDFS 分布式文件系统能够存储海量数据,保证数据的可靠性和高可用性。
  3. 日志分析:Hadoop 可以处理大量的日志数据,进行日志分析、异常检测和问题排查等任务。
  4. 数据仓库:Hadoop 的 HBase、Hive 等组件可以用于构建大规模的数据仓库,支持数据的查询、分析和挖掘等。

Spark 的主要使用场景包括:

  1. 实时数据处理:Spark 的流处理模块可以处理实时数据流,支持流式计算和实时分析。
  2. 交互式数据分析:Spark 的 SQL 模块和 DataFrame API 可以进行交互式数据分析,支持 SQL 查询和数据可视化等。
  3. 机器学习:Spark 的 MLlib 模块支持机器学习算法,能够进行数据挖掘和模型训练等任务。
  4. 图计算:Spark 的 GraphX 模块支持图计算,能够进行社交网络分析和图形处理等任务。

Q:RDD持久化的原理?

  1. DD 的计算过程是惰性的,只有当需要计算 RDD 的数据时才会触发计算。计

  2. 在执行计算过程中,Spark 会将 RDD 的数据进行序列化,然后将其存储在内存或磁盘上。可以通过调用 persist() 或 cache() 方法来实现 RDD 的持久化。

  3. Spark 支持多种持久化级别

  4. 当 RDD 的数据被持久化后,如果需要重新计算 RDD 的数据,Spark 会优先使用持久化的数据进行计算,从而避免重新计算 RDD 的数据,提高计算效率。

Q:Spark Streaming 以及基本工作原理?

Spark streaming 可以用于进行大规模、高吞吐量、容错的实时数据流的处理。实时输入数据流,然后将数据拆分成 batch,比如每收集一秒的数据封装成一个 batch,然后将每个 batch 交给 spark 的计算引擎进行处理,最后会生产处一个结果数据流,其中的数据也是一个一个的 batch 组成的。

Q: Spark 解决了 Hadoop 的哪些问题?

  1. 计算速度:Hadoop 使用 MapReduce 模型进行数据处理,将数据存储在磁盘上,计算速度较慢。而 Spark 使用内存计算和数据缓存技术,能够充分利用内存计算,提高计算速度。

  2. 数据处理模型:Hadoop 的 MapReduce 模型只适用于批量数据处理,不适合实时数据处理和交互式数据分析。而 Spark 支持多种数据处理模型,包括批量处理、流处理、SQL 查询、机器学习等,可以满足不同数据处理需求。

  3. 编程模型:Hadoop 只支持 Java 编程语言和 MapReduce 编程模型,开发难度较大,而 Spark 支持多种编程语言和编程模型,包括 Java、Scala、Python 和 R 等,开发灵活度更高。

  4. 数据持久化:Hadoop 的数据持久化只能采用磁盘存储,读写效率较低。而 Spark 支持将数据缓存在内存中,可以提高数据读写效率。

  5. 多种数据源支持:Spark 支持多种数据源的读写,包括 HDFS、Hive、JDBC、Cassandra 等,方便数据的处理和分析。

Q:用 Spark Sql 处理的时候, 处理过程中用的 DataFrame 还是直接写的 Sql?为什么

对于复杂的数据处理操作,推荐使用DataFrame API,可以获得更好的性能和可扩展性;对于简单的数据处理操作,可以使用SQL语句,代码量更少,更加简单明了。

Q:简单介绍一下Flink?

Flink是一个面向流处理批处理的分布式数据计算引擎,能够基于同一个Flink运行,可以提供流处理和批处理两种类型的功能

Q:Kafka了解吗?

Kafka是一个分布式的流处理平台,最它是一个高性能、可扩展、可靠和可持久化的消息队列系统,可以用于实时数据的收集、存储和处理。

数据可视化

待续.......

数据安全性

待续.......

猜你喜欢

转载自blog.csdn.net/m0_56022510/article/details/130028335