Flink从hdfs读取数据

时间:2017-09-21 01:30:57

标签: hdfs apache-flink

我是Flink的新生,我想知道如何从hdfs读取数据。有人可以给我一些建议或一些简单的例子吗?谢谢大家。

3 个答案:

答案 0 :(得分:1)

如果您的文件格式为文本文件格式,则可以使用' readTextFile'来自&ExecueEnvironment'的方法对象

以下是各种数据源的示例。 (https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/batch/index.html#data-sources

答案 1 :(得分:0)

Flink可以读取HDFS数据,该数据可以是text,Json,avro等任何格式。 支持Hadoop输入/输出格式是flink-java maven模块的一部分,该模块是编写flink作业时所需的。

示例1:读取名为JsonSeries的文本文件并在控制台上打印

final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> lines = env.readTextFile("hdfs://localhost:9000/user/hadoop/input/JsonSeries.txt")
        .name("HDFS File read");
lines.print();

示例2:使用输入格式

DataSet<Tuple2<LongWritable, Text>> inputHadoop =
        env.createInput(HadoopInputs.readHadoopFile(new TextInputFormat(),
                LongWritable.class, Text.class, "hdfs://localhost:9000/user/hadoop/input/JsonSeries.txt"));
inputHadoop.print();

答案 2 :(得分:0)

在 Centos7 机器上使用 Flink 1.13、Hadoop 3.1.2、Java 1.8.0,我能够从 HDFS 读取数据。 HADOOP_HOMEHADOOP_CLASSPATH 已经导出。我认为从 1.11 版开始发生了一些变化。我什至找不到一个简单的例子。因此,我分享我的例子。

我添加到 pom.xml 以下依赖项

 <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>3.1.2</version>
 </dependency>

我的 Scala 代码:

package com.vbo.datastreamapi

import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
object ReadWriteHDFS extends App {
  
  val env = StreamExecutionEnvironment.getExecutionEnvironment


  val stream = env.readTextFile("hdfs://localhost:9000/user/train/datasets/Advertising.csv")

  stream.print()

  env.execute("Read Write HDFS")

}