Hadoop 什么时候有文件;可拆分的“;?

Hadoop 什么时候有文件;可拆分的“;?,hadoop,apache-spark,hive,hdfs,file-format,Hadoop,Apache Spark,Hive,Hdfs,File Format,当我使用spark时,有时会在一个配置单元表中遇到一个大文件,有时会尝试在配置单元表中处理许多较小的文件 我知道在调优spark作业时,它的工作方式取决于文件是否可拆分。在cloudera的页面中,它说我们应该知道文件是否可拆分: …例如,如果您的数据以几个不可丢弃的大文件的形式到达 如何知道我的文件是否可拆分 如果文件可拆分,如何知道要使用的分区数 如果我试图编写一段可以在任何配置单元表上工作的代码,即上面描述的两种情况之一,那么在更多分区方面出错是否更好 考虑到Spark接受Hadoop输入

当我使用spark时,有时会在一个配置单元表中遇到一个大文件,有时会尝试在配置单元表中处理许多较小的文件

我知道在调优spark作业时,它的工作方式取决于文件是否可拆分。在cloudera的页面中,它说我们应该知道文件是否可拆分:

…例如,如果您的数据以几个不可丢弃的大文件的形式到达

  • 如何知道我的文件是否可拆分

  • 如果文件可拆分,如何知道要使用的分区数

  • 如果我试图编写一段可以在任何配置单元表上工作的代码,即上面描述的两种情况之一,那么在更多分区方面出错是否更好


  • 考虑到Spark接受Hadoop输入文件,请看下图

    只有
    bzip2
    格式的文件是可拆分的,其他格式如
    zlib、gzip、LZO、LZ4和Snappy
    格式是不可拆分的

    关于您对分区的查询,分区并不取决于您将要使用的文件格式。它取决于文件中的内容,如日期等分区列的值

    编辑1: 看看这个问题和这个关于Spark阅读zip文件的问题

    JavaPairRDD<String, String> fileNameContentsRDD = javaSparkContext.wholeTextFiles(args[0]);
            JavaRDD<String> lineCounts = fileNameContentsRDD.map(new Function<Tuple2<String, String>, String>() {
                @Override
                public String call(Tuple2<String, String> fileNameContent) throws Exception {
                    String content = fileNameContent._2();
                    int numLines = content.split("[\r\n]+").length;
                    return fileNameContent._1() + ":  " + numLines;
                }
            });
            List<String> output = lineCounts.collect();
    
    javapairdd fileNameContentsRDD=javaSparkContext.wholeTextFiles(args[0]);
    JavaRDD lineCounts=fileNameContentsRDD.map(新函数(){
    @凌驾
    公共字符串调用(Tuple2 fileNameContent)引发异常{
    字符串内容=文件名内容。_2();
    int numLines=content.split(“[\r\n]+”).length;
    返回fileNameContent._1()+“:”+numLines;
    }
    });
    列表输出=lineCounts.collect();
    
    编辑2:

    LZO文件可以拆分

    只要分割发生在块边界上,就可以分割LZO文件


    请参阅此处了解更多详细信息。

    因此,如果默认的hadoop文件不是可拆分的,那么
    sc.textFile()
    如何在hdfs文件上创建行的RDD?还是没有?如何确定我的文件格式?不可维护并不意味着文件将不被处理。这意味着数据位置已丢失。如果一个1 GB压缩的不可维护文件存储在8个不同节点的8个块中,则只会创建一个映射器来处理完整的不可维护文件。是的,我知道该文件仍将得到处理。但是,在spark中,RDD是否仍然可以将文件一行一行地拆分并处理它,或者它将作为一个整体处理它?从本质上讲,单词
    splittable
    如何影响spark处理文件的方式?可拆分文件允许处理分布在多个工作节点上。对于不可拆分,我已经更新了答案。LZO文件不可拆分是错误的。他们是。你只需要给它们编制索引。参见hadoop lzo项目。