【Apache Spark】(一)

简介: 【Apache Spark】

Apache Spark的安装与配置

以下是安装和配置 Apache Spark 的安装与配置的命令:

  1. 下载 Apache Spark:
wget https://archive.apache.org/dist/spark/spark-3.2.0/spark-3.2.0-bin-hadoop3.2.tgz
tar -xf spark-3.2.0-bin-hadoop3.2.tgz
  1. 安装 Java:请确保您的系统中已安装 Java 8 或更高版本。
  2. 解压 Spark:将 Spark 文件解压到您想安装的文件夹中。
  3. 环境变量设置:
export PATH=$PATH:/path/to/spark/bin

将 /path/to/spark 替换为 Spark 解压后的文件夹路径。

  1. Spark 配置:
cd /path/to/spark/conf
cp spark-env.sh.template spark-env.sh
vi spark-env.sh

将 SPARK_HOME 设置为 Spark 安装文件夹的路径,并根据需要进行其他配置,例如:

export SPARK_HOME=/path/to/spark
export JAVA_HOME=/path/to/java
export PYSPARK_PYTHON=/path/to/python
  1. 启动 Spark:
cd /path/to/spark
./bin/spark-shell

启动 Spark shell,即可开始使用 Apache Spark。

Apache Spark用法

Apache Spark是一个基于内存的快速大数据处理框架,它支持多种编程语言,包括Java。下面是一些常用的Spark Java API示例。

  1. RDD(弹性分布式数据集)操作

创建一个RDD

JavaRDD<String> lines = sc.textFile("data.txt");

对RDD进行转换:

JavaRDD<Integer> numbers = lines.map(Integer::parseInt);

对RDD进行过滤:

JavaRDD<Integer> filteredNumbers = numbers.filter(x -> x > 10);

对RDD进行聚合操作:

int sum = numbers.reduce((x, y) -> x + y);
  1. DataFrame(数据框)操作

创建一个DataFrame:

StructType schema = new StructType(new StructField[]{
  new StructField("name", DataTypes.StringType, false, Metadata.empty()),
  new StructField("age", DataTypes.IntegerType, false, Metadata.empty()),
});
JavaRDD<Row> rows = sc.parallelize(Arrays.asList(
  RowFactory.create("Alice", 30),
  RowFactory.create("Bob", 25),
  RowFactory.create("Charlie", 20)
));
Dataset<Row> df = spark.createDataFrame(rows, schema);

对DataFrame进行查询操作:

df.select("name").show();

对DataFrame进行过滤操作:

df.filter("age > 25").show();

对DataFrame进行聚合操作:

df.groupBy("age").count().show();
  1. Spark SQL操作

创建一个Spark SQL查询

Dataset<Row> results = spark.sql("SELECT name, age FROM people WHERE age > 25");

将DataFrame注册为一张表:

df.createOrReplaceTempView("people");

将DataFrame保存到磁盘:

df.write().format("parquet").save("output.parquet");

以上是一些常用的Spark Java API示例,更多详细的API用法可以参考Spark官方文档。

Apache Spark的组件

Apache Spark的组件包括:

1. Spark Core

Spark的核心组件,提供基本的内存计算和分布式任务调度功能。

Spark Core是Spark的核心组件,负责提供基本的内存计算和分布式任务调度功能。Spark Core是Spark应用程序的基础,它允许开发人员在Spark上构建自己的应用程序,并使这些应用程序能够在分布式环境中运行。

Spark Core的主要功能包括:

  1. 数据抽象和转换——提供了一系列的API,用于数据的抽象和转换,例如map、reduce、filter等操作。
  2. 分布式数据集——Spark Core允许开发人员将大规模数据集划分为多个分区,并在集群中分布式处理数据。
  3. 内存计算——Spark Core使用内存计算技术,将数据缓存在内存中,以极大提高计算效率。
  4. 高效的任务调度——Spark Core使用基于DAG的任务调度算法,以实现高效的任务调度和部署。

