spark简介
- 定义:
Apache Spark是一个用于大规模数据处理的统一分析引擎。 - 特性:
- 快速:针对批量和实时数据均有很好的性能
具体体现在三方面:DAG调度器(Spark-core)、查询优化(SparkSQL)、物理执行引擎(钨丝计划) - 易用性:快速的通过java、python、scala、R等等进行应用程序开发。常见的数据操作大概为80多个。
- 普遍性:结合不同平台的操作:SQL,Streaming、MLlib、图计算等
- 运行在不同平台:包括:hadoop、mesos、standlone、云端等等,并可以访问不同的数据源。
- 快速:针对批量和实时数据均有很好的性能
spark环境的搭建(单机版)
-
选择你所需的spark版本(发布时间间隔比较长的版本越稳定),我的spark 2.1.2 + scala 2.11.8
-
官网下载 spark 压缩包
-
将压缩包上传到集群,并解压到指定路径
上传压缩包:$cp /mnt/hgfs/share/tools/spark-2.1.2-bin-hadoop2.7.tgz
解压压缩包:$tar -zxvf spark-2.1.2-bin-hadoop2.7.tgz
删除压缩包:$rm spark-2.1.2-bin-hadoop2.7.tgz
-
创建软链接
$ln -s spark-2.1.2-bin-hadoop2.7/ spark
-
修改环境变量
$gedit ~/.bash_profile
追加以下代码:(你自己的 spark 安装存放目录)#spark export SPARK_HOME=/home/dragon/soft/spark export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
修改完毕后记得 source 该文件,重新加载使其生效
$source ~/.bash_profile
-
测试,出现下面界面说明 spark 的单机版安装成功
spark集群管理器的搭建步骤(两种模式)
1.如果当前集群中资源调度方式采用的是Hadoop yarn的话,那么Spark集群安装建议spark on hadoop/yarn
2.如果当前集群为新建集群,无其他资源调度模式时,Spark建议采用spark on standalone 独立模式。
选择不同的集群模式就有不同的集群调优方式
如何选择合适的集群管理器:
第一种:独立模式集群的搭建
-
修改【$SPARK_HOME/conf/spark-env.sh】,添加两个属性,注意“=”左右不能含有空格!
$>cp spark-env.sh.template spark-env.sh
【先将模板配置文件复制出来】
$>vi spark-env.sh
JAVA_HOME=/home/hadoop/soft/jdk # 你所配置的 java jdk 路径 SPARK_MASTER_HOST=master # 修改spark的主节点名称 SPARK_MASTER_PORT=7077 # 默认端口号,也可以不用设置
-
修改【$SPARK_HOME/conf/slaves】从节点配置文件
$>cp slaves.template slaves
$>vi slaves
【你的哪些节点作为从节点,就将从节点的名称写入,我的是三个】slave01 slave02 slave03
-
将配置好的Spark安装包发送至其他Slave节点上
$>scp -r spark-2.1.2-bin-hadoop2.7/ dragon@slave01:~/soft/
$>scp -r spark-2.1.2-bin-hadoop2.7/ dragon@slave02:~/soft/
$>scp -r spark-2.1.2-bin-hadoop2.7/ dragon@slave03:~/soft/
-
分别在所有的Slave节点上,创建spark的软链接,再配置Spark的环境变量
slave01 $ln -s spark-2.1.2-bin-hadoop2.7/ spark
slave02 $ln -s spark-2.1.2-bin-hadoop2.7/ spark
slave03 $ln -s spark-2.1.2-bin-hadoop2.7/ spark
-
分别在Slave节点上修改【/home/dragon/.bash_profile】追加以下代码:
#spark install export SPARK_HOME=/home/dragon/soft/spark export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
修改后 source 该文件,使其生效 !!!$>
source ~/.bash_profile
-
开启standalone集群
$>start-master.sh
$>start-slaves.sh
-
测试访问
打开Spark Standalone服务端WebUI地址:
http://master:8080
开启Spark的应用程序,shell命令,出现如下界面,配置成功
$spark-shell --master spark://master:7077
//简单测试
scala> val array1=Array(1,2,3,4,5)
array1: Array[Int] = Array(1, 2, 3, 4, 5)
scala> array1.head
res2: Int = 1
scala> array1.length
length lengthCompare
scala> array1.length
res3: Int = 5
第二种集群模式搭建:Spark On Yarn 资源调度方式是 Hadoop yarn
-
修改【$SPARK_HOME/conf/spark-env.sh】,添加一个属性,注意“=”左右不能含有空格!
$vi $SPARK_HOME/conf/spark-env.sh
【设置你安装 Hadoop 的配置文件的路径】HADOOP_CONF_DIR=/home/dragon/soft/hadoop/etc/hadoop
-
修改完毕后,将【$SPARK_HOME/conf/spark-env.sh】分发至所有Slave节点
$scp spark-env.sh dragon@slave01:~/soft/spark/conf/
$scp spark-env.sh dragon@slave02:~/soft/spark/conf/
$scp spark-env.sh dragon@slave03:~/soft/spark/conf/
-
修改 Hadoop 上的 yarn 参数
在【$HADOOP_HOME/etc/hadoop/yarn-site.xml】文件中,修改以下属性
【 这两个参数的意思是说是否启动一个线程检查每个任务正使用的物理内存量和虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true】<property> <description>是否对容器实施物理内存限制</description> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <description>是否对容器实施虚拟内存限制</description> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
-
修改完毕后远程拷贝 yarn-site.xml 配置文件到其他节点
$>scp $HADOOP_HOME/etc/hadoop/yarn-site.xml dragon@slave01:~/soft/hadoop/etc/hadoop
$>scp $HADOOP_HOME/etc/hadoop/yarn-site.xml dragon@slave02:~/soft/hadoop/etc/hadoop
$>scp $HADOOP_HOME/etc/hadoop/yarn-site.xml dragon@slave03:~/soft/hadoop/etc/hadoop
-
开启Spark on yarn模式
$>zkServer.sh start
(所有节点执行)
$>start-dfs.sh
$>start-yarn.sh
-
开启spark会话,有如下界面则测试成功
$>spark-shell --master yarn
-
可在
http://master:8088
WebUI下,点击【application】–> 【ApplicationMaster】
相当于打开 http://192.168.253.10:4040 界面。
两种集群模式都开启后,守护进程的变化:
【master】
5489 ResourceManager //RM
5937 SparkSubmit //spark-shell --master yarn
4497 DFSZKFailoverController //zkfc
6530 Jps
6450 SparkSubmit //spark-shell --master spark://mster:7077
4309 JournalNode //JNS
3831 QuorumPeerMain //ZOOKEEPER
3993 NameNode //NM
3179 Master //standalone的主节点进程
【slave01】
4032 ExecutorLauncher //spark on yarn开启的AppMaster
4068 CoarseGrainedExecutorBackend //spark on yarn开启的Executor(执行器)
4197 CoarseGrainedExecutorBackend //spark on yarn开启的Executor(执行器)
3287 QuorumPeerMain //ZOOKEEPER
3864 NodeManager //NM
4090 CoarseGrainedExecutorBackend //standalone的Worker开启的Executor(执行器)
2908 Worker //standalone的Worker进程
3373 DataNode //DN
4237 Jps
3471 JournalNode //JNS
【slave02】
3590 JournalNode //JNS
3462 DataNode //DN
4631 CoarseGrainedExecutorBackend //spark on yarn开启的Executor(执行器)
3688 DFSZKFailoverController //ZKFC
4105 NodeManager //NM
4333 CoarseGrainedExecutorBackend //standalone的Worker开启的Executor(执行器)
2925 Worker //standalone的Worker进程
4718 Jps
3310 QuorumPeerMain //ZOOKEEPER
3390 NameNode //NN