Programming Spark: Spark 概述

函数式编程 · horance · 于 发布 · 最后由 horance回复 · 423 次阅读
3

Waht's Spark

Apache Spark™ is a fast and general engine for large-scale data processing.

Spark技术栈

Spark优势

高性能

Run programs up to 100x faster than Hadoop MapReduce in memory, or 10x faster on disk.

Spark的性能归诸于以下原因:

  • 基于内存的迭代式计算
  • 基于DAG的执行引擎
  • 基于RDD的统一抽象模型
  • 出色的自动容错机制

易学易用

  • 多语言(Scala, Java, Python, R)
  • 函数式

Word Count为例,使用RDD算子的组合可方便地完成各种计算。

sc.textFile("hdfs://...")
  .flatMap(_.split(" "))
  .map((_, 1))
  .reduceByKey(_+_)

通用

One Stack to rule them all构建统一的技术栈

  • Spark SQL
  • Spark Streaming
  • Spark MLlib
  • Spark GraphX

近乎完美解决了大数据中三大应用场景。

  • Batch Processing
  • Streaming Processing
  • Ad-hoc Query

易集成,易部署

支持多种部署方式:

  • Standalone
  • Yarn
  • Mesos
  • EC2

支持多种外部数据源:

  • HDFS
  • HBase
  • Hive
  • Cassandra
  • S3

「软件匠艺社区」旨在传播匠艺精神,通过分享好的「工作方式」和「习惯」以帮助程序员更加快乐高效地编程。
共收到 1 条回复
3
horance · #1 ·

Word Count

Spark实现

sc.textFile("hdfs://...").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)

MapReduce实现

class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
  private final static IntWritable one = new IntWritable(1);
  private Text word = new Text();

  public void map(Object key, Text value, Context context) 
    throws IOException, InterruptedException {
    StringTokenizer itr = new StringTokenizer(value.toString());
    while (itr.hasMoreTokens()) {
      word.set(itr.nextToken());
      context.write(word, one);
    }
  }
}

class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  private IntWritable result = new IntWritable();

  public void reduce(Text key, Iterable<IntWritable> values, Context context) 
    throws IOException, InterruptedException {
    int sum = 0;
    for (IntWritable val : values) {
      sum += val.get();
    }
    result.set(sum);
    context.write(key, result);
  }
}

天下武功,唯快不破Spark不仅仅快,简直太Cool啦!

需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。