zoukankan      html  css  js  c++  java
  • spark在集群上运行

    1.spark在集群上运行应用的详细过程

    (1)用户通过spark-submit脚本提交应用
    (2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法
    (3)驱动器程序与集群管理器通信,申请资源以启动执行器节点
    (4)集群管理器为驱动器程序启动执行器节点
    (5)驱动器进程执行用户应用中的操作。根据程序中所定义的对RDD的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程
    (6)任务在执行器程序中进行计算并保存结果
    (7)如果驱动器程序的main()方法退出,或者调用了SparkContext.stop(),驱动器程序会终止执行器进程,并且通过集群管理器释放资源
    2.集群上运行的app和本地运行的区别
    集群上运行的app,还没有指定master,而本地运行的app,指定了运行的主机master是“local”,即本地主机。以下是spark WordCount的程序实例,我们没有指定master,需要提交到集群上运行。
    import scala.Tuple2;
    import org.apache.spark.SparkConf;
    import org.apache.spark.api.java.JavaPairRDD;
    import org.apache.spark.api.java.JavaRDD;
    import org.apache.spark.api.java.JavaSparkContext;
    import org.apache.spark.api.java.function.FlatMapFunction;
    import org.apache.spark.api.java.function.Function2;
    import org.apache.spark.api.java.function.PairFunction;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.regex.Pattern;
    
    public final class WordCount {
        private static final Pattern SPACE = Pattern.compile(" ");
    
        public static void main(String[] args) throws Exception {
    
            SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount");//关键是没有指定master,需要提交到集群上运行
            JavaSparkContext ctx = new JavaSparkContext(sparkConf);
            JavaRDD<String> lines = ctx.textFile("C:\test.txt", 1);
    
            JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
                public Iterable<String> call(String s) {
                    return Arrays.asList(SPACE.split(s));
                }
            });
    
            JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
                public Tuple2<String, Integer> call(String s) {
                    return new Tuple2<String, Integer>(s, 1);
                }
            });
    
            JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
                public Integer call(Integer i1, Integer i2) {
                    return i1 + i2;
                }
            });
    
            List<Tuple2<String, Integer>> output = counts.collect();
            for (Tuple2<?,?> tuple : output) {
                System.out.println(tuple._1() + ": " + tuple._2());
            }
            ctx.stop();
        }
    }
    3.使用spark-submit部署应用
    (1)spark-submit的一般形式
    bin/spark-submit [options] <app jar | python file> [app options] 
    <app jar | python file>  表示包含应用入口的JAR包或者Python脚本
    [app options]  是传给你的应用的选项
    spark-submit的一些常见标记
    标记 描述
    --master 表示要连接的集群管理器
    --deploy-mode 选择在本地启动驱动器程序,还是在集群中的一台工作节点机器上启动。在客户端模式下,spark-submit会将驱动器程序运行在spark-submit被调用的这台机器上。在集群模式下,驱动器程序会被传输并被执行于集群的一个工作节点上,默认是本地模式。
    --class 运行Java或者Scala程序应用的主类
    --name 应用的显示名,会显示在spark的网页用户界面中
    --jars 需要上传并放在应用的CLASSPATH中的JAR包的雷彪。如果应用依赖于少量第三方的jar包,可以把它们放在这个参数中
    --files 需要放在应用工作目录中的文件雷彪。这个参数一般用来放需要分发到各节点的数据文件
    --py-files 需添加到PYTHONPATH中的文件的雷彪。其中可以包含.py /.egg以及.zip文件
    --executor-memory 执行器进程使用的内存量,以字节为单位,可以使用后缀指定更大的单位,比如512M或者15g
    --driver-memory 驱动器进程使用的内存量,以字节为单位。可以使用后缀指定更大的单位,比如512m或者15g
     
    使用各种选项调用spark-submit
    ./bin/spark-submit 
    --master spark:// hostname:7077 
    --deploy-mode cluster
    --class com.databricks.examples.SparkExample
    --name "Example program"
    --jars dep1.jar,dep2.jar,dep3.jar
    --total-executor-core 300
    --executor-memory 10g
    4.选择合适的集群管理器
    (1)如果是从零开始,可以先选择独立集群管理器。独立模式安装起来最简单,而且如果你只是使用spark的话,独立集群管理器提供与其他集群管理器完全一样的全部功能。
    (2)如果你要在使用spark的同时使用其他应用,或者是要用到更丰富的资源调度功能(例如队列),那么YARN和Mesos都能满足你的需求。而在这两者中,对于大多数的hadoop发行版来说,一般YARN已经预装好了。
    (3)Mesos相对于YARN和独立模式的一大优点在于其细粒度共享的选项,该选项可以将类似Spark shell这样的交互式应用中的不同命令分配到不同的CPU上。因此这对于多用户同时运行交互式shell的用例更有用处。
    (4)在任何时候,最好把Spark运行在运行HDFS的节点还是那个,这样能快速访问存储。你可以自行在同样的节点上安装Mesos或独立集群管理器。如果使用YARN的话,大多数发行版已经把YARN和HDFS安装在了一起。
     
     
     
     
     
     
     
     
  • 相关阅读:
    JVM字节码-字节码进阶
    JVM字节码-Class文件结构
    CT03 Contest#10 equation 大力打表+讨论
    2021CT03 Contest#9 降智场
    妙妙题 noi.ac 2323 Connecting
    洛谷 P4774 [NOI2018] 屠龙勇士
    [模板] 扩展中国剩余定理
    洛谷 P1082 [NOIP2012 提高组] 同余方程
    洛谷 P1516 青蛙的约会
    2021牛客暑期多校训练营3 Kuriyama Mirai and Exclusive Or
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5008043.html
Copyright © 2011-2022 走看看