慕mooc-大数据工程师2024学习分享

2024-07-15 23:01:00 浏览数 (2)

Apache Spark 是一个开源的统一分析引擎,用于大规模数据处理。它提供了一个简单且富有表现力的编程模型,支持多种语言,包括 Java、Scala、Python 和 R。Spark 的速度比 Hadoop MapReduce 快 100 倍,因为它在内存中执行计算,并优化了数据在集群中的移动方式。

Spark 核心概念

  • RDD (Resilient Distributed Dataset,弹性分布式数据集): Spark 的核心抽象,表示一个不可变的、分区的数据集,可以并行操作。RDD 可以从外部数据源(如 HDFS、本地文件系统、数据库等)创建,也可以通过转换其他 RDD 创建。
  • Transformation (转换): 对 RDD 进行的操作,例如 map、filter、reduceByKey 等。Transformation 是惰性求值的,只有在 Action 操作被触发时才会真正执行。
  • Action (动作): 触发 RDD 计算的操作,例如 count、collect、saveAsTextFile 等。Action 会提交 Spark 作业并返回结果。
  • Driver Program: Spark 应用程序的控制程序,负责创建 SparkContext、提交 Spark 作业以及收集结果。
  • Cluster Manager: 负责管理和分配集群资源,例如 Yarn、Mesos、Standalone 等。
  • Executor: 运行在 Worker 节点上的进程,负责执行 Driver Program 发送的任务。
  • Stage (阶段): Spark 作业被划分为多个阶段,每个阶段包含一组可以并行执行的任务。
  • Task (任务): Spark 作业的最小执行单元,每个任务处理 RDD 的一个分区。

Spark 工作流

  1. 用户编写 Spark 应用程序 (Driver Program)。
  2. Driver Program 连接到 Cluster Manager,请求资源。
  3. Cluster Manager 分配资源,启动 Executor 进程。
  4. Driver Program 将 Spark 作业转换为 DAG (Directed Acyclic Graph,有向无环图)。
  5. DAG 被划分为多个 Stage,每个 Stage 包含一组可以并行执行的任务。
  6. Executor 执行任务,并将结果返回给 Driver Program。
  7. Driver Program 收集所有结果并返回给用户。

大数据工程师2024-Spark应用

代码语言:python代码运行次数:0复制
from pyspark.sql import SparkSession

# 初始化 SparkSession
spark = SparkSession.builder 
    .appName("Spark数据处理示例") 
    .getOrCreate()

# 读取数据
data = [("Alice", 25), ("Bob", 30), ("Charlie", 28)]
df = spark.createDataFrame(data, ["name", "age"])

# 数据处理
# 1. 使用filter过滤年龄大于28岁的数据
df_filtered = df.filter(df.age > 28)

# 2. 使用groupBy分组统计每个年龄的人数
df_grouped = df.groupBy("age").count()

# 3. 使用join连接两个DataFrame
data2 = [("Alice", "female"), ("Bob", "male"), ("David", "male")]
df2 = spark.createDataFrame(data2, ["name", "gender"])
df_joined = df.join(df2, on="name", how="inner")

# 显示结果
df_filtered.show()
df_grouped.show()
df_joined.show()

# 停止 SparkSession
spark.stop()
  1. 初始化 SparkSession: 创建 SparkSession 是 Spark 应用的入口,这里我们设置应用名为 "Spark数据处理示例"。
  2. 读取数据: 使用 spark.createDataFrame 从 Python 列表创建 DataFrame,DataFrame 是 Spark 中的数据抽象,类似于关系型数据库中的表。
  3. 数据处理:
    • 使用 filter 过滤年龄大于 28 岁的数据。
    • 使用 groupBy 按年龄分组,并使用 count 统计每组人数。
    • 使用 join 将两个 DataFrame 按照姓名进行内连接。
  4. 显示结果: 使用 show() 方法展示处理后的 DataFrame 内容。
  5. 停止 SparkSession: 使用 spark.stop() 停止 SparkSession,释放资源。
代码语言:bash复制
spark-submit spark_data_processing.py
代码语言:bash复制
 ------ --- 
|  name|age|
 ------ --- 
|   Bob| 30|
 ------ --- 

 --- ----- 
|age|count|
 --- ----- 
| 25|    1|
| 30|    1|
| 28|    1|
 --- ----- 

 ------ --- ------ 
|  name|age|gender|
 ------ --- ------ 
|   Bob| 30|  male|
|Alice| 25|female|
 ------ --- ------ 

大数据工程师2024-数仓整体架构设计

1. 数仓概念

数据仓库 (Data Warehouse) 是一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持管理决策。

  • 面向主题: 数据以主题组织,例如客户、产品、销售等。
  • 集成: 来自不同数据源的数据被整合到一起。
  • 随时间变化: 数据存储历史数据和当前数据。
  • 非易失: 数据一旦加载到数据仓库中就不会被删除或修改。

2. 数仓架构

2.1. 传统数仓架构

  • ODS 层 (Operation Data Store,操作数据存储层): 存储来自业务系统的原始数据,通常以增量方式加载。
  • DWD 层 (Data Warehouse Detail,数据仓库明细层): 对 ODS 层数据进行清洗、转换、去重等操作,提供更干净、更规范的数据。
  • DWS 层 (Data Warehouse Service,数据仓库服务层): 对 DWD 层数据进行轻度汇总,为不同的业务主题提供服务。
  • ADS 层 (Application Data Service,应用数据服务层): 存储面向特定业务场景的数据,例如报表、仪表盘等。

2.2. 现代数仓架构

随着大数据技术的兴起,现代数仓架构更加灵活和可扩展,例如:

  • 湖仓一体 (Lakehouse): 将数据湖的灵活性和数据仓库的结构化特性结合起来。
  • 数据中台: 提供数据采集、存储、加工、分析和服务等全链路能力。

3. 数仓建设流程

  1. 需求分析: 明确业务需求和数据需求。
  2. 架构设计: 设计数仓架构、数据模型和 ETL 流程。
  3. 数据采集: 从各个数据源采集数据到数据仓库。
  4. 数据存储: 选择合适的存储引擎存储数据,例如 Hadoop、Hive、HBase 等。
  5. 数据处理: 使用 ETL 工具对数据进行清洗、转换、加载等操作。
  6. 数据分析: 使用 BI 工具或机器学习算法对数据进行分析。
  7. 数据可视化: 使用报表、仪表盘等方式展示数据分析结果。

4. 数仓关键技术

  • 数据建模: 设计数据仓库的数据模型,例如星型模型、雪花模型等。
  • ETL 工具: 使用 ETL 工具进行数据抽取、转换和加载,例如 Sqoop、DataX、Spark 等。
  • 数据存储: 选择合适的存储引擎存储数据,例如 Hadoop、Hive、HBase、Kudu 等。
  • 数据分析: 使用 SQL、HiveQL、Spark SQL 等工具进行数据分析。
  • 数据可视化: 使用 Tableau、Power BI、Superset 等工具进行数据可视化。

5. 数仓最佳实践

  • 数据质量管理: 建立数据质量监控机制,确保数据准确性和一致性。
  • 元数据管理: 建立元数据管理系统,管理数据仓库的元数据信息。
  • 数据安全: 实施数据安全策略,保护数据仓库中的敏感数据。

0 人点赞