Flink-Environment的三种方式和Source的四种读取方式-从集合中、从kafka中、从文件中、自定义

本文详细介绍了Apache Flink中Environment的三种创建方式,包括getExecutionEnvironment、createLocalEnvironment和createRemoteEnvironment,以及Source的四种读取数据方式:从集合、文件、Kafka和自定义Source的实现。通过示例代码展示了如何从集合、文件和Kafka读取数据,并提供了自定义Source的示例。
摘要由CSDN通过智能技术生成

Environment

getExecutionEnvironment:创建一个执行环境,表示当前执行程序的上下文。 如果程序是独立调用的,则此方法返回本地执行环境;如果从命令行客户端调用程序以提交到集群,则此方法返回此集群的执行环境,也就是说,getExecutionEnvironment会根据查询运行的方式决定返回什么样的运行环境,是最常用的一种创建执行环境的方式。如果没有设置并行度,会以flink-conf.yaml中的配置为准,默认是1。

// 批处理
val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
// 流处理
val env = StreamExecutionEnvironment.getExecutionEnvironment

createLocalEnvironment:返回本地执行环境,需要在调用时指定默认的并行度

val env = StreamExecutionEnvironment.createLocalEnvironment(1)

createRemoteEnvironment:返回集群执行环境,将Jar提交到远程服务器。需要在调用时指定JobManager的IP和端口号,并指定要在集群中运行的Jar包。

val env = ExecutionEnvironment.createRemoteEnvironment("jobmanage-hostname", 6123,"YOURPATH//wordcount.jar")

Source之从集合中读取数据

SensorReading.scala

// 定义样例类,传感器id,时间戳,温度
case class SensorReading(id: String, timestamp: Long, temperature: Double)

SourceForCollection.scala

// 隐式转换很重要
import org.apache.flink.streaming.api.scala._

/**
 * 从集合中获取数据
 */
object SourceForCollection {
   
  def main(args: Array[String]): Unit = {
   

    // 创建执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    // 从集合中读取数据
    val listDstream : DataStream[SensorReading] = env.fromCollection(List(
      SensorReading("sensor_1", 1547718199, 35.8),
      SensorReading("sensor_6", 1547718201, 15.4),
      SensorReading("sensor_7", 1547718202, 6.7),
      SensorReading("sensor_10&#
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用 FlinkKafka 读取数据时,可以通过指定 Kafka 的反序列化器来将数据反序列化为指定的类型。对于 key 为 String,value 为 Array[Byte] 的数据,可以按照以下步骤进行反序列化: 1. 定义一个 Kafka 反序列化器,将 byte[] 反序列化为字符串类型: ``` import org.apache.kafka.common.serialization.Deserializer; public class KafkaStringDeserializer implements Deserializer<String> { @Override public String deserialize(String topic, byte[] data) { if (data == null) { return null; } return new String(data); } } ``` 2. 在 Flink 程序,将 Kafka 反序列化器传递给 KafkaConsumer 的构造函数: ``` import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; public class KafkaConsumerExample { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "test"); FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>( "my-topic", new KafkaStringDeserializer(), new StringDeserializer(), properties); env.addSource(consumer) .print(); env.execute("Kafka Consumer Example"); } } ``` 在上面的例子,我们使用了 KafkaStringDeserializer 将 key 反序列化为 String 类型,使用 StringDeserializer 将 value 反序列化为字符串类型。然后,我们将 FlinkKafkaConsumer 添加到 Flink 程序,并通过 print() 将数据打印出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值