除了这些功能之外,Spark Core还提供了很多其他的功能和扩展点,例如:

  1. 执行引擎——Spark Core使用了基于内存计算的执行引擎,这使得Spark比其他大数据处理框架更快。
  2. 数据源和格式——Spark Core支持各种数据源和格式,例如Hadoop HDFS、Cassandra、HBase、JSON、Avro等。
  3. 扩展点——Spark Core提供了很多扩展点,开发人员可以通过扩展这些点来增加Spark的功能和性能。

总之,Spark Core是Spark的核心组件,它提供了基本的内存计算和分布式任务调度功能,是Spark应用程序的基础。Spark Core还提供了很多其他的功能和扩展点,为开发人员提供了更多的自由和灵活性。

2. Spark SQL

Spark中用于结构化数据处理的模块,支持SQL查询和DataFrame API。

Spark SQL是Apache Spark中用于结构化数据处理的模块,它支持SQL查询和DataFrame API。Spark SQL通过将数据集加载到内存中并进行分布式计算来提高数据处理速度。

Spark SQL的核心是Catalyst Optimizer。Catalyst是一个基于规则的查询优化器,它可以将Spark SQL的DataFrame API转换为逻辑计划,并将其优化为物理计划,然后将物理计划翻译成Spark RDD上的操作。这种方式可以减少查询的执行时间和成本。

Spark SQL的主要组件包括:

  1. SQL API:Spark SQL支持标准的SQL查询,包括SELECT、FROM、WHERE、JOIN、GROUP BY、ORDER BY等语句。
  2. DataFrame API:Spark SQL提供了一种类似于Pandas的DataFrame API,可以轻松地处理结构化数据。
  3. Dataset API:Spark SQL还提供了一种类型安全的Dataset API,它可以很方便地进行操作和转换。
  4. Catalyst Optimizer:Catalyst是一个基于规则的查询优化器,它可以将Spark SQL的DataFrame API转换为逻辑计划,并将其优化为物理计划,然后将物理计划翻译成Spark RDD上的操作。
  5. Spark SQL JDBC/ODBC服务器:Spark SQL提供了JDBC和ODBC服务器,使得其他工具可以通过这些协议连接到Spark SQL,从而进行数据访问和交互式查询。

Spark SQL的运行原理可以简单描述为:

  1. Spark SQL将数据集加载到内存中,可以从不同的数据源中读取数据,如HDFS、Hive、JSON、Parquet等。
  2. 加载的数据被转换成DataFrame或Dataset,然后通过查询语句对其进行处理。
  3. Catalyst Optimizer将查询语句转换成逻辑计划,并对其进行优化,最终生成物理计划。
  4. 物理计划被翻译成Spark RDD上的操作,并由Spark引擎执行。
  5. 执行结果将被返回给Spark SQL,可以通过API或JDBC/ODBC服务器进行访问和处理。

在Java中,可以通过Spark SQL的Java API进行数据处理。Java API提供了DataFrame和Dataset对象,可以对其进行各种转换和操作。Java API还支持使用JavaBeans来表示和操作结构化数据。可以使用Java API将大量的数据读入内存中,并进行高效的处理和查询。

3. Spark Streaming

Spark中用于流式数据处理的模块,支持实时数据流的处理和流式数据分析。

Spark Streaming是Spark中用于流式数据处理的模块,它基于Spark引擎,支持实时数据流的处理和流式数据分析。Spark Streaming可以将来自不同来源的实时数据进行处理,并提供高可靠性和高吞吐量的流式数据处理。

Spark Streaming的工作原理是通过将数据流分成一系列的小批次数据来进行处理。这些小批次数据被称为微批次(micro-batch),每个微批次的大小可以根据具体情况进行调整。Spark Streaming使用Spark的核心引擎来处理这些微批次数据,这使得它能够充分利用Spark的分布式计算能力。

