apache-spark - 处理 Spark Streaming rdd 并存储到单个 HDFS 文件

标签 apache-spark hive hdfs spark-streaming

  1. 我正在使用 Kafka Spark Streaming 来获取流数据。

    val lines = KafkaUtils.createDirectStream[Array[Byte], String, DefaultDecoder, StringDecoder](ssc, kafkaConf, Set(topic)).map(_._2)
    
  2. 我正在使用这个 DStream 并处理 RDD

    val output = lines.foreachRDD(rdd => 
            rdd.foreachPartition { partition => 
                partition.foreach { file => runConfigParser(file)}
    })
    
  3. runConfigParser 是一种 JAVA 方法,它解析文件并生成必须保存在 HDFS 中的输出。因此,多个节点将处理 RDD 并将输出写入一个 HDFS 文件。因为我想在 HIVE 中加载这个文件。

我应该输出 runConfigParser 的结果并使用 sc.parallze(output).saveAsTextFile(path) 以便我的所有节点都将 RDD 输出写入单个 HDFS 文件.?这样的设计有效吗?

我将在 HIVE 中加载这个单个 HDFS 文件(该文件将作为其流数据不断更新)并使用 Impala 进行查询。

最佳答案

没有。因为您想要一个 HDFS 文件,saveAsTextFile 会为 RDD 分区创建许多 HDFS 文件,无法满足您的要求。

为了获取一个 HDFS 文件,reduce/collect 输出并调用 HDFS Java API 来创建一个 HDFS 文件。此方法效率低下,因为所有输出都需要在最后一个 Spark 操作时到达 Spark 驱动程序。

关于apache-spark - 处理 Spark Streaming rdd 并存储到单个 HDFS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666361/

相关文章:

jdbc - 将 HiveServer2 指向 MiniMRCluster 进行 Hive 测试

hadoop - HDFS节点之间如何拆分数据?

hadoop - 名称节点处于安全模式。无法离开

python - 获取pyspark中执行者任务的任务id

hadoop - 将文件记录到Hive

python - PySpark:在 RDD 中使用对象

hadoop - Hive - 外部表创建

hadoop - 同时使用HBase做小数据集和大数据分析?

java - 如何将列表对象转换为 JavaDStream Spark?

scala - 在没有重复列的情况下连接多个条件