尽管Spark相对于Hadoop而言具有较大优势,但Spark并不能完全替代Hadoop
Hadoop的基于进程的计算和Spark基于线程方式优缺点?
① local 本地模式(单机)
本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境
② standalone 独立集群模式
Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境
③ standalone-HA 高可用模式
生产环境使用
基于 standalone 模式,使用 zk 搭建高可用,避免 Master 是有单点故障的。
④ on yarn 集群模式
生产环境使用
好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。
⑤ on mesos 集群模式
国内使用较少
运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算。
⑥ on cloud 集群模式
中小公司未来会更多的使用云服务
比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon 的 S3。
- Master:集群资源管理(类同ResourceManager)
- Worker:单机资源管理(类同NodeManager)
- Driver:单任务管理者(类同ApplicationMaster)
- ?Executor:单任务执行者(类同YARN容器内的Task)
Local 下的角色分布:资源管理:Master:Local进程本身Worker:Local进程本身任务执行:Driver:Local进程本身Executor:不存在,没有独立的Executor角色, 由Local进程(也就是Driver)内的线程提供计算能力
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import java.util.Arrays;
import java.util.List;
public class demo1 {
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setAppName("MapExample")
.setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
// 创建输入RDD
JavaRDD<Integer> inputRDD = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5));
System.out.println(inputRDD.getNumPartitions());
// 应用map()操作将每个元素加倍
JavaRDD<Integer> outputRDD = inputRDD.map(x -> x * 2);
// 打印输出RDD的内容
List<Integer> outputList = outputRDD.collect();
for (Integer num : outputList) {
System.out.println(num);
}
// 关闭SparkContext
sc.close();
}
}
?
12
2
4
6
8
10