在Mesos上运行Spark
来源:互联网 发布:国家统计局怎么查数据 编辑:程序博客网 时间:2024/04/29 05:10
实验环境:Red Hat 6、spark-1.3.1-bin-hadoop2.4、mesos-0.21.0、hadoop-2.5.2、jdk1.7、scala-2.10.4
本文主要记录Spark运行在Mesos上的环境搭建。
各节点软件:
IP主机名安装软件或运行的进程192.168.70.130worker00Mesos Master、Mesos Slave、Hadoop DataNode、Spark spark-shell、jdk、scala192.168.70.131worker01Mesos Master、Mesos Slave、Hadoop NameNode、jdk、scala192.168.70.132worker02Mesos Master、Mesos Slave、Hadoop NameNode、jdk、scala192.168.70.135worker05ZooKeeper、Hadoop DataNode、jdk192.168.70.136worker06ZooKeeper、Hadoop DataNode、jdk192.168.70.137worker07ZooKeeper、Hadoop DataNode、jdk部署步骤:
步骤1、安装jdk和scala。
略。
步骤2、部署ZooKeeper集群。
可以参考 Zookeeper 简要介绍和安装 和 ZooKeeper集群搭建 这两篇文章。
步骤3、部署Mesos集群。
这里采用High Availability。Mesos集群部署可以参考我之前的文章: Mesos单点Master集群部署和High Availability集群部署
步骤4、下载Spark二进制包。
想要在mesos集群上运行Spark,那么Spark二进制包自然是必不可少的。可以去Apache Spark 官网下载一个预先编译好的包,点击这里进入下载页面:Download Spark。
步骤5、上传Spark包
当Mesos集群在Mesos Slave上第一次运行一个任务时,那个slave必须有一个Spark二进制包来在后端运行Spark Mesos executor。可以把这个二进制包上传到任何Hadoop可访问的URI上,包括通过http://访问HTTP,通过s3n://来访问Amazon简单存储服务,或者通过hdfs://来访问HDFS。我这里采用的HDFS,所以需要部署Hadoop集群,并且Hadoop集群采用High Availability,部署Hadoop集群可以参考Hadoop 2.4.1集群搭建。当然您也可以其他方法。
上传包之前需要对这个二进制包解压后,在 spark-env.sh中添加一个环境变量JAVA_HOME,然后再打成tgz包上传到HDFS上。
1)将下载好的包解压:tar -zxvf spark-1.3.1-bin-hadoop2.4.tgz
2) 修改conf下的spark-env.sh,添加JAVA_HOME环境变量。spark-env.sh这个文件由spark-env.sh.template复制而来。
3) 压缩:tar -zcvf spark-1.3.1-bin-hadoop2.4.tgz spark-1.3.1-bin-hadoop2.4
4) 将压缩好的spark包上传到hdfs。我在hdfs根目录下新建了一个spark文件夹,spark-1.3.1-bin-hadoop2.4.tgz放在该文件夹下。
注意:Apache Spark 官网上的部署文档中是没有这个步骤的,它直接将下载好的二进制包进行了上传,这样会使RDD执行到action这步骤时,出问题。查看Mesos Slave日志可以发现如下的提示:
步骤6:配置文件添加环境变量
1、修改Spark相关的配置文件
只需要在Mesos Master上的一个节点中对Spark解压,进行配置即可。
1) 在spark-env.sh文件中添加如下三个环境变量。
export MESOS_NATIVE_JAVA_LIBRARY=<path to libmesos.so>. 这个目录是由Mesos决定的:一般是 <prefix>/lib/libmesos.so , prefix 默认是/usr/local;
export SPARK_EXECUTOR_URI=<上面的spark-1.3.1-bin-hadoop2.4上传到的URL> ;
export Master=<mesos集群Master所在节点>,Mesos Master URL 是这样的形式 :单点Master Mesos集群:mesos://host:5050 或者 使用ZooKeeper的多个Master的Mesos集群: mesos://zk://ZooKeeperHost1:2181,ZooKeeperHost1:2181,ZooKeeperHost1:2181/path
注意,下图中export SPARK_EXECUTOR_URI=hdfs://ns1/spark/spark-1.3.1-bin-hadoop2.4.tgz 中的“ns1”是Hadoop集群的hdfs的逻辑命名空间,因为我用ZooKeeper实现了对NameNode的高可靠性。如果单个NameNode的Hadoop集群可以直接使用“主机名(或者IP):端口” 来替代。
2) 在 spark-defaults.conf中添加如下环境变量:
其中spark.master和spark.executor.uri这两个环境变量的意思与spark-env.sh中的MASTER和 SPARK_EXECUTOR_URI一样。至于spark.mesos.coarse这个值默认是false的,我这里设为true,因为在我机子上,设为true时,对Spark的任务进行action操作时会反复报“Initial job has not accepted any resource”的错误。官方文档对spark.mesos.coarse这个参数的解释是这样的:If set to "true", runs over Mesos clusters in "coarse-grained" sharing mode, where Spark acquires one long-lived Mesos task on each machine instead of one Mesos task per Spark task. This gives lower-latency scheduling for short queries, but leaves resources in use for the whole duration of the Spark job.意思大概是:如果设置为“true”,在Mesos集群上以粗粒度模式运行,Spark在每台机子上获取一个长久存活的Mesos任务,而不是每个Spark任务一个Mesos任务。
2、修改Mesos配置文件(步骤5中采用HDFS上传包时需要该步骤)
对Mesos集群的mesos-slave-env.sh配置文件加入一个MESOS_hadoop_home环境变量。
如果该变量不加,Mesos就不会知道Hadoop安装在哪里。在对Spark的任务进行action操作时会反复报“Initial job has not accepted any resource”的错误。查看Mesos Slave的日志可以发现,它不认识hadoop这个命令,从而无法从HDFS上下载我们之前上传的spark-1.3.1-bin-hadoop2.4.tgz 这个包。如下图:
步骤7:启动
1) 启动ZooKeeper集群: ./zkServer.sh start
2) 启动Mesos集群:./mesos-start-cluster.sh
3) 启动HDFS:./start-dfs.sh
4) 最后启动spark-shell: ./spark-shell
步骤8:提交任务并查看
输入
val data = 1 to 1000;
val distData = sc.parallelize(data);
distData.filter(_< 10).collect()
进行测试:
参考网页:
Running Spark on Mesos
Run Apache Spark on Apache Mesos
spark with Hadoop 2.3.0 on Mesos 0.21.0 with error “sh: 1: hadoop: not found” on slave
Spark fun - Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
- 在Mesos上运行Spark
- spark+mesos安装运行
- apache mesos入门(6)——自定义framework在mesos上运行docker
- spring cloud/mesos:在mesos上运行高可用的eureka服务发现
- spring cloud/mesos:在mesos上运行spring cloud config配置服务
- spark在集群上运行
- 在 YARN 上运行 Spark
- 在集群上运行Spark
- spark部署:在YARN上运行Spark
- mesos上运行docker registry
- Running Spark on Mesos[ 安装及运行 ]
- spark-mesos运行自己编译的程序
- spark on mesos 两种运行模式
- Spark在Yarn上运行Wordcount程序
- 在windows上运行Spark Driver
- 通过SparkR在R上运行Spark
- 7.在集群上运行Spark
- 9.在Tachyon上运行Spark
- 6.10 UITableView
- DB2存储过程遇到的错误编号以及其含义
- 毕业课题之------------图像路面直方图建模
- 鱼眼拼接之Harris检测特征点
- 黑马程序员——基础篇——IO(关于hasNextDouble()的使用心得
- 在Mesos上运行Spark
- IOCP本质论
- LCA 最裸版
- 关于socket长连接的心跳包GOOD
- 使用Microsoft excel 2007 进行数据分析---环境配置
- 巴邻旁之桥
- 黑马程序员——基础篇——异常
- tomcat应答代码(经常出现的问题,看到好的总结就转来了)
- J2SE J2EE J2ME的区别