准备工作
为了更好地理解,我们先构建一个实际应用场景。比如网站的访问操作,可以抽象成一个三元组(用户名,用户访问的 urrl,用户访问 url 的时间戳),所以在这里,我们可以创建一个类 Event,将用户行为包装成它的一个对象。Event 包含了以下一些字段,
字段名 | 数据类型 | 说明 |
---|---|---|
user | String | 用户名 |
url | String | 用户访问的 url |
timestamp | Long | 用户访问 url 的时间戳 |
Event类源代码,我们定义的 Event,有这样几个特点:
- 类是公有(public)的
- 有一个无参的构造方法
- 所有属性都是公有(public)的
- 所有属性的类型都是可以序列化的
从集合中读取数据
ArrayList<Event> clicks = new ArrayList<>();
clicks.add(new Event("Mary","./home",1000L));
clicks.add(new Event("Bob","./cart",2000L));
DataStream<Event> stream = env.fromCollection(clicks);
从元素中读取数据
DataStreamSource<Event> stream2 = env.fromElements(
new Event("Mary", "./home", 1000L),
new Event("Bob", "./cart", 2000L)
);
不管是从集合中读取数据,还是从元素中读取数据,一般只用于测试,不会在生产环境中正式使用
从文件读取数据
DataStream<String> stream = env.readTextFile("input/clicks.csv");
说明:
- 参数可以是目录,也可以是文件;
- 路径可以是相对路径,也可以是绝对路径;
- 相对路径是从系统属性 user.dir 获取路径: idea 下是 project 的根目录, standalone 模式下是集群节点根目录;
Socket读取数据
这个内容在前几天做 WordCount 中已经做过了,就不详细解析了,文本流适合测试数据,但不适用于生产环境中。
本章整体代码如下(不包括Socket读取数据):Flink的一些常规数据源代码,包含从集合中准备数据,元素中准备数据,以及文件中准备数据。