Apache Spark
Apache Spark现在已经成为一种统一化的大数据处理引擎,它通过数据共享抽象Resilient Distributed Datasets (RDDs),来支持各种各样的数据处理工作,像SQL查询,batch处理,streaming,machine learning以及graph处理。
Spark编程模型
RDD抽象
最关键的数据抽象是RDDs,它是一堆对象的集合,并被partition到cluster下的多个机器中,并保证数据不丢失。那么问题来了:
-
如何创建一个RDD
spark提供了很多称之为
transformations
的函数,用来创建RDDs,例如map,filter,groupby等。 -
如何操纵RDD
RDD对外暴露了各种函数式编程API,支持多种语言如Java,Python,R以及Scala。用户只需要向RDD传递一个local function,就可以操纵cluster中的RDDs。
举例如下:
lines = spark.textFile(“hdfs://...”)
errors = lines.filter(s => s.startsWith(“ERROR”))
println(“Totalerrors:“+errors.count())
上面首先通过HDFS的一个文件创建一个RDD,然后调用filter函数来过滤包含ERROR的行,并将行数打印输出。其中比较特别的地方是filter传入的参数,是一个closure(闭包)。在Spark编程中,用户可以向Spark传入各种lib function,user-define functions甚至于外部引用的变量,这些会将这些变量以read-only的方式copy到cluster中的worker节点上。