Spark Streaming的运行原理是通过一系列的转换操作来对流式数据进行处理。这些转换操作包括过滤、转换、聚合、排序等,可以根据具体的业务需求进行自由组合。Spark Streaming还支持窗口操作,它可以将数据流分成一段时间的窗口,然后对每个窗口内的数据进行处理。

在实际的应用中,Spark Streaming可以与多种数据源进行集成,包括Kafka、Flume、Twitter等。它还提供了丰富的API和工具,能够方便地对流式数据进行处理和分析。

Java是Spark Streaming的主要开发语言之一,Java开发人员可以使用Spark Streaming的Java API来进行流式数据处理。在Java中,Spark Streaming主要使用JavaRDD和JavaDStream两种数据结构来表示数据流和处理结果。JavaRDD是Spark中常见的数据结构,它表示一个分布式的、不可变的数据集合。JavaDStream则是Spark Streaming中特有的数据结构,它表示一个不断更新的、可变的数据流。

总之,Spark Streaming是一个非常强大的流式数据处理框架,可以用于实时数据流的处理和流式数据分析。它具有高可靠性、高吞吐量的特点,能够方便地与多种数据源进行集成,支持丰富的API和工具,是大数据处理中不可或缺的一部分。

4. MLib

Spark中用于机器学习的模块,提供了许多机器学习算法和工具。

MLib是Spark中用于机器学习的模块,它提供了许多机器学习算法和工具,包括分类、回归、聚类、协同过滤、降维等等。MLib的设计目标是高效、易用和可扩展性,它可以在分布式环境下进行大规模的机器学习计算。

MLib的工作原理是基于Spark的分布式计算框架,它充分利用Spark的内存计算和RDD(弹性分布式数据集)的特性来加速机器学习算法的计算过程。在MLib中,所有的机器学习算法都被实现为Spark中的RDD操作,通过分布式计算来完成模型的训练和预测。

MLib的运行原理是基于Spark的集群模式,它可以利用多台计算机上的CPU和内存资源来完成机器学习任务。在集群环境下,MLib可以将数据分割成多个分区,每个分区可以在不同的计算节点上进行计算,从而加速机器学习算法的运行速度。

除了Spark本身的一些机器学习算法外,MLib还提供了一些扩展知识点,例如:

  1. 特征抽取:MLib提供了各种特征抽取器,包括TF-IDF、Word2Vec、Hashing Trick等等,可以将原始数据转换为向量或矩阵形式,以便进行机器学习操作。
  2. 模型评估:MLib提供了各种模型评估指标,例如准确率、召回率、F1得分等等,可以帮助用户评估模型的性能和泛化能力。
  3. 数据预处理:MLib提供了各种数据预处理工具,例如缺失值处理、标准化、归一化等等,可以帮助用户准备好适合机器学习算法的数据集。

总之,MLib是Spark中一个功能强大、易用性高、可扩展性强的机器学习模块,它提供了许多机器学习算法和工具,可以帮助用户在分布式环境下进行大规模的机器学习计算。

5. GraphX

Spark中用于图计算的模块,支持图数据结构的操作和图算法的实现。

GraphX是Spark中用于图计算的模块,它支持图数据结构的操作和图算法的实现。具体来说,GraphX提供了以下功能:

  1. 支持顶点和边的属性:GraphX中的图由一组顶点和一组边组成,顶点和边都可以带有属性。属性可以是任何数据类型,例如数字、字符串、布尔值等。
  2. 支持图的创建和转换:GraphX中可以通过各种方式创建和转换图。例如,可以从RDD创建图,也可以从其他数据格式(如GEXF、GraphML)中读取输入来创建图。
  3. 支持图算法:GraphX支持很多图算法,包括PageRank、TriangleCount、ConnectedComponents、StronglyConnectedComponents等。这些算法都可以基于GraphX提供的API进行实现。
  4. 支持分布式计算:GraphX可以在分布式环境下进行计算,因此它可以处理大规模的图数据集。

