葵花宝典--spark入门+WordCount入门

一、概述

定义:spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎;采用scala编写。支持迭代式计算和图计算,计算比MR快的原因,是因为他的中间结果不落盘,只有发生shuffer的时候才会进行落盘

内置模块

  • sparkCore:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义。
  • sparkSQL:是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者Apache Hive版本的HQL来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。
  • sparkStreaming:是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与Spark Core中的 RDD API高度对应。
  • sparkMLlib:提供常见的机器学习功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
  • sparkGraghX:主要用于图形并行计算图挖掘系统的组件
  • 集群管理器Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器,叫作独立调度器。

特点

  • :想比较于mapRdeuce,spark基于内存运算,比MR要快100倍,基于硬盘也要快10倍以上。Spark实现了高效的DAG运算,通过内存来高效处理,计算的中间结果也是基于内存的
  • 易用:支持java、scala和python的API,支持超过80种算法,支持交互式的linux命令行
  • 通用性:支持了统一的解决方案,可以用于交互式查询、实时流处理、机器学习和图计算,并且可以在同一个应用中无缝连接
  • 兼容性:可以和其他开源产品无缝融合,包括hadoop、hdfs、yarn等,并且可以处理存储在hdfs中的数据

运行模式:简单分为单机模式和集群模式

  • local模式:本地部署单个spark服务
  • standalone模式:spark自带的集群和任务调度
  • yarn模式:Spark使用Hadoop的YARN组件进行资源与任务调度
  • mesos模式:Spark使用Mesos平台进行资源与任务的调度

二、安装和使用

yarn模式安装:

1、解压spark安装包,确保hadoop环境能正常使用

2、配置yarn-site.xml

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>false</value>
</property>

<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
</property>

3、修改/opt/module/spark/conf/spark-env.sh,添加YARN_CONF_DIR配置,保证后续运行任务的路径都变成集群路径

YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop

##确保directory目录已在hdfs中创建完成
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory 
-Dspark.history.retainedApplications=30"

4、修改spark-default.conf文件,配置日志存储路径

spark.eventLog.enabled          true
spark.eventLog.dir               hdfs://hadoop102:8020/directory

spark.yarn.historyServer.address=hadoop102:18080
spark.history.ui.port=18080

5、运行模式:客户端模式(driver在客户端)和集群模式(driver不在客户端,位置由集群决定)

服务启动

  • 启动关闭服务:sbin/start-all.sh   sbin/stop-all.sh
  • 启动历史服务器:sbin/start-history-server.sh    sbin/stop-history-server.sh

使用方式

  • spark-submit:bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn ./examples/jars/spark-examples_2.11-2.1.1.jar 10
  • spark-shell:bin/spark-shell,开启交互式命令行

三、集群角色

master和slave

driver和executor

通用运行流程:Master和Worker是Spark的守护进程,即Spark在特定模式下正常运行所必须的进程。Driver和Executor是临时程序,当有具体任务提交到Spark集群才会开启的程序

集群模式运行流程

集中模式对比:

模式

Spark安装机器数

需启动的进程

所属者

Local

1

Spark

Standalone

3

Master及Worker

Spark

Yarn

1

Yarn及HDFS

Hadoop

常用端口号

1)Spark历史服务器端口号:18080 (类比于Hadoop历史服务器端口号:19888)

2)Spark Master Web端口号:8080(类比于Hadoop的NameNode Web端口号9870(50070))

3)Spark Master内部通信服务端口号:7077 (类比于Hadoop的8020(9000)端口)

4)Spark查看当前Spark-shell运行任务情况端口号:4040

5)Hadoop YARN任务运行情况查看端口号:8088

四、WordCount案例

    val conf = new SparkConf().setMaster("local[*]").setAppName("WoedCount")

    val sc = new SparkContext(conf)

    val value: RDD[String] = sc.textFile("")

    sc.textFile(args(0))
      .flatMap(_.split(" "))
      .map((_, 1))
      .reduceByKey(_ + _)
      .saveAsTextFile(args(1))
    sc.stop()
        SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("WoedCount");

        JavaSparkContext sc = new JavaSparkContext(conf);

        JavaRDD<String> javaRDD = sc.textFile("D:\\ideaWorkspace\\scala0105\\spark-0105\\input");

        JavaRDD<String> words = javaRDD.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterator<String> call(String s) throws Exception {
                return  Arrays.asList(s.split(" ")).iterator();
            }
        });

        JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
            @Override
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2<>(s, 1);
            }
        });

        JavaPairRDD<String, Integer> reduceBykey = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1 + v2;
            }
        });

        reduceBykey.foreach(new VoidFunction<Tuple2<String, Integer>>() {
            @Override
            public void call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {
                System.out.println(stringIntegerTuple2._1 + "\t" + stringIntegerTuple2._2);
            }
        });

        sc.close();

pom文件:

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
    </dependencies>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值