flink~使用shell终端

前言

在spark中可以使用shell终端直接使用scala进行调试和测试。在flink中也有类似的shell终端。shell命令行和flink集群交互方便调试。

scala-shell local模式

Flink附带了一个集成的交互式Scala Shell。它可以在本地模式和群集模式中使用。

要将shell与集成的Flink集群一起使用,只需执行:

# 使用shell连接一个本地集成的flink 集群 使用下面命令
bin/start-scala-shell.sh local

注意:该命令集成了flink的执行环境,所以不需要启动flink集群。

scala-shell集成环境说明

shell支持Batch(是批处理)和Streaming(是流处理)。启动后会自动预先绑定两个不同的执行环境。可以使用"benv"和"senv"变量(类似于spark-shell中sc变量)来分别访问Batch和Streaming环境。

使用Batch环境

在scala shell中执行wordcount

启动:bin/start-scala-shell.sh local
scala> val text = benv.fromElements(
     |   "To be, or not to be,--that is the question:--",
     |   "Whether 'tis nobler in the mind to suffer",
     |   "The slings and arrows of outrageous fortune",
     |   "Or to take arms against a sea of troubles,")
text: org.apache.flink.api.scala.DataSet[String] = org.apache.flink.api.scala.DataSet@479f738a

scala> val counts = text
counts: org.apache.flink.api.scala.DataSet[String] = org.apache.flink.api.scala.DataSet@479f738a

scala> val counts = text.flatMap { _.toLowerCase.split("\\W+") }.map { (_, 1) }.groupBy(0).sum(1)
counts: org.apache.flink.api.scala.AggregateDataSet[(String, Int)] = org.apache.flink.api.scala.AggregateDataSet@44f4c619

scala> counts.print()
(a,1)
(against,1)
(and,1)
(arms,1)
(arrows,1)
(be,2)
(fortune,1)
(in,1)
(is,1)
(mind,1)
(nobler,1)
(not,1)
(of,2)
(or,2)
(outrageous,1)
(question,1)
(sea,1)
(slings,1)
(suffer,1)
(take,1)
(that,1)
(the,3)
(tis,1)
(to,4)
(troubles,1)
(whether,1)

print() 命令会自动将指定的任务发送到JobManager执行,并在终端中显示计算结果。
也可以将结果写入文件。但是,在这种情况下,就需要调用execute,来运行您的程序:

Scala-Flink> benv.execute("MyProgram")

注意:只有在local模式下才会把输出打印到终端,若是集群模式,将不会打印到终端。

使用Streaming环境

在scala shell中通过DataStream API来计算wordcount

scala> val textStreaming = senv.fromElements(
     |   "To be, or not to be,--that is the question:--",
     |   "Whether 'tis nobler in the mind to suffer",
     |   "The slings and arrows of outrageous fortune",
     |   "Or to take arms against a sea of troubles,")
textStreaming: org.apache.flink.streaming.api.scala.DataStream[String] = org.apache.flink.streaming.api.scala.DataStream@22717282

scala> val countsStreaming = textStreaming .flatMap { _.toLowerCase.split("\\W+") } .map { (_, 1) }.keyBy(0).sum(1)
countsStreaming: org.apache.flink.streaming.api.scala.DataStream[(String, Int)] = org.apache.flink.streaming.api.scala.DataStream@4daa4a5a

scala> countsStreaming.print()
res7: org.apache.flink.streaming.api.datastream.DataStreamSink[(String, Int)] = org.apache.flink.streaming.api.datastream.DataStreamSink@7d957c96

scala> senv.execute("Streaming Wordcount")
(to,1)
(be,1)
(or,1)
(not,1)
(to,2)
(be,2)
(that,1)
(is,1)
(the,1)
(question,1)
(whether,1)
(tis,1)
(nobler,1)
(in,1)
(the,2)
(mind,1)
(to,3)
(suffer,1)
(the,3)
(slings,1)
(and,1)
(arrows,1)
(of,1)
(outrageous,1)
(fortune,1)
(or,2)
(to,4)
(take,1)
(arms,1)
(against,1)
(a,1)
(sea,1)
(of,2)
(troubles,1)
res8: org.apache.flink.api.common.JobExecutionResult = org.apache.flink.api.common.JobExecutionResult@7c950d4f

注意:在流处理情况下,print方法不会触发执行。需要调用execute方法才会真正执行。

flink shell会自动带有命令执行历史。

在shell命令行模式下添加外部依赖

可以将外部类路径添加到scala-shell中,当程序被调用的时候,这些外部依赖会自动的被发送到jobmanager上。

使用这个参数 -a <path/to/jar.jar> 或者 --addclasspath <path/to/jar.jar> 添加额外的依赖。

bin/start-scala-shell.sh [local | remote <host> <port> | yarn] --addclasspath <path/to/jar.jar>

flink scala shell设置

查看scala shell模式提供的选型,可以执行这个命令:

bin/start-scala-shell.sh --help

远程模式remote

使用scala shell 连接一个远程集群,使用host和port参数去连接指定的jobmanager

bin/start-scala-shell.sh remote <hostname> <portnumber>
./start-scala-shell.sh remote slaver01 8081

集群模式 yarn scala shell cluster

可以通过scala shell在yarn上启动一个专有的flink集群,yarn containers的数量可以通过参数-n 指定。shell在yarn上部署了一个新的集群并且连接到这个集群。你也可以指定集群的参数,例如:指定jobmanager的内存,yarn application的名称 等等。

例如:针对scala shell启动一个yarn集群包含两个taskmanager,使用下面的参数:

bin/start-scala-shell.sh yarn -n 2

针对所有的参数选项,可以在本节的最后查看完整的说明

yarn session模式

如果你之前已经使用flink yarn session模式启动了一个flink集群,scala shell可以使用下面的命令进行连接:

bin/start-scala-shell.sh yarn

完整的参数选项

Flink Scala Shell
用法: start-scala-shell.sh [local|remote|yarn] [options] <args>...
 
命令: local [options]
使用scala shell连接一个本地flink集群
  -a <path/to/jar> | --addclasspath <path/to/jar>
        指定flink使用的第三方依赖
命令: remote [options] <host> <port>
启动scala shell连接一个远程集群
  <host>
        主机名
  <port>
        端口号
 
  -a <path/to/jar> | --addclasspath <path/to/jar>
        指定flink使用的第三方依赖
命令: yarn [options]
使用flink连接一个yarn集群
  -n arg | --container arg
        分配的yarn container的数量 (等于TaskManagers的数量)
  -jm arg | --jobManagerMemory arg
        JobManager container 的内存[in MB]
  -nm <value> | --name <value>
        在YARN上给应用设置一个名字
  -qu <arg> | --queue <arg>
        指定YARN队列
  -s <arg> | --slots <arg>
        指定每个TaskManager的slot数量
  -tm <arg> | --taskManagerMemory <arg>
        TaskManager container的内存 [in MB]
  -a <path/to/jar> | --addclasspath <path/to/jar>
        指定flink使用的第三方jar
  --configDir <value>
        配置文件目录.
  -h | --help
        打印帮助信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值