Mesos上部署spark

标签: 硬件相关 Mesos | 发表时间:2015-12-18 16:12 | 作者:Litrin
出处:http://www.litrin.net

还是回到之前一直持续的 Mesos话题。在之前的环节里,我们已经尝试了Mesos的安装,Marathon守护服务以及相对比较主流的Mesos作为Hadoop的资源管理器的实际操作。这次就说说同属于伯克利出品的Spark。

其实spark最初0.7以前的版本还没有自己的资源管理系统,资源的调度都是通过Mesos来执行的。甚至还有小道消息说spark本身就是Mesos用来作为测试的一个项目派生出来。所以说,相比Hadoop+mesos的组合,Spark+Mesos作为大数据分析平台是更为原生态的。

曾经有人一直问过类似于“spark是否可以完整的替代hadoop?”之类的问题,我想说的是,hadoop最强大的地方是它的hdfs,而对于spark来说,它的优势在于将大数据的计算做到了极致的简化,但对于大数据来说,大容量的存储和高IO的读写也是一个复杂的工程,这正是Hadoop的价值所在。恰恰相反的是spark的流行只会加速Hadoop的发展。

OK,回到正题,还是要准备一套Mesos的环境,请参照 此文档

这里下载一份spark的安装包,到你的Mesos Master节点上。个人的建议是你可以选择“pre-built for hadoop的版本”,比如我用的 spark-1.5.2-bin-hadoop2.6.tgz

wget http://d3kbcqa49mib13.cloudfront.net/spark-1.5.2-bin-hadoop2.6.tgz

照例的解包之后,开始配置

cd <YOUR_SPARK_PATH>/conf 之后,vi spark-env.sh,内容其实挺简单的:

#!/usr/bin/env bash

export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos-0.24.0.so
export SPARK_EXECUTOR_URI=/usr/local/spark.tar.gz
#export SPARK_EXECUTOR_URI=hdfs://spark.tar.gz

好吧,这个地方有一个很大的坑,官方文档上都没有任何的提及,直到我在踩了很久之后才从这里爬出来。vi spark-defaults.conf。

spark.io.compression.codec lzf

全部弄好之后,将你的spark目录重新打包成tar.gz,然后分发到每一个slave节点下的/usr/local。官方文档是将这个文件上传到hdfs上,这个默认的配置已经被我注掉了,这仅仅只是个测试,我没有HDFS。

应该就差不多了,回到spark主目录,冒烟测试:

/usr/local/spark# bin/spark-shell --master mesos://10.239.21.100:5050

