flink调用python脚本

Example Program  示例程序

以下程序是一个完整的,单词统计

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.Load/create 创建初始化数据

2.指定数据的转换

3.指定你的计算结果放在那里,执行你的程序

环境是所有Flink程序的基础。 你可以得到试用那些静态方法

get_environment()

为了指定数据源 执行环境有几个方法来读取文件

env = get_environment()
text = env.read_text("file:///path/to/file")

这个给一个数据集 你可以应用转换。

一旦有个数据集,就可以应用转换来创建新的数据集

你可以写到一个文件,再次转换 或者 与其他数据集组合 

你自己通过调用你自己的自定义转换函数来转换

data.map(lambda x: x*2)

这个会创建一个新的数据集通过每个值加倍来创建新的数据集。

data.write_text("<file-path>", WriteMode=Constants.NO_OVERWRITE)
write_csv("<file-path>", line_delimiter='\n', field_delimiter=',', write_mode=Constants.NO_OVERWRITE)
output()

最后一种方法仅用于开发/调试在一个机器上, 它会把数据集输出到标准输出
(注意在一个cluster,结果会进去集群节点的标准输出流,并最终进入wokerers的.out文件)

一旦指定了完整的程序,就需要在环境中调用execute.这将在本地计算机上执行

或者提交程序在集群上执行,具体取决于Flink是如何启动的

项目设置:

除了设置Flink之外,不需要额外的工作。Python包可以在Flink发行版中找到。

Python API在安装了Python2.7或者3.4上进行了测试

默认情况下,Flink 通过调用python或者python3来启动程序

延迟求值

所有的Flink程序都是延迟执行的 

当程序的主方法被执行时,数据加载和转换不会直接发生。

相反,每个操作是被创建和追加到程序的计划里。

操作是实际被执行当其中的一个执行方法被调用 

延迟执行让你构建复杂的程序,Flink将其作为一个整体计划单元执行

Transformations 转换

数据转换将一个或者多个数据集转换为一个新的数据集  

程序可以将多个转换到复杂的程序及

Map     获取一个元素并生成一个元素

FlatMap  获取一个元素并生成零个、一个或者多个元素

MapPartition  转换一个并行分区到一个简单的函数调用 

这个函数获取分许作为一个迭代器, 然后可以产生一个任意数量的值

Filter  为每个元素计算一个布尔值,并保留返回值

指定关键点:

某些转换(比如join或者CoGroup) 需要在其参数DataSets定义一个键,

Flink的数据模型 不是基于键值对的,

Define keys for Tuples


Executing Plans

要使用Flink计划,进入Flink的发布版本  运行pyflink2.sh 用于python 2.7

pyflink3.sh 用于python 3.4  


包含脚本的计划必须作为第一个参数传递 
[root@centos6 flink]# pyflink.sh count_word.py 
Starting execution of program
Program execution finished
Job with JobID 4a6fe06f3b281b76fdbf041d13031e2a has finished.
Job Runtime: 1961 ms
[root@centos6 flink]# vim count_word.py 
[root@centos6 flink]# pyflink.sh count_word.py 
Starting execution of program
Program execution finished
Job with JobID 13059c5993041ae84b4966dae9857e5b has finished.
Job Runtime: 1617 ms
[root@centos6 flink]# 

(2, i)
(1, ho!)
(1, hear)
(1, them.)
(1, think)
(2, who's)
(1, stand,)
(2, there?)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flink 调用 Dubbo 是指在 Flink 的应用程序中使用 Dubbo 进行远程服务调用Flink 是一个流处理框架,而 Dubbo 是一个高性能的分布式服务框架,通过将两者结合使用,可以实现在 Flink调用 Dubbo 服务的功能。 要在 Flink调用 Dubbo,需要进行以下步骤: 1. 添加 Dubbo 依赖:在 Flink 项目的 pom.xml 文件中添加 Dubbo 的相关依赖项,以确保可以使用 Dubbo 的功能。 2. 配置 Dubbo 服务:在 Flink 的配置文件中,配置 Dubbo 的注册中心和消费者相关信息,如注册中心的地址、端口等。 3. 编写 Dubbo 服务调用逻辑:在 Flink 的应用程序中,编写 Dubbo 服务的调用逻辑。可以通过 Dubbo 的接口代理,调用 Dubbo 服务提供的方法,并获取返回结果。 4. 集成 Dubbo 和 Flink:将 Dubbo 的服务调用逻辑集成到 Flink 的任务中,在需要调用 Dubbo 服务的地方执行相应的调用。 5. 运行 Flink 任务:启动 Flink 任务,让其执行包含 Dubbo 服务调用的逻辑。Flink 会将任务分发给不同的节点运行,并通过 Dubbo 进行远程调用。 需要注意的是,在 Flink调用 Dubbo 服务时,要考虑到 Dubbo 服务的网络延迟和故障处理等问题。为了提高性能和可靠性,可以进行负载均衡、容错处理和重试等操作,以确保 Dubbo 服务的可用性和稳定性。 综上所述,Flink 调用 Dubbo 是通过集成 Dubbo 的服务调用逻辑到 Flink 的应用程序中,实现在 Flink调用 Dubbo 服务的功能。这样可以实现分布式计算和分布式服务的无缝集成,提高系统的扩展性、性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值