spark运行java包

一、spark

  • 也是基于mr的计算,和Hadoop的MapReduce阶段底层一样
  • spark是基于内存进行数据处理的,MapReduce是基于磁盘进行数据处理的
  • spark比MapReduce快,不仅因为基于内存,还因为DAG(根本原因)
  • DAG计算模型在迭代计算上还是比MapReduce的效率更高
  • spark中具有DAG有向无环图,DAG有向无环图在此过程中减少了shuffle以及落地磁盘的次数

二、java中编写spark运行代码

1)导入依赖和插件

   <dependencies>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.12</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>2.11.12</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>2.11.12</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.4.5</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- Java Compiler -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <!-- Scala Compiler -->
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

2)代码

spark的代码有两种测试方式,一种是本地运行,一种是打包上传运行

本地运行

  • 通过setMasters设置运行方式,local为本地运行,默认为单线程,可以指定线程的个数,最多为8=》”local[8]”,打包到集群运行的时候需要将该设置注释掉
  • RDD :相当于scala中的一个集合
  • reduceByKey : 通过key对value进行聚合需要传入一个聚合函数
package com.spark

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

object Demo1_WC {
    def main(args: Array[String]): Unit = {
        /**
          * 1.创建spark环境,获取入口
          */
        //创建spark环境
        val conf: SparkConf = new SparkConf()

        //设置spark程序名
        conf.setAppName("wc")

        //设置spark的执行方式
        conf.setMaster("local")

        //创建spark的上下文对象,即程序的入口
        val sc: SparkContext = new SparkContext(conf)

        /**
          * 2.读取文件
          */

        val file: RDD[String] = sc.textFile("E:\\IdeaProjects\\javaproject\\scalar\\word.txt")
        /**
          * 3.逻辑处理
          */
        //map阶段
        val word: RDD[String] = file.flatMap(_.split(","))
        val kv: RDD[(String, Int)] = word.map((_,1))
        //reduce阶段,通过key对value进行聚合,可以指定分区个数,也可以不指定
        val count: RDD[(String, Int)] = kv.reduceByKey((x,y)=>x+y,3)

        //整理数据格式
        var result=count.map(kv=>s"${kv._1},${kv._2}")

        //如果数据量大的话,不建议在控制台输出
        //result.foreach(println)
        //将结果保存到文件中
        //调用该方法时可能会出现错误,需要进行配置
        result.saveAsTextFile("spark/data/out1")

    }

}

在这里插入图片描述
在这里插入图片描述

报错解决
配置winutils
链接:https://pan.baidu.com/s/1gYQ0NFt-fCekSI23A90Atg
提取码:hehe
将hadoop在本地解压,在其bin目录下放一个winutils文件

在这里插入图片描述
配置环境变量
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
将idea设置为以管理员身份运行=》重启
在这里插入图片描述

打包到集群中运行,结果输出在hdfs上

  • 将本地运行的代码,设置注释掉
  • 将输入路径输出路径更改,也可以通过传参的方式传入路径
package com.spark

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

object Demo1_WC {
    def main(args: Array[String]): Unit = {
        /**
          * 1.创建spark环境,获取入口
          */
        //创建spark环境
        val conf: SparkConf = new SparkConf()

        //设置spark程序名
        conf.setAppName("wc")

        //设置spark的执行方式
//        conf.setMaster("local")

        //创建spark的上下文对象,即程序的入口
        val sc: SparkContext = new SparkContext(conf)

        /**
          * 2.读取文件
          */

        val file: RDD[String] = sc.textFile("spark/data/word.txt")
        /**
          * 3.逻辑处理
          */
        //map阶段
        val word: RDD[String] = file.flatMap(_.split(","))
        val kv: RDD[(String, Int)] = word.map((_,1))
        //reduce阶段,通过key对value进行聚合,可以指定分区个数,也可以不指定
        val count: RDD[(String, Int)] = kv.reduceByKey((x,y)=>x+y,3)

        //整理数据格式
        var result=count.map(kv=>s"${kv._1},${kv._2}")

        //如果数据量大的话,不建议在控制台输出
        //result.foreach(println)
        //将结果保存到文件中
        //调用该方法时可能会出现错误,需要进行配置
        result.saveAsTextFile("spark/data/out1")//输出到hdfs上

    }
}

在这里插入图片描述
由于jar包中,指定的是在hdfs上的路径,还需将word文件上传至hdfs
在这里插入图片描述

spark-submit --class com.spark.Demo1_WC --master yarn-client spark-1.0.jar
在这里插入图片描述
查看hdfs上文件
在这里插入图片描述
Hadoop
hadoop学习一
hadoop学习二
hadoop学习三
hadoop学习四
hadoop学习五
hadoop学习六
hadoop学习七
hadoop学习八
hadoop异常处理
hadoop基础学习九
hadoop基础学习十
hadoop基础学习十一
hadoop基础学习十二
hadoop基础学习十三
hadoop基础学习十四
hadoop基础学习十五
hadoop基础学习十六
hadoop基础学习十七
hadoop基础学习十八
hadoop基础学习十九
Hadoop基础学习二十
hadoop基础学习二十一
hadoop基础学习二十二
hadoop基础学习二十三
hadoop基础学习二十四

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值