Spark学习笔记4

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

spark-submit

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


     
        org.apache.spark
        spark-core_2.10
        1.4.0
        provided
    
    
        mysql
        mysql-connector-java
        5.1.13
    
    
        org.apache.hadoop
        hadoop-client
        2.6.0
        provided
    
    
        junit
        junit
        4.11
        test
    


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            2.3.2
            
                
                1.7
                1.7
            
        
        
            maven-assembly-plugin
            2.5.5
            
                
                    jar-with-dependencies
                
            
            
                
                    make-assembly
                    package
                    
                        single
                    
                
            
        
    

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

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

./bin/spark-submit \
  --class 
  --master  \
  --deploy-mode  \
  --conf = \
  ... # other options
   \
  [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后可以访问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="

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)