Spark官方网站
http://spark.apache.org
Spark通用性解释
Spark的特点
官方网站都有。目前支持Java,Scala, Python,R。推荐使用Java和Scala,spark2中对python的支持不够好。
Spark的数据源
- HDFS,
- HBase,
- Cassandra(类似于hbase数据库,国外用的多)
- Hive,
- Tachyon(基于内存的分布式的文件系统, 阿里出的http://www.alluxio.org/,比较重要)
Spark的四种部署模式
- hadoop 模式(spark on yarn)。用yarn来管理spark的资源,也是国内用的最多的模式。
- Mesos模式。Mesos一个类似于yarn的资源管理器,国内用的少,国外多。
- Standalone模式。上面两种都不是自己管理资源,使用第三方来管理,而standalone模式是spark自己来管理资源,多内用的比较多
- 部署到云端
验证集群是否好用
验证spark集群是否可用
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --num-executors 1 --driver-memory 500m --executor-memory 500m --executor-cores 1 lib/spark-examples-1.5.2-hadoop2.5*.jar 10
验证结果如下:
Pi is roughly 3.1411
用scala编写完简单的运算后,可以在localhost:4040上查看
运行spark有两种:
- 本地运行
bin/spark-submit --master local --class org.apache.spark.examples.SparkPi lib/spark-examples-1.5.2-hadoop2.6.0-cdh5.4.4.jar 5
本地运行会直接输出结果
- 分布式运行
bin/spark-submit --master yarn-cluster --class org.apache.spark.examples.SparkPi lib/spark-examples-1.5.2-hadoop2.6.0-cdh5.4.4.jar 5
而分布式运行的结果在
cd $HADOOP_HOME/logs/userlogs/
scala 运行例子
val lines = sc.textFile("hdfs://master:9000/input0917/qqFriend.txt")
val lineLengths = lines.map(s => s.length)
val totalLength = lineLengths.reduce((a, b) => a + b)
输出:
totalLength: Int = 188
RDD
Spark架构
transformation 和action 原理
Spark支持两种RDD操作: transformation and action.
transformation 会针对已有的RDD创建一个新的RDD,而action则主要对RDD进行最后的操作。transformation只是记录了对RDD的操作,并不会触发spark程序的执行,只有当transform之后接着一个action操作,那么所有的transformation才会执行。比如
val file=sc.textFile("hdfs://hadoop1:9000/hello.txt").flatMap(line => line.split("\t"))
回车之后并没有触发spark的执行,因为flatMap等属于transformation操作
等到file.collect()后会看到spark的执行,collect是action操作
具体可以参考编程指南:http://spark.apache.org/docs/2.1.0/programming-guide.html
那为什么要有transformation和action呢?Spark可以通过这种lazy属性,来进行底层的spark应用程序的优化,避免过多的中间结果。
宽依赖和窄依赖
窄依赖,父RDD的每个分区只被一个子RDD的分区依赖。
宽依赖,父RDD的分区被多个子RDD的分区所依赖。
shuffle的原理
本例中前面三个RDD都不涉及到其他的节点,但是真实环境是需要其他节点的参与的。shuffle阶段需要大量的磁盘IO,序列化与反序列化,网络数据的传输,所以spark很大的性能损耗都在shuffle上,所以有必要进行调优。
转自:https://blog.csdn.net/youngbit007/article/details/78085427