Spark - 大数据Big Data处理框架
Spark是一個(gè)針對(duì)超大數(shù)據(jù)集合的低延遲的集群分布式計(jì)算系統(tǒng),比MapReducer快40倍左右。
Spark是hadoop的升級(jí)版本,Hadoop作為第一代產(chǎn)品使用HDFS,第二代加入了Cache來(lái)保存中間計(jì)算結(jié)果,并能適時(shí)主動(dòng)推Map/Reduce任務(wù),第三代就是Spark倡導(dǎo)的流Streaming。
Spark兼容Hadoop的APi,能夠讀寫(xiě)Hadoop的HDFS HBASE 順序文件等。
傳統(tǒng)Hadoop如下圖 性能慢原因有:磁盤(pán)IO 復(fù)制和序列化等等,涉及圖中的HDFS
而在Spark中,使用內(nèi)存替代了使用HDFS存儲(chǔ)中間結(jié)果:
Spark架構(gòu)圖
Spark的編程模型
彈性的分布數(shù)據(jù)集(RDD) :分布式對(duì)象集合能夠跨集群在內(nèi)存中保存。多個(gè)并行操作,失敗自動(dòng)恢復(fù)。
使用內(nèi)存集群計(jì)算, 內(nèi)存訪問(wèn)要比磁盤(pán)快得多。有Scala Java Python API,能夠從Scala和Python訪問(wèn)。
下面是一個(gè)簡(jiǎn)單的對(duì)日志log計(jì)數(shù)的代碼:
/*** SimpleJob.scala ***/
import spark.SparkContext
import SparkContext._
object SimpleJob {
def main(args: Array[String]) {
val logFile = "/var/log/syslog" // Should be some file on your system
val sc = new SparkContext("local", "Simple Job", "$YOUR_SPARK_HOME",
List("target/scala-2.9.3/simple-project_2.9.3-1.0.jar"))
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
運(yùn)行原理圖:
當(dāng)進(jìn)行filter操作是,是一種transformed RDD,RDD跟蹤這種轉(zhuǎn)換,當(dāng)有數(shù)據(jù)丟失失敗時(shí),重新計(jì)算 得到這個(gè)數(shù)據(jù)。
Spark支持物流logistic表達(dá)式,如下圖:
物流表達(dá)式相比Hadoop的遍歷性能:
支持以下數(shù)據(jù)分析操作:
Spark流處理
以推流方式處理數(shù)據(jù):
Shark
Shark是基于Spark上的“Hive”,看看基于hadoop的Hive:
而Shark的結(jié)構(gòu)圖:
Hive是記錄每行記錄一個(gè)對(duì)象,而shark是每列記錄:
執(zhí)行SQL時(shí)間對(duì)比:
總結(jié)
以上是生活随笔為你收集整理的Spark - 大数据Big Data处理框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python调用MongoDB使用心得
- 下一篇: Hbase 建表基本命令总结