Spark学习笔记4

2016-02-27  本文已影响313人  wangmin

任务的提交以及Standalone集群模式的部署

spark-submit

首先需要打包代码,如果你的代码需要依赖其他的包环境则需要单独的打包这些依赖,应为cluster会将所有依赖的jar包分发到各个节点上进行使用。推荐的方法是将依赖包和程序都统一的打成一个包,这样就可以直接使用spark-submit方法来运行,具体的pom.xml配置如下:

<dependencies>
    <dependency> <!-- Spark dependency -->
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.10</artifactId>
        <version>1.4.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.13</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <!-- 使用1.7 jdk进行编译 -->
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.5.5</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

spark && hadoop 的scope值都设置为provided,然后打包的过程是把需要依赖的第三方东西打成一个统一的jar包去运行,使用的是maven-compiler-plugin插件。

在服务器上提交的命令如下:

./bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

spark-submit 可以加载一个配置文件,默认是加载在conf/spark-defaults.conf

Spark Standalone Mode

除了运行在Mesos和YARN集群之外,spark也提供了简单的独立部署模式。可以通过手动的启动master和worker,也可以通过spark提供的启动脚本来启动。独立部署也可以通过运行在一个机器上,进行测试。

手动启动spark集群

启动一个独立的master可以使用如下的命令:

./sbin/start-master.sh

一旦启动可以通过访问:http://localhost:8080端口访问master,打出的spark://HOST:PORT 的URL,work节点可以使用这个链接连到master上。

可以使用如下的命令来使worker节点连接到master上:

./sbin/start-slave.sh <worker#> <master-spark-URL>

worker在加入到master后可以访问master的http://localhost:8080,可以清洗的看到被加入的worker节点的信息。

在启动master和worker的时候可以带上参数进行设置,参数的列表如下:其中比较重要的是:

脚本方式部署

通过spark的部署脚本部署首先需要在spark的主目录下创建一个conf/slaves的文件,这个文件中每一行代表一个worker的hostname.需要注意的是,master访问worker节点是通过SSH访问的,所以需要master通过ssh无密码的登录到worker,否则需要设置一个 SPARK_SSH_FOREGROUND的环境变量,这个变量的值就是每个worker的密码

然后可以通过spark安装目录下的sbin/….sh文件进行启动, 如果要启动和停止master和slave可以使用:

注意的是这些脚本必须是在master机器上执行

同时你可以通过配置集群的 conf/spark-env.sh文件来进一步配置集群的环境。但是这也文件需要通过拷贝conf/spark-env.sh.template文件来创建,并且需要把这个文件拷贝到所有的worker节点上。

其中: SPARK_MASTER_OPTS && SPARK_WORKER_OPTS 两个配置项比较复杂。

通过在SparkContext构造器中传入spark://IP:PORT这个来启用这个集群。同时可以在交互式的方式启动脚本中使用:./bin/spark-shell –master spark://IP:PORT 来启动集群执行。

独立部署模式的集群现在只是简单的支持FIFO调度。 为了允许多个并发用户,可以通过SparkConf设置每个应用程序需要的资源的最大数。默认情况下,它会请求使用集群的全部的核,而这只是同时运行一个应用程序才回有意义。

val conf = new SparkConf()
             .setMaster(...)
             .setAppName(...)
             .set("spark.cores.max", "10")
val sc = new SparkContext(conf)

除了可以在程序中指定你也可以在spark-env.sh中设置默认的值,

export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=<value>"

spark的高可用设置

spark的高可用设置有两种,一种是通过Zookeeper来实现,另一种是通过本地文件系统来实现。

上一篇 下一篇

猜你喜欢

热点阅读