- Getting Started
- 示例
- Batch 示例
Batch 示例
本文档是 Apache Flink 的旧版本。建议访问 最新的稳定版本。
以下示例展示了 Flink 从简单的WordCount到图算法的应用。示例代码展示了 Flink’s DataSet API 的使用。
完整的源代码可以在 Flink 源代码库的 flink-examples-batch 模块找到。
运行一个示例
在开始运行一个示例前,我们假设你已经有了 Flink 的运行示例。导航栏中的“快速开始(Quickstart)”和“安装(Setup)” 标签页提供了启动 Flink 的不同方法。
最简单的方法就是执行 ./bin/start-cluster.sh
,从而启动一个只有一个 JobManager 和 TaskManager 的本地 Flink 集群。
每个 Flink 的 binary release 都会包含一个examples
(示例)目录,其中可以找到这个页面上每个示例的 jar 包文件。
可以通过执行以下命令来运行WordCount 示例:
其他的示例也可以通过类似的方式执行。
注意很多示例在不传递执行参数的情况下都会使用内置数据。如果需要利用 WordCount 程序计算真实数据,你需要传递存储数据的文件路径。
注意非本地文件系统需要一个对应前缀,例如 hdfs://
。
Word Count
WordCount 是大数据系统中的 “Hello World”。他可以计算一个文本集合中不同单词的出现频次。这个算法分两步进行: 第一步,把所有文本切割成单独的单词。第二步,把单词分组并分别统计。
WordCount 示例增加如下执行参数: --input <path> --output <path>
即可实现上述算法。 任何文本文件都可作为测试数据使用。
WordCount 示例增加如下执行参数: --input <path> --output <path>
即可实现上述算法。 任何文本文件都可作为测试数据使用。
Page Rank
PageRank算法可以计算互联网中一个网页的重要性,这个重要性通过由一个页面指向其他页面的链接定义。PageRank 算法是一个重复执行相同运算的迭代图算法。在每一次迭代中,每个页面把他当前的 rank 值分发给他所有的邻居节点,并且通过他收到邻居节点的 rank 值更新自身的 rank 值。PageRank 算法因 Google 搜索引擎的使用而流行,它根据网页的重要性来对搜索结果进行排名。
在这个简单的示例中,PageRank 算法由一个批量迭代和一些固定次数的迭代实现。
PageRank代码实现了以上示例。
他需要以下参数来运行: --pages <path> --links <path> --output <path> --numPages <n> --iterations <n>
。
PageRank代码 实现了以上示例。
他需要以下参数来执行: --pages <path> --links <path> --output <path> --numPages <n> --iterations <n>
。
输入文件是纯文本文件,并且必须存为以下格式:
- 页面被表示为一个长整型(long)ID并由换行符分割
- 例如
"1\n2\n12\n42\n63\n"
给出了ID为 1, 2, 12, 42和63的五个页面。
- 链接由空格分割的两个页面ID来表示。每个链接由换行符来分割。
- 例如
"1 2\n2 12\n1 12\n42 63\n"
表示了以下四个有向链接: (1)->(2), (2)->(12), (1)->(12) 和 (42)->(63).
这个简单的实现版本要求每个页面至少有一个入链接和一个出链接(一个页面可以指向自己)。
Connected Components(连通组件算法)
Connected Components 通过给相连的顶点相同的组件ID来标示出一个较大的图中的连通部分。类似PageRank,Connected Components 也是一个迭代算法。在每一次迭代中,每个顶点把他现在的组件ID传播给所有邻居顶点。当一个顶点接收到的组件ID小于他自身的组件ID时,这个顶点也更新其组件ID为这个新组件ID。
这个代码实现使用了增量迭代: 没有改变其组件 ID 的顶点不会参与下一轮迭代。这种方法会带来更好的性能,因为后面的迭代可以只处理少量的需要计算的顶点。
ConnectedComponents代码 实现了以上示例。他需要以下参数来运行: --vertices <path> --edges <path> --output <path> --iterations <n>
。
ConnectedComponents代码 实现了以上示例。他需要以下参数来运行: --vertices <path> --edges <path> --output <path> --iterations <n>
。
输入文件是纯文本文件并且必须被存储为如下格式:
- 顶点被表示为 ID,并且由换行符分隔。
- 例如
"1\n2\n12\n42\n63\n"
表示 (1), (2), (12), (42) 和 (63)五个顶点。
- 边被表示为空格分隔的顶点对。边由换行符分隔:
- 例如
"1 2\n2 12\n1 12\n42 63\n"
表示四条无向边: (1)-(2), (2)-(12), (1)-(12), and (42)-(63)。
Back to top