内容简介:
1. Spark简介
- 2009年,Spark诞生于 伯克利大学的AMPLab实验室 。最出Spark只是一个实验性的项目,代码量非常少,属于轻量级的框架。
- 2010年,伯克利大学正式开源了Spark项目。
- 2013年6月,Spark成为了Apache基金会下的项目,进入高速发展期。第三方开发者贡献了大量的代码,活跃度非常高
- 2014年2月 ,Spark以飞快的速度称为了 Apache的顶级项目 ,同时大数据公司Cloudera宣称加大Spark框架的投入来取代MapReduce
- 2014年4月,大数据公司MapR投入Spark阵营, Apache Mahout放弃MapReduce,将使用Spark作为计算引擎。
- 2014年5月,Spark 1.0.0 发布。
- 2015年~,Spark在国内IT行业变得愈发火爆,越来越多的公司开始重点部署或者使用Spark来替代MR2、Hive、Storm等传统的大数据并行计算框架
2. Spark是什么?
- Apache Spark™ is a unified analytics engine for large-scale data processing.
- 大规模数据集的统一分析引擎
- Spark是一个基于内存的通用并行计算框架,目的是让数据分析更加快速
-
Spark包含了大数据领域常见的各种计算框架
- spark core(离线计算)
- sparksql(交互式查询)
- spark streaming(实时计算)
- Spark MLlib (机器学习)
- Spark GraphX (图计算)
3. Spark能代替hadoop吗?
不完全对
因为我们只能使用spark core代替mr做离线计算,数据的存储还是要依赖hdfs
Spark+Hadoop的组合,才是未来大数据领域最热门的组合,也是最有前景的组合!
4. Spark的特点
-
速度
- 内存计算在速度上要比mr快100倍以上
- 磁盘计算在速度上要比mr快10倍以上
-
容易使用
- 提供了java scala python R语言的api接口
-
一站式解决方案
- spark core(离线计算)
- spark sql(交互式查询)
- spark streaming(实时计算)
- .....
-
可以运行在任意的平台
- yarn
- Mesos
- standalone
5. Spark的缺点
- JVM的内存overhead太大,1G的数据通常需要消耗5G的内存 (Project Tungsten 正试图解决这个问题 )
- 不同的spark app之间缺乏有效的共享内存机制(Project Tachyon 在试图引入分布式的内存管理,这样不同的spark app可以共享缓存的数据)
6. Spark vs MR
6.1 mr的局限性
- 抽象层次低,需要手工编写代码来完成,使用上难以上手
- 只提供两个操作,Map和Reduce,表达力欠缺
- 一个Job只有Map和Reduce两个阶段(Phase), 复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的
- 中间结果 (reduce的输出结果) 也放在HDFS文件系统中
- 延迟高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够
- 对于迭代式数据处理性能比较差
6.2 Spark解决了mr中的那些问题?
-
抽象层次低,需要手工编写代码来完成,使用上难以上手
- 通过spark中的RDD(Resilient distributed datasets)来进行抽象
-
只提供两个操作,Map和Reduce,表达力欠缺
- 在spark中提供了多种算子
-
一个Job只有Map和Reduce两个阶段
- 在spark中可以有多个阶段(stage)
-
中间结果也放在HDFS文件系统中(速度慢)
- 中间结果放在内存中,内存放不下了会写入本地磁盘,而不是HDFS
-
延迟高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够
- sparksql和sparkstreaming解决了上面问题
-
对于迭代式数据处理性能比较差
- 通过在内存中缓存数据,提高迭代式计算的性能
==因此,Hadoop MapReduce会被新一代的大数据处理平台替代是技术发展的趋势,而在新一代的大数据处理平台中,Spark目前得到了最广泛的认可和支持==
7. Spark的版本
- spark1.6.3 : scala的版本2.10.5
- spark2.2.0 : scala的版本2.11.8 (新项目建议使用spark2.x的版本)
- hadoop2.7.5
8. Spark单机版的安装
-
准备安装包spark-2.2.0-bin-hadoop2.7.tgz
tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz -C /opt/ mv spark-2.2.0-bin-hadoop2.7/ spark
-
修改spark-env.sh
export JAVA_HOME=/opt/jdk export SPARK_MASTER_IP=uplooking01 export SPARK_MASTER_PORT=7077 export SPARK_WORKER_CORES=4 export SPARK_WORKER_INSTANCES=1 export SPARK_WORKER_MEMORY=2g export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
-
配置环境变量
#配置Spark的环境变量 export SPARK_HOME=/opt/spark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
-
启动单机版spark
start-all-spark.sh
-
查看启动
http://uplooking01:8080
9. Spark分布式集群的安装
-
配置spark-env.sh
[root@uplooking01 /opt/spark/conf] export JAVA_HOME=/opt/jdk #配置master的主机 export SPARK_MASTER_IP=uplooking01 #配置master主机通信的端口 export SPARK_MASTER_PORT=7077 #配置spark在每个worker中使用的cpu核数 export SPARK_WORKER_CORES=4 #配置每个主机有一个worker export SPARK_WORKER_INSTANCES=1 #worker的使用内存是2gb export SPARK_WORKER_MEMORY=2g #hadoop的配置文件中的目录 export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
-
配置slaves
[root@uplooking01 /opt/spark/conf] uplooking03 uplooking04 uplooking05
-
分发spark
[root@uplooking01 /opt/spark/conf] scp -r /opt/spark uplooking02:/opt/ scp -r /opt/spark uplooking03:/opt/ scp -r /opt/spark uplooking04:/opt/ scp -r /opt/spark uplooking05:/opt/
-
分发uplooking01上配置的环境变量
[root@uplooking01 /] scp -r /etc/profile uplooking02:/etc/ scp -r /etc/profile uplooking03:/etc/ scp -r /etc/profile uplooking04:/etc/ scp -r /etc/profile uplooking05:/etc/
-
启动spark
[root@uplooking01 /] start-all-spark.sh
10. Spark高可用集群
先停止正在运行的spark集群
-
修改spark-env.sh
#注释以下这两行内容 #export SPARK_MASTER_IP=uplooking01 #export SPARK_MASTER_PORT=7077
-
添加内容
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=uplooking03:2181,uplooking04:2181,uplooking05:2181 -Dspark.deploy.zookeeper.dir=/spark"
-
分发修改的[配置
scp /opt/spark/conf/spark-env.sh uplooking02:/opt/spark/conf scp /opt/spark/conf/spark-env.sh uplooking03:/opt/spark/conf scp /opt/spark/conf/spark-env.sh uplooking04:/opt/spark/conf scp /opt/spark/conf/spark-env.sh uplooking05:/opt/spark/conf
-
启动集群
[root@uplooking01 /] start-all-spark.sh
[root@uplooking02 /] start-master.sh
11. 第一个Spark-Shell程序
spark-shell --master spark://uplooking01:7077 #spark-shell可以在启动时指定spark-shell这个application使用的资源(总核数,每个work上使用的内存) spark-shell --master spark://uplooking01:7077 --total-executor-cores 6 --executor-memory 1g #如果不指定 默认使用每个worker上全部的核数,和每个worker上的1g内存
sc.textFile("hdfs://ns1/sparktest/").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).collect
12. Spark中的角色
-
Master
- 负责接收提交的作业的请求
- master负责调度资源(在woker中启动CoarseGrainedExecutorBackend)
-
Worker
- worker中的executor负责执行task
-
Spark-Submitter===> Driver
- 提交spark应用程序给master
13. Spark提交作业的大体流程
以上所述就是小编给大家介绍的《大数据系列——Spark学习笔记之初识Spark》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 学习笔记:初识httpd
- golang学习笔记1:初识
- Kafka读书笔记 -- 初识Kafka
- Go语言小白笔记-(02)初识Go语言
- Istio 1.0学习笔记(六):初识Istio Gateway
- DPDK 源码的不完全笔记(一) 初识DPDK
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing Data-Intensive Applications
Martin Kleppmann / O'Reilly Media / 2017-4-2 / USD 44.99
Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, w......一起来看看 《Designing Data-Intensive Applications》 这本书的介绍吧!