标签(空格分隔): Spark
学习中的知识点:函数式编程、泛型编程、面向对象、并行编程。
任何工具的产生都会涉及这几个问题:
- 现实问题是什么?
- 理论模型的提出。
- 工程实现。
思考: 数据规模达到一台机器无法处理的时候,如何在有限的时间内对整个数据集进行遍历及分析?
Google针对大数据问题提出的一些解决方案:
- MapReduce: 计算框架;
- GFS:数据存储
- BigTable:NoSQL始祖。
Hadoop是根据MapReduce和GFS两大论文所做的开源实现,因此,它主要解决2大问题:数据存储,分布式计算框架。
YARN是Hadoop2和Hadoop1的最大区别,将集群管理本身独立出来。而计算模型则更加专注于问题本身。
Spark简介
Spark是由UC Berkeley的AMPLab出品的,主要创作者是Matei Zaharia. Spark与MapReduce位于Hadoop生态圈的同一层,主要解决分布式计算框架的问题。
Spark与Hadoop有以下关系:
- Spark和Hadoop中的MapReduce位于同一层次;
- Spark可以部署在YARN(专门管理集群工作的)上;
- Spark支持HDFS文件系统的访问。
Mac Scala安装
-
使用brew安装:
brew install scala
-
下载包安装
tar zxvf ~/Download/scala-2.12.1.tgz #解压
mv ~/Download/scala-2.12.1 ~/Download/scala #重命名
mv ~/Download/scala /usr/local/share/ #将文件夹放到合适的位置修改环境变量,如果不是管理员可使用 sudo 进入管理员权限,修改配置文件profile,在文件的末尾加入:
export PATH="$PATH:/usr/local/share/scala/bin" -
验证
$ scala
显示:Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_40).
Type in expressions to have them evaluated.
Type :help for more information.
Mac Spark安装
-
使用brew安装
$ brew install apache-spark
检测是否安装成功
cd /usr/local/Cellar/apache-spark/1.3.0/bin/
- 输入:
./spark-shell
启动spark
WordCount in spark-shell
在spark-shell中完成单词统计:
val file = sc.textFile("/usr/local/Cellar/apache-spark/1.3.0/README.md")
// 以空格为拆分标志,将文件中的每一行分割为多个单词
val words = file.flatMap(line => line.split(" "))
// 对每一个单词进行计数
val wordNumber = words.map(w => (w, 1))
// 将单词进行分类合并,计算每个单词总的出现次数
val wordCounts = wordNumber.reduceByKey(_+_)
//将所有单词及其出现次数打印出来
wordsCounts.foreach(println)
上述工作的简单表述形式:
sc.textFile("/usr/local/Cellar/apache-spark/1.3.0/README.md")
.flatMap(line => line.split(" "))
.map(w => (w, 1))
.reduceByKey(_+_)
.foreach(println)