hadoop - 将 HDFS 数据流式传输到 Storm(又名 HDFS spout)

标签 hadoop hdfs apache-storm

我想知道是否有任何 spout 实现可以将数据从 HDFS 流式传输到 Storm(类似于来自 HDFS 的 Spark Streaming)。我知道有 bolt 实现将数据写入 HDFS(https://github.com/ptgoetz/storm-hdfshttp://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.3/bk_user-guide/content/ch_storm-using-hdfs-connector.html),但我找不到其他方法。 我感谢任何建议和提示。

最佳答案

一个选项是使用 Hadoop HDFS java API。假设您使用的是 Maven,您将在 pom.xml 中包含 hadoop-common:

<dependency>
   <groupId>org.apache.hadoop</groupId>
   <artifactId>hadoop-common</artifactId>
   <version>2.6.0.2.2.0.0-2041</version>
</dependency>

然后,在您的 spout 实现中,您将使用 HDFS FileSystem 对象。例如,下面是一些将文件中的每一行作为字符串发出的伪代码:

@Override
public void nextTuple() {
   try {
      Path pt=new Path("hdfs://servername:8020/user/hdfs/file.txt");
      FileSystem fs = FileSystem.get(new Configuration());
      BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(pt)));
      String line = br.readLine();
      while (line != null){
         System.out.println(line);
         line=br.readLine();
         // emit the line which was read from the HDFS file
         // _collector is a private member variable of type SpoutOutputCollector set in the open method;
         _collector.emit(new Values(line));
      }
   } catch (Exception e) {
      _collector.reportError(e);
      LOG.error("HDFS spout error {}", e);
   }
}

关于hadoop - 将 HDFS 数据流式传输到 Storm(又名 HDFS spout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232642/

相关文章:

hadoop - 在Hive中产生较大结果的最佳方法是什么

java - 有没有办法强制 hadoop 作业查看下划线文件夹?

java - Storm 2.0.0 内存不足

hadoop - 检查HDFS目录大小的方法?

apache-storm - 将storm的字数统计拓扑与kafka集成

apache-storm - Storm spout - 如何使用 >1 个线程仅从文本文件中读取所有行一次?

Hadoop:MapReduce:节点选择

python - 找不到 Pyspark 模块

hadoop - HDFS与本地文件将数据加载到Hive表中

command-line - HDFS命令行中抛出异常