GraphX的底层运行原理可以简单概括为以下几个步骤:

  1. 读取输入数据:GraphX首先从输入数据中读取图数据。
  2. 构建内存数据结构:GraphX将输入数据构建成内存中的图数据结构。
  3. 执行算法:GraphX根据用户选择的算法,对图进行计算。
  4. 将结果输出:GraphX将计算结果输出到文件系统或其他数据存储系统中。

在底层实现上,GraphX采用了分布式图处理的思想,将图数据划分为多个分区并行处理。同时,GraphX采用了顶点切分算法和消息传递机制,可以高效地进行图计算。

Java语言可以使用GraphX的Java API进行图计算。Java API与Scala API类似,可以实现相同的图算法,并且可以混合使用Scala和Java编写的代码。Java语言使用GraphX的具体步骤包括以下几个方面:

  1. 导入依赖:Java项目需要将Spark和GraphX的依赖添加到项目中。
  2. 创建图:Java代码中可以使用GraphLoader.fromEdgesFile()等方法创建图。
  3. 执行算法:Java代码中可以使用PageRank.run()、TriangleCount.run()等方法执行算法。
  4. 处理结果:Java代码中可以使用JavaRDD等类型处理结果数据。

需要注意的是,由于Java语言与Scala语言的语法差异较大,因此在使用Java API时需要花费更多的学习成本。在实际开发中,开发者可以根据实际需求选择Scala或Java编写GraphX程序。

6. SparkR

Spark中专门用于R语言的接口,使得R语言用户可以方便地使用Spark进行数据处理和分析。

SparkR是Spark中专门为R语言用户设计的接口,它允许R语言用户利用Spark进行数据处理和分析。SparkR的实现方式是通过将R语言的实现与Spark的分布式计算框架集成在一起来实现的。

SparkR允许R语言用户使用Spark的各种功能,例如:数据操作、图形处理、机器学习和统计分析等。SparkR的工作原理是将R语言代码转换为Spark的RDD操作,最终在Spark集群上执行计算操作。

SparkR的运行原理是将R语言代码通过Spark的R外壳程序(SparkR shell)提交给Spark执行。在SparkR shell中,R语言用户可以使用SparkR提供的各种函数来对数据进行操作和分析,例如:创建RDD、进行数据清洗、进行数据转换、执行统计分析操作等。

SparkR的底层实现是通过Scala语言编写的。在SparkR内部,Scala代码和R语言代码通过一个桥接接口进行通信。当R语言代码需要执行Spark RDD操作时,它将通过这个桥接接口调用底层的Spark Scala代码来执行计算操作。

总之,SparkR为R语言用户提供了一个方便、高效的分布式计算框架,使得R语言用户可以轻松地使用Spark进行数据处理和分析。同时,深入了解SparkR的工作原理和运行原理,可以帮助我们更好地使用SparkR进行数据处理。

7. PySpark

Spark中专门用于Python语言的接口,提供了Python编程接口和Python的RDD API。

PySpark是Spark中专门为Python语言提供的接口,它允许Python开发人员在Spark平台上使用Python编程接口和Python的RDD API。PySpark使用Python中的pickle模块来序列化和反序列化数据。这使得PySpark能够高效地处理Python中的数据结构。

PySpark的工作原理是将Python代码转换为Java或Scala代码执行。当Python代码运行在PySpark中时,它会被翻译成Java字节码,然后在Spark执行环境中运行。这样能够利用Spark的并行计算框架,让Python代码也能够高效地运行。

PySpark的运行原理在很大程度上与Spark相同。在PySpark中,数据被表示为分布式数据集,也就是RDD。RDD是不可变的,分布式的,容错的数据集,它可以被并行计算。PySpark通过将RDD分割成分区,将数据分发到不同的节点上进行并行计算。

PySpark提供了许多API,包括读写数据、数据转换和聚合等。Python开发人员可以使用这些API进行数据处理和分析,而不需要学习Java或Scala语言。同时,PySpark也允许Python开发人员与Spark的其他组件集成,如SQL、MLlib和GraphX等。

