spark

一、安装scale插件

IntelliJ IDEA安装scala插件并创建scala示例 - 打翻了牛顿吃饭的碗 - 博客园

 二、创建maven项目

删除src

创建sprak-core module 

 

 

增加scale

 后面改成scale2.12.2了,因为我用的是spark3.0.0

 

 

<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
package com.sparkcore


import org.apache.spark.{SparkConf, SparkContext}

object Spark01_WorkCount {
  def main(args: Array[String]): Unit = {
    //Application

    //Spark框架

    //TODO 建立和spark框架的连接
    //JDBC:Connection
    var sparkConf = new SparkConf().setMaster("local").setAppName("WordCount");
    var sc = new SparkContext(sparkConf);

    //TODO 执行业务操作

    //TODO 关闭连接
    sc.stop();
  }
}

 

 统计单词数量

package com.sparkcore


import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext, rdd}

object Spark01_WorkCount {
  def main(args: Array[String]): Unit = {
    //Application

    //Spark框架

    //TODO 建立和spark框架的连接
    //JDBC:Connection
    val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount");
    val sc = new SparkContext(sparkConf);

    //TODO 执行业务操作
    //1、读取文件,获取一个一个的单词(分词)
    // hello world
    val lines: RDD[String] = sc.textFile("datas")

    //2、将一行数据进行拆分,形成一个一个的单词(分词)
    // "hello world" => hello ,world, hello ,world
    val words: RDD[String] = lines.flatMap(_.split(" "))

    //3、将数据根据单词进行分组,便于统计
    //(hello,hello,hello),(world,world)
    val wordGroup: RDD[(String,Iterable[String])] = words.groupBy(word=>word)

    //4、对分词后的数据进行转换
    //(hello,hello,hello),(world,world)
    //(hello,3),(world,2)
    val wordToCount = wordGroup.map{
      case (word, list) => {
        (word,list.size)
      }
    }


    //5、将转换结果采集到控制台打印出来
    val array:Array[(String,Int)] =wordToCount.collect()
    array.foreach(println)

    //TODO 关闭连接
    sc.stop();
  }
}

 运行结果:

package com.sparkcore

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark02_WorkCount {
  def main(args: Array[String]): Unit = {
    //Application

    //Spark框架

    //TODO 建立和spark框架的连接
    //JDBC:Connection
    val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount");
    val sc = new SparkContext(sparkConf);

    //TODO 执行业务操作
    //1、读取文件,获取一个一个的单词(分词)
    // hello world
    val lines: RDD[String] = sc.textFile("datas")

    //2、将一行数据进行拆分,形成一个一个的单词(分词)
    // "hello world" => hello ,world, hello ,world
    val words: RDD[String] = lines.flatMap(_.split(" "))
    val wordToOne = words.map(
      word => (word, 1)
    )
    val wordGroup: RDD[(String,Iterable[(String,Int)])] = wordToOne.groupBy(
      t => t._1
    )

    val wordToCount = wordGroup.map {
      case (word, list) => {
        list.reduce(
          (t1, t2) => {
            (t1._1, t1._2 + t2._2)
          }
        )
      }
    }
    val array: Array[(String,Int)]= wordToCount.collect()
    array.foreach(println)


    //TODO 关闭连接
    sc.stop();
  }
}

下载spark 

Apache Downloads

并上传到linux服务器上并解压缩

重命名:

 此处省略集群安装。

启动集群

在master节点执行sbin/start-all.sh ,启动后可以在master节点看到Master,在node1节点看到Worker节点

 在master-backup节点执行sbin/start-master.sh

 在/usr/local/spark/data/下新增word.txt

内容:

hello scale
hello world
hello spark
hello spark

使用xsync同步到其他节点。xsync word.txt

在master节点执行bin/spark-shell

然后执行sc.textFile("data/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

 

提交应用程序

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077,master-backup:7077 \
./examples/jars/spark-examples_2.11-2.4.8.jar \
10

说明:

--class表示要执行程序的主函数的类,也可以替换成我们自己的应用程序

--master 部署模式。local[2]表示本地模式,数字表示分配的虚拟CPU核数量。spark://master:7077,master-backup:7077表示集群模式。Yarn环境。

spark-examples_2.11-2.4.8.jar为运行的应用类所在的jar包,实际使用时,可以设定为自己的jar包

10表示程序main函数的入口参数,用于设定当前应用的任务数量

配置历史服务

由于spark-shell停止后,集群监控master:4040就看不到历史任务的运行情况了,所以开发时都配置历史服务器记录任务运行情况。

1)修改spark-defaults.conf.template为spark-defaults.conf

2)修改spark-defaults.conf文件,配置日志存储路径

spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://master:9000/directory

注意:需要启动Hadoop集群,HDFS上的diretory 目录需要提前存在。

sbin/start-dfs.sh

hadoop fs -mkdir /directory

3)修改spark-env.sh文件,添加日志配置

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://master:9000/directory
-Dspark.history.retainedApplications=30"

参数1:WEB UI访问的端口号为18080

参数2:指定历史服务器日志存储路径

参数3:指定保存Application历史记录的个数,如果超过了这个数,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示 的应用数

注意:此处的端口要看Hadoop的core-site.xml和hdfs-site.xml配置

hdfs-site.xml

 core-site.xml

4)分发

xsync conf

5)重启集群和历史服务

sbin/start-all.sh

sbin/start-history-server.sh

 执行bin/spark-shell

点击“Show incomplete applications”可以看到这个任务。

 

 执行bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077,master-backup:7077 \
./examples/jars/spark-examples_2.11-2.4.8.jar \
10时发现State一直是waiting状态,停掉spark-shell后就可以了,不知道是什么原因。可能是因为只有一个worker

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值