SPARK

作者: youngYmca | 来源:发表于2017-02-28 15:32 被阅读14次

    RDD

    RDD(Resilient Distributed Datasets)即弹性分布式数据集。即使用RDD以及对应的transform/action等操作来执行分布式计算。弹性:即可伸缩,由于RDD的数据的存储是数据+算子的结构存储。即RDD的每个数据区中的数据不一定就是真实的数据。比如说(V1,1) a => a + 1 就是对(V1,1)这样的键值对的value进行加1操作。只有在真正调用的时候才会返回具体的结果。

    SPARK与HADOOP

    • spark与hadoop都有MapReduce的通用的并行计算框架,但是不同的是spark的MapReduce处理的结果会根据配置缓存到内存,或者磁盘中。下次计算效率会更高。
    • Spark更适合于迭代运算比较多的运算,因为它的可伸缩性,不会出现过多的计算过程的临时RDD。
    • Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。spark还提供了map, filter, flatMap, sample, groupByKey, reduceByKey, union, join等一系列操作。可以进行更复杂的数据计算。
    • spark通过checkpoint来实现容错。即对那些运算量比较大,计算时间比较长的RDD进行设置checkpoint。允许Sparkstreaming周期性的将程序的数据,保存到可靠系统。
    • Spark提供了丰富的Scala, Java, Python API及交互式Shell,兼容多种语言。
    • Spark兼容Hadoop,spark可以读取HDFS数据。

    快速上手

    gradle配置:

    compile("org.apache.spark:spark-core_2.10:1.1.0")
    

    JavaSparkContext:

    SparkConf conf = new SparkConf().setAppName("MySpark")
                                            .setMaster("local")//master地址,这里使用本地模式
                                            .set("spark.executor.memory", "128m")//每个executor所使用的内存。;
            return new JavaSparkContext(conf);
    

    获取RDD数据:

    JavaRDD<String> lines = javaSparkContext.textFile(path).cache();//这里可以直接读取本地文件,也可以读取hdfs数据。
    
    

    得到lines后就可以进行一系列的运算操作了。比如计算每个单词的个数。

    Map<String, Long> result = lines.flatMap(s -> Arrays.asList(s.split(" "))).countByValue();
    
    

    相关文章

      网友评论

          本文标题:SPARK

          本文链接:https://www.haomeiwen.com/subject/drlzwttx.html