Welcome to
 ____ __
 / __/__ ___ _____/ /__
 _\ \/ _ \/ _ `/ __/ '_/
 /___/ .__/\_,_/_/ /_/\_\ version 1.5.2
 /_/

Using Scala version 2.10.4 (OpenJDK 64-Bit Server VM, Java 1.7.0_91)
Type in expressions to have them evaluated.
Type :help for more information.
I1218 16:00:58.975153 37814 sched.cpp:164] Version: 0.24.0
I1218 16:00:58.983880 37808 sched.cpp:262] New master detected at [email protected]:5050
I1218 16:00:58.985206 37808 sched.cpp:272] No credentials provided. Attempting to register without authentication
I1218 16:00:58.992024 37808 sched.cpp:640] Framework registered with 20151218-113549-3298160394-5050-19515-0052
Spark context available as sc.
....

....

scala> val a = sc.parallelize(2 to 1000) //手工输入
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:15

scala> a.collect //手工输入
res0: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177...
scala> exit //退出scala界面

中途省略的部分可能有部分报错,以我的经验是换成了官方的jdk1.8之后就OK。看起来openjdk也不是一直都靠谱的。

实验下python调用吧,还是写一个并发版的经典 “羊群繁殖”算法,由于我的集群有96个core,而在一个时间片上一个core只能做一个job,所谓大数据中多于core的任务分配数就是耍流氓,所以这个节点数就设置了96。

vi hog.py

from pyspark import SparkContext

if __name__ == "__main__":
 sc = SparkContext(appName="PythonHog")

 def f(i):
 if i < 2: return 1
 if i < 5: return f(i-1) + f(i-2)
 return f(i-1) + f(i-2) - f(i-5)

 count = sc.parallelize(range(0,35), 96).map(f).reduce(lambda a, b: b-a)
 print(count)

 sc.stop()

提交一个任务

bin/spark-submit --master mesos://10.239.21.100:5050 hog.py

PS: 相比python/Java/R语言来说,最适合Spark的编程语言是Scala。支持全面而且代码简单明了。不过我对这种非常容易写出过于变态的语法还是持一种谨慎态度的。

相关 [mesos spark] 推荐:

Mesos上部署spark

- - 开源小站
还是回到之前一直持续的 Mesos话题. 在之前的环节里,我们已经尝试了Mesos的安装,Marathon守护服务以及相对比较主流的Mesos作为Hadoop的资源管理器的实际操作. 这次就说说同属于伯克利出品的Spark. 其实spark最初0.7以前的版本还没有自己的资源管理系统,资源的调度都是通过Mesos来执行的.

Mesos与Openstack

- - 企业架构 - ITeye博客
本文是 Quora 上的一个问题,提问者对于私有云未来的发展趋势感到疑惑,Mesos和OpenStack的关系是怎样的,它们之间是否可以相互替代. 来自 Mesosphere以及Rackspace的专家们从OpenStack与Mesos的功能和产品定位上对这个问题进行了解读,它们之间的关系并非互相 替代,.

Apache Mesos的真实使用场景

- - ITeye资讯频道
【编者的话】文中内容来源于stackoverflow上的一个问题 ,提问者想知道Mesos在实际的使用中都有哪些使用场景,来自Twitter的工程师从容器编排、资源利用率、优先级和资源抢占、以及服务运行等几个角度,对问题进行了回答. 我尝试探究用户使用Mesos的原因究竟有哪些,以下是暂时列出的几个要点,不知道还有没有其他的例子.

使用Mesos和Marathon管理Docker集群

- - zzm
分 布式系统是难于理解、设计、构建 和管理的,他们将比单个机器成倍还要多的变量引入到设计中,使应用程序的根源问题更难发现. SLA(服务水平协议)是衡量停机和/或性能下降的标准,大多 数现代应用程序有一个期望的弹性SLA水平,通常按"9"的数量增加(如,每月99.9或99.99%可用性).    分布式系统通常是以静态分区,比如Akka/Play、 Spark/Hadoop、Storm和 Redis各自分区分组划分.

畅谈 Mesos 生态圈系列

- - 编程语言 - ITeye博客
Apache Mesos 是 Apache 基金会下的一个分布式资源管理框架,它被称为是分布式系统的内核. Mesos 结合容器化技术提供了有效的,跨分布式应用或框架的资源隔离和分享机制,可以做为 Hadoop、Mpi、Hypertable、Spark、 Elasticsearch 等各种分布式应用的资源管理平台.

Spark概览

- - 简单文本
Spark具有先进的DAG执行引擎,支持cyclic data flow和内存计算. 因此,它的运行速度,在内存中是Hadoop MapReduce的100倍,在磁盘中是10倍. 这样的性能指标,真的让人心动啊. Spark的API更为简单,提供了80个High Level的操作,可以很好地支持并行应用.

Spark与Mapreduce?

- - 崔永键的博客
我本人是类似Hive平台的系统工程师,我对MapReduce的熟悉程度是一般,它是我的底层框架. 我隔壁组在实验Spark,想将一部分计算迁移到Spark上. 年初的时候,看Spark的评价,几乎一致表示,Spark是小数据集上处理复杂迭代的交互系统,并不擅长大数据集,也没有稳定性. 但是最近的风评已经变化,尤其是14年10月他们完成了Peta sort的实验,这标志着Spark越来越接近替代Hadoop MapReduce了.

Spark迷思

- - ITeye博客
目前在媒体上有很大的关于Apache Spark框架的声音,渐渐的它成为了大数据领域的下一个大的东西. 证明这件事的最简单的方式就是看google的趋势图:. 上图展示的过去两年Hadoop和Spark的趋势. Spark在终端用户之间变得越来越受欢迎,而且这些用户经常在网上找Spark相关资料. 这给了Spark起了很大的宣传作用;同时围绕着它的也有误区和思维错误,而且很多人还把这些误区作为银弹,认为它可以解决他们的问题并提供比Hadoop好100倍的性能.

Spark 优化

- - CSDN博客推荐文章
提到Spark与Hadoop的区别,基本最常说的就是Spark采用基于内存的计算方式,尽管这种方式对数据处理的效率很高,但也会往往引发各种各样的问题,Spark中常见的OOM等等. 效率高的特点,注定了Spark对性能的严苛要求,那Spark不同程序的性能会碰到不同的资源瓶颈,比如:CPU,带宽、内存.

浅谈Borg/YARN/Mesos/Torca/Corona一类系统

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce-nextgen/borg-yarn-mesos-torca-corona/. Borg(来自Google), YARN(来自Apache,属于Hadoop下面的一个分支,开源), Mesos(来自Twitter,开源), Torca(来自腾讯搜搜), Corona(来自Facebook,开源)一类系统被称为资源统一管理系统或者资源统一调度系统,它们是大数据时代的必然产物.