LSF与Spark结合部署

IBM LSF 是一个工作负载管理平台,它基于策略管理分布式的系统资源。

Spark 是一个基于内存的并行计算框架,计算能力比较强。

Spark 与 LSF结合起来,我觉得是一个不错的结合。

详细原理参考: https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-spark-ibm-lsf-integration/index.html

安装:

         1.  安装Spark(我的是2.4.0),在网上下载最新Spark,安装到集群中,我配置了(slaves,不确定不配做这个是否可以)

           注意: 不要启动spark服务,因为master和slave是由LSF分配之后,由LSF启动的.

        2. 安装LSF(参照文档)

        3. 修改LSF 中的 lsf-spark-shell.sh, lsf-spark-submit.sh, lsf-stop-spark.sh中的 SPARK_HOME 与 SPARK_MASTER_PORT

       4. 启动LSF服务

测试:

1. 编写SimpleApp.scala

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
  def main(args: Array[String]) {
    val dataFile = args(0) // the filename is specified by the first command argument
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(dataFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

2. 编写build.sbt 文件(sbt构建用的)

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.6"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.0"

sbt 构建scala(没有安装的,下载安装一下):

mkdir buildhome/src/main/scala
cp SimpleApp.scala  buildhome/src/main/scala/
cp build.sbt  buildhome/
cd buildhome
sbt package


  sbt构建过程中会下一些包,最终build出来的jar的包在target下生成, 我build出来simple-project_2.11-1.0.jar: .

LSF 测试:

准备一个文件myfile.txt,里面随便写,为SimpleApp准备的参数

bsub  -n 3 -R "span[ptile=1]" -I lsf-spark-submit.sh --class "SimpleApp" /home/test/simple-project_2.11-1.0.jar /home/test/myfile.txt

从LSF测试中的记录可以看得出:

LSF 为 这个task分配了3个节点,并且LSF会在这3个节点启动一个Master,3个Worker

task结束时, LSF会stop Master 和 所有的Worker.

我并行两个task,并且这两个task分配的资源(资源有限)是一样的,这两个task都可以正常执行完成。

猜你喜欢

转载自blog.csdn.net/weixin_39594447/article/details/87375496