【问题标题】:How to use Hadoop InputFormats In Apache Spark?如何在 Apache Spark 中使用 Hadoop 输入格式?
【发布时间】:2014-01-27 17:36:17
【问题描述】:

我在 Hadoop 中有一个类 ImageInputFormat,它从 HDFS 读取图像。如何在 Spark 中使用我的 InputFormat?

这是我的ImageInputFormat

public class ImageInputFormat extends FileInputFormat<Text, ImageWritable> {

    @Override
    public ImageRecordReader createRecordReader(InputSplit split, 
                  TaskAttemptContext context) throws IOException, InterruptedException {
        return new ImageRecordReader();
    }

    @Override
    protected boolean isSplitable(JobContext context, Path filename) {
        return false;
    }
}  

【问题讨论】:

    标签: hadoop hdfs apache-spark


    【解决方案1】:

    SparkContext 有一个名为hadoopFile 的方法。它接受实现接口org.apache.hadoop.mapred.InputFormat的类

    它的描述是“为具有任意 InputFormat 的 Hadoop 文件获取 RDD”。

    还可以查看Spark Documentation

    【讨论】:

    • 谢谢~我现在明白了。相反,我使用 newAPIHadoopFile 来完成这项工作。但是我有一个新问题,这些图像将全部存储在 hadoopRDD 中还是我可以设置 RDD 容量,当 RDD 已满时,其余数据将存储在磁盘中?此外,如果数据太大,是否会影响性能?输入有500G图像。再次感谢您。
    • 抱歉,我并不是真正的 Spark 专家。我希望其他人可以回答它。
    【解决方案2】:

    图像都存储在 hadoopRDD 中?

    是的,将保存在 spark 中的所有内容都是 rdds

    可以设置RDD的容量,当RDD满了,剩下的数据会存到磁盘吗?

    spark 中的默认存储级别是 (StorageLevel.MEMORY_ONLY) ,使用 MEMORY_ONLY_SER,这样更节省空间。请参考 spark 文档 > scala 编程 > RDD 持久性

    数据太大会影响性能吗?

    随着数据大小的增加,它也会影响性能。

    【讨论】:

    • 非常感谢!就在刚才,我对 java.lang.OutOfMemoryError: Java heap space 感到困惑。所以根据你的回复,存储级别设置可能是问题!我的集群有 1 个主节点和 11 个从节点。每个节点都有 6G 内存。在我的程序中,我将 spark.executor.memory 设置为 3g。待处理的数据约为22g,其中包含10000张图像。再次感谢您:)
    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2016-12-24
    相关资源
    最近更新 更多