原文链接 译者:hjjxd 校对:清英
Flink中的分析程序实现了对数据集的某些操作 (例如,数据过滤,映射,合并,分组)。这些数据最初来源于特定的数据源(例如来自于读文件或数据集合)。操作执行的结果通过数据池以写入数据到(分布式)文件系统或标准输出(例如命令行终端)的形式返回。Flink程序可以运行在不同的环境中,既能够独立运行,也可以嵌入到其他程序中运行。程序可以运行在本地的JVM上,也可以运行在服务器集群中。
为了创建你自己的Flink程序,我们鼓励你从program skeleton(程序框架)开始,并逐渐增加你自己的transformations(变化)。以下是更多的用法和高级特性的索引。
示例程序
以下程序是一段完整可运行的WordCount示例程序。你可以复制粘贴这些代码并在本地运行。
from flink.plan.Environment import get_environment
from flink.functions.GroupReduceFunction import GroupReduceFunction
class Adder(GroupReduceFunction):
def reduce(self, iterator, collector):
count, word = iterator.next()
count += sum([x[0] for x in iterator])
collector.collect((count, word))
env = get_environment()
data = env.from_elements("Who's there?",
"I think I hear them. Stand, ho! Who's there?")
data \
.flat_map(lambda x, c: [(1, word) for word in x.lower().split()]) \
.group_by(1) \
.reduce_group(Adder(), combinable=True) \
.output()
env.execute(local=True)
程序框架
从示例程序可以看出,Flink程序看起来就像普通的python程序一样。每个程序都包含相同的基本组成部分:
1.获取一个运行环境
2.加载/创建初始数据
3.指定对这些数据的操作
4.指定计算结果的存放位置
5.运行程序
接下来,我们将对每个步骤给出概述,更多细节可以参考与之对应的小节。
Environment(运行环境)是所有Flink程序的基础。你可以通过调用Environment类中的一些静态方法来建立一个环境:
get_environment()
运行环境可通过多种读文件的方式来指定数据源。如果是简单的按行读取文本文件,你可以采用:
env = get_environment()
text = env.read_text("file:///path/to/file")
这样,你就获得了可以进行操作(apply transformations)的数据集。关于数据源和输入格式的更多信息,请参考 Data Sources。
一旦你获得了一个数据集DataSet,你就可以通过transformations来创建一个新的数据集,并把它写入到文件,再次transform,或者与其他数据集相结合。你可以通过对数据集调用自己个性化定制的函数来进行数据操作。例如,一个类似这样的数据映射操作:
data.map(lambda x: x*2)
这将会创建一个新的数据集,其中的每个数据都是原来数据集中的2倍。若要获取关于所有transformations的更多信息,及所有数据操作的列表,请参考Transformations。
当你需要将所获得的数据集写入到磁盘时,调用下面三种函数的其中一个即可。
data.write_text("", WriteMode=Constants.NO_OVERWRITE)
write_csv("", line_delimiter='\n', field_delimiter=',', write_mode=Constants.NO_OVERWRITE)
output()
其中,最后一种方法仅适用于在本机上进行开发/调试,它会将数据集的内容输出到标准输出。(请注意,当函数在集群上运行时,结果将会输出到整个集群节点的标准输出流,即输出到workers的.out文件。)前两种方法,能够将