• Spark读取HDFS小文件优化


    Spark读取HDFS目录,若该目录下存在大量小文件时,每个文件都会生成一个Task,当存在大量任务时,可能存在性能不足的问题,可以使用CombineTextInputFormat类代替TextInputFormat类进行优化,同时配合使用hadoop参数mapreduce.input.fileinputformat.split.maxsize

    
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapred.TextInputFormat;
    import org.apache.hadoop.mapred.lib.CombineTextInputFormat;
    import org.apache.spark.api.java.JavaRDD;
    import org.apache.spark.api.java.JavaSparkContext;
    import org.apache.spark.sql.SparkSession;
    import org.apache.spark.util.LongAccumulator;
    
    import java.io.IOException;
    
    public class HDFSFileCompare {
        public static void main(String[] args) throws IOException {
    
            SparkSession session = SparkSession.builder().getOrCreate();
            JavaSparkContext sc = JavaSparkContext.fromSparkContext(session.sparkContext());
            LongAccumulator basFileTotalCount = sc.sc().longAccumulator();
    
            
            String path = args[0];
    //        JavaRDD<String> basRDD = sc.hadoopFile(path, TextInputFormat.class, LongWritable.class, Text.class).map(p -> {
    //            return new String(p._2.getBytes(),0,p._2.getLength(),"gbk");
    //        });
    
    
    //一个split最大为64M,否则只会生成一个任务
            sc.hadoopConfiguration().set("mapreduce.input.fileinputformat.split.maxsize","67108864");
            JavaRDD<String> basRDD = sc.hadoopFile(path, CombineTextInputFormat.class, LongWritable.class, Text.class).map(p -> {
                return new String(p._2.getBytes(),0,p._2.getLength(),"gbk");
            });
            //System.out.println("helllllloll\n" +basRDD.count());
            basRDD.foreach(r -> {
                basFileTotalCount.add(1);
            });
            System.out.println("helllllloll\n" +basFileTotalCount.value());
    
        }
    }
  • 相关阅读:
    移动端web页面使用position:fixed问题
    登录的一些心得
    响应式网页设计
    xss(跨站脚本攻击),crsf(跨站请求伪造),xssf
    HTML5 离线功能介绍
    webapp开发经验和资料
    学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》
    Python下搜索文件
    从百度地图API接口批量获取地点的经纬度
    获取代理IP地址(BeautifulSoup)
  • 原文地址:https://www.cnblogs.com/darange/p/16062945.html
Copyright © 2020-2023  润新知