zoukankan      html  css  js  c++  java
  • Spark学习笔记(二)—— Local模式

    Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍第一种模式。

    1、Local模式

    Local模式就是运行在一台计算机上的模式, 也称单节点模式 。Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(CPU)方式运行, 通常就是用于在本机学习或者测试使用的,对新手比较友好。它可以通过以下的方式设置Master:

    • local:所有的计算都运行在一个线程中,没有任何的并行计算。通常我们在学习和测试的时候都是使用这种模式;

    • local[K]:这种方式可以指定用几个线程来计算,比如local[4],就是指定4个Worker线程。通常我们的CPU有几个Core,就指定介个线程,最大化的利用CPU的计算能力;

    • local[*]:这种模式直接帮你按照CPU最多Core来设置线程数量了。

    2、安装使用

    说了那么多,还没见真章。那么接下来开始安装使用一下~~

    1)上传并且解压Spark安装包

    我使用的是spark-2.1.1-bin-hadoop2.7.tgz

    [simon@hadoop102 sorfware]$ tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module/
    
    [simon@hadoop102 module]$ mv spark-2.1.1-bin-hadoop2.7 spark
    

    解压完成之后看到目录还是非常清晰的:

    2)蒙特卡罗法求PI

    这是一个官方小案例,看代码

    [simon@hadoop102 spark]$ bin/spark-submit 
    --class org.apache.spark.examples.SparkPi 
    --executor-memory 1G 
    --total-executor-cores 2 
    ./examples/jars/spark-examples_2.11-2.1.1.jar 
    100    
    

    解析一下上边的语法:

    • --master:指定Master的地址,默认为Local
    • --class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
    • --deploy-mode: 是否发布你的驱动到worker节点(cluster) 或者作为一个本地客户端 (client) (default: client)*
    • --conf: 任意的Spark配置属性, 格式key=value. 如果值包含空格,可以加引号“key=value”
    • application-jar: 打包好的应用jar,包含依赖. 这个URL在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar
    • application-arguments: 传给main()方法的参数
    • --executor-memory 1G :指定每个executor可用内存为1G
    • --total-executor-cores 2 :指定每个executor使用的cup核数为2个

    这就是迭代100次的运算结果,运行速度还是非常快的:

    再来一个小的WordCount的小案例演示,同样也是很简单的。

    1)创建待输入的文件

    [simon@hadoop102 spark]$ mkdir input
    
    #创建a.txt和b.txt,填写如下内容:
    hello simon
    hello spark
    

    我创建的过程和编写的文件内容如下:

    2)启动spark-shell

    [simon@hadoop102 spark]$ bin/spark-shell
    Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
    Setting default log level to "WARN".
    ....
    #会打印一堆的启动日志信息
    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _ / _ / _ `/ __/  '_/
       /___/ .__/\_,_/_/ /_/\_   version 2.1.1
          /_/
             
    Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144)
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> 
    

    在启动日志中可以看到这么三行:

    解释一下这三个东西:

    • Web UI : 可以在web页面看到Spark集群的信息;
    • Spark context ..sc:可以理解为sc是Spark Core的程序入口;
    • Spark session ..spark:可以理解为spark是Spark SQL程序的入口。

    之后会用到,到时候再详细解释~~~

    再起一个窗口,执行jps可以看到启动了SparkSubmit进程,这样就算是启动成功了~~

    3)运行WordCount程序

    sc.textFile("./input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
    

    看运行结果,nice ~~

    后边我们会解释这些代码的含义。

    可登录hadoop102:4040查看程序运行,整个流程还是非常清晰的:

    3、分析WordCount流程

    直接看个图吧:

    那我们回过头来解释一下代码吧,有scala语言基础的话,看起来还不是太难:

    • textFile("input"):读取本地文件input文件夹数据;
    • flatMap(_.split(" ")):压平操作,按照空格分割符将一行数据映射成一个个单词;
    • map((__,1)):对每一个元素操作,将单词映射为元组;
    • reduceByKey(+):按照key将值进行聚合,相加;
    • collect:将数据收集到Driver端展示。

    我这样语言组织起来比较费劲,先留个坑,过段时间回过头来再补充流程分析。

    文件是怎么被读出、被分割、被统计展示的呢?还是看图吧,等我组织好语言回来补充:


    参考资料:

    [1]李海波. 大数据技术之Spark


  • 相关阅读:
    js跳出循环
    JavaScript prototype属性
    【DP专题】——洛谷P2279:消防局的设立
    转:android中dialog工具类的实现(多种dialog的创建)
    转:setContentView的时候,到底发生了什么
    转:Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别
    转:Android Studio中的Gradle是干什么的
    转:Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB
    Android 学习
    com.baidu.navisdk.adapter找不到 在百度定位SDK的基础之上导入导航的SDK(针对新版本的坑!)
  • 原文地址:https://www.cnblogs.com/simon-1024/p/12170884.html
Copyright © 2011-2022 走看看