美文网首页
Spark学习笔记4

Spark学习笔记4

作者: wangmin | 来源:发表于2016-02-27 15:16 被阅读313次

    任务的提交以及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版本到每个机器上。
    • 启动集群有两种方式,一种是手动启动,另一种是通过启动脚本启动。

    手动启动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的时候可以带上参数进行设置,参数的列表如下:其中比较重要的是:

    • -c CORES, 这个是指定多少个cpu分配给spark使用,默认是全部cpu
    • -m MEM,这个是指定多少的内存分配给spark使用,默认是全部的内存的减去1g的操作系统内存全部分配给spark使用。一般的格式是1000M or 2G
    • -d DIR, 这个指定spark任务的日志输出目录。
    • –properties-file FILE 指定spark指定加载的配置文件的路径默认是: conf/spark-defaults.conf

    脚本方式部署

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

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

    • sbin/start-all.sh
    • sbin/stop-all.sh

    注意的是这些脚本必须是在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来实现,另一种是通过本地文件系统来实现。

    • 使用ZooKeeper备份master,利用zookeeper提供的领导选举和状态保存,你可以让更多的master连接到zookeepre实例。一个将会被选举为leader其他的则会保存备份他的状态。如果master死掉,zookeeper可以选举一个新的leader,整个过程需要1到2分钟的时间,但是这个过程只会对新的任务调度有影响。为了使用这种方式需要的配置项为:SPARK_DAEMON_JAVA_OPTS,这个配置项有三个配置信息:spark.deploy.recoveryMode/spark.deploy.zookeeper.url/spark.deploy.zookeeper.dir
    • 使用本地文件系统来恢复该节点。为了使用这种方式需要的配置项为:SPARK_DAEMON_JAVA_OPTS,这个配置项有两个配置信息:spark.deploy.recoveryMode、spark.deploy.recoveryDirectory

    相关文章

      网友评论

          本文标题:Spark学习笔记4

          本文链接:https://www.haomeiwen.com/subject/kwvwkttx.html