RDD
RDD(Resilient Distributed Datasets)即彈性分布式數(shù)據(jù)集及汉。即使用RDD以及對(duì)應(yīng)的transform/action等操作來(lái)執(zhí)行分布式計(jì)算。彈性:即可伸縮坷随,由于RDD的數(shù)據(jù)的存儲(chǔ)是數(shù)據(jù)+算子的結(jié)構(gòu)存儲(chǔ)。即RDD的每個(gè)數(shù)據(jù)區(qū)中的數(shù)據(jù)不一定就是真實(shí)的數(shù)據(jù)温眉。比如說(shuō)(V1,1) a => a + 1 就是對(duì)(V1,1)這樣的鍵值對(duì)的value進(jìn)行加1操作育叁。只有在真正調(diào)用的時(shí)候才會(huì)返回具體的結(jié)果豪嗽。
SPARK與HADOOP
- spark與hadoop都有MapReduce的通用的并行計(jì)算框架,但是不同的是spark的MapReduce處理的結(jié)果會(huì)根據(jù)配置緩存到內(nèi)存豌骏,或者磁盤中。下次計(jì)算效率會(huì)更高窃躲。
- Spark更適合于迭代運(yùn)算比較多的運(yùn)算,因?yàn)樗目缮炜s性蒂窒,不會(huì)出現(xiàn)過多的計(jì)算過程的臨時(shí)RDD荞怒。
- Spark提供的數(shù)據(jù)集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作褐桌。spark還提供了map, filter, flatMap, sample, groupByKey, reduceByKey, union, join等一系列操作∠笥可以進(jìn)行更復(fù)雜的數(shù)據(jù)計(jì)算。
- spark通過checkpoint來(lái)實(shí)現(xiàn)容錯(cuò)砾淌。即對(duì)那些運(yùn)算量比較大,計(jì)算時(shí)間比較長(zhǎng)的RDD進(jìn)行設(shè)置checkpoint汪厨。允許Sparkstreaming周期性的將程序的數(shù)據(jù),保存到可靠系統(tǒng)劫乱。
- Spark提供了豐富的Scala, Java, Python API及交互式Shell,兼容多種語(yǔ)言要拂。
- Spark兼容Hadoop,spark可以讀取HDFS數(shù)據(jù)脱惰。
快速上手
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")//每個(gè)executor所使用的內(nèi)存拉一。;
return new JavaSparkContext(conf);
獲取RDD數(shù)據(jù):
JavaRDD<String> lines = javaSparkContext.textFile(path).cache();//這里可以直接讀取本地文件,也可以讀取hdfs數(shù)據(jù)蔚润。
得到lines后就可以進(jìn)行一系列的運(yùn)算操作了。比如計(jì)算每個(gè)單詞的個(gè)數(shù)嫡纠。
Map<String, Long> result = lines.flatMap(s -> Arrays.asList(s.split(" "))).countByValue();