总之,PySpark是Spark平台上的Python接口,允许Python开发人员使用Spark平台的强大功能,处理大规模数据。PySpark利用Spark的并行计算框架,通过RDD将数据分发到不同的节点执行并行计算。PySpark还提供了许多API,使Python开发人员能够轻松地使用Spark的功能。

8. Spark Submit

Spark中用于提交应用程序的脚本,可以将应用程序提交到本地或远程集群进行运行。

Spark Submit是一个用于提交Spark应用程序的脚本,通过它可以将编写的Spark应用程序提交到本地或远程集群进行运行。它的运行原理涉及到Spark的集群架构和分布式计算理论。

Spark Submit的工作原理可以简单概括为以下几步:

  1. 准备Spark应用程序代码和依赖包

在编写Spark应用程序时,需要将代码和相关依赖包打包成一个jar包,以便于Spark Submit能够正确地提交运行。

  1. 配置Spark应用程序运行参数

在使用Spark Submit提交应用程序时,需要配置一些运行参数,包括启动的Spark主类、运行模式、集群资源配置等。这些参数会在Spark集群中启动应用程序时生效。

  1. 提交应用程序至Spark集群

Spark Submit会将打包好的应用程序和配置文件提交到Spark集群中,由集群管理器进行分配和调度资源。

  1. 执行Spark应用程序

Spark集群管理器根据提交的应用程序和配置文件分配资源,启动应用程序,并对任务进行分配和调度,以实现高效的分布式计算。

总体来说,Spark Submit的运行原理基于Spark集群的分布式计算模型,通过将应用程序和资源配置提交给Spark集群管理器,实现分布式的任务调度和计算,从而实现高效的大数据处理和分析。

Java程序员可以通过Spark Submit来提交Java编写的Spark应用程序,需要了解Spark集群架构和分布式计算模型相关知识,并掌握打包、配置、提交、调试等技能,以实现高效的大数据分析与处理。

Apache Spark的计算过程

Apache Spark是一种开源的分布式数据处理框架,它的设计目标是提供高效的数据处理能力,充分利用集群的计算资源。与传统的Hadoop MapReduce框架相比,Spark具有以下优势:

  1. 更高的计算速度:Spark通过内存计算来提高处理速度,而Hadoop MapReduce是基于磁盘的计算,速度较慢。
  2. 更为灵活的数据处理:Spark提供了类似于数据流的API,可以对数据进行实时处理,而Hadoop MapReduce只能进行离线批处理。
  3. 支持多种数据类型:Spark支持处理结构化、半结构化和非结构化数据,而Hadoop MapReduce只支持处理结构化数据。

Spark的运行原理是基于分布式计算的,它将数据切分成多个分区,每个分区可以在不同的计算节点上进行处理。Spark的计算过程分为两个阶段:转换(Transformation)和动作(Action)。

转换阶段

转换阶段是将数据进行转换,可以进行多个转换操作,如过滤、映射、排序等,转换操作的结果只是一个抽象的数据集,不会有实际的计算。

在Spark中,数据集是通过RDD(Resilient Distributed Datasets)来表示的,它代表了一个可以被分布式处理的、不可变的、可重新计算的数据集合。RDD的特点是弹性容错,即在遇到节点故障等情况时可以进行自动恢复,保证计算的正确性和可靠性。

在Spark转换阶段中,对RDD进行的转换操作不会立即执行,而是会被记录下来以便后续的计算。这种惰性计算方式能够减少IO开销,提高计算效率。

在转换操作中,通常会包括以下几种:

1. 过滤操作

通过判断每个元素是否符合特定条件来过滤掉不符合要求的元素,只保留满足条件的元素。

Spark过滤操作的底层实现主要是通过调用RDD的filter方法来实现的。具体实现过程如下:

  1. 对于一个RDD,首先会将该RDD中的每个元素依次传递给filter方法。
  2. 在filter方法中,会对每个元素进行判断,如果该元素符合特定的条件,则将其保留下来,否则将其过滤掉。
  3. 最终,filter方法会返回一个新的RDD,该RDD中只包含符合条件的元素。

在实现过程中,filter方法中的判断条件可以是任意的Java表达式,只需要返回一个布尔类型的值即可。例如,可以通过调用一个自定义的方法来实现复杂的过滤逻辑。

除了filter方法外,Spark还提供了许多其他的过滤操作,例如map、flatMap、reduce等,这些操作都是通过对RDD中的元素进行处理来实现的。在使用Spark进行大规模数据处理时,合理运用这些过滤操作可以大大提高程序的效率。

2. 映射操作

将数据集中的每个元素都应用到一个函数中,并返回一个新的数据集,通常用于对数据进行提取或转换。

Spark映射操作是一种基本的转换操作,它允许对RDD中每个元素应用一个给定的函数,从而生成一个新的RDD。这个操作的常见用途是将数据进行提取或转换,例如对文本数据进行分词和计数。

在Spark中,映射操作由map()函数实现。这个函数的原型如下:

JavaRDD<T> map(Function<T, R> f);

其中,Function是一个接口,定义了一个apply()方法,接受一个输入参数T,返回一个输出参数R。这个函数会被应用到RDD中的每个元素上,生成一个新的RDD。

例如,下面的代码演示了如何对一个数字RDD进行平方操作,输出平方后的结果:

JavaRDD<Integer> rdd = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5));
JavaRDD<Integer> squareRDD = rdd.map(x -> x * x);
squareRDD.foreach(x -> System.out.println(x));

在这个例子中,我们首先创建了一个数字RDD,然后对它应用了一个平方函数,生成一个新的平方RDD。最后,我们遍历这个RDD,输出每个元素的值。

在运行时,Spark会将RDD中的数据分成一系列的分区,每个分区都会被分配到不同的节点上进行处理。在执行映射操作时,每个节点会对其所分配的分区进行操作,从而生成一个新的分区。最后,所有的分区会被合并起来,生成一个新的RDD返回给驱动程序。

需要注意的是,在实际应用中,映射操作可能会涉及到复杂的计算逻辑,这会影响映射操作的性能和效率。为了提高性能,可以采用一些优化技巧,例如使用缓存机制、调整分区个数等。正确使用这些技巧可以有效地提高Spark应用程序的性能和效率。


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
3月前
|
机器学习/深度学习 SQL 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
161 0
|
3月前
|
机器学习/深度学习 SQL 分布式计算
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
|
6月前
|
分布式计算 资源调度 Java
|
6月前
|
分布式计算 Hadoop 大数据
大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)
大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)
|
1月前
|
消息中间件 分布式计算 Serverless
CDC一键入湖:当 Apache Hudi DeltaStreamer 遇见 Serverless Spark
CDC一键入湖:当 Apache Hudi DeltaStreamer 遇见 Serverless Spark
53 2
|
3月前
|
SQL 分布式计算 数据处理
Apache Spark简介与历史发展
Apache Spark简介与历史发展
|
4月前
|
SQL 分布式计算 Apache
流数据湖平台Apache Paimon(六)集成Spark之DML插入数据
流数据湖平台Apache Paimon(六)集成Spark之DML插入数据
85 0
|
4月前
|
SQL 分布式计算 Apache
流数据湖平台Apache Paimon(五)集成 Spark 引擎
流数据湖平台Apache Paimon(五)集成 Spark 引擎
75 0
|
4月前
|
SQL 分布式计算 数据处理
[AIGC] Apache Spark 简介
[AIGC] Apache Spark 简介
|
1月前
|
消息中间件 API Apache
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
本文整理自阿里云开源大数据平台徐榜江 (雪尽),关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会。
1418 1
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会

推荐镜像

更多