从0开始学习spark的学习笔记(2)

在这里插入图片描述
所谓学习是要在快乐中进行的,每天放松一下。

在 IDEA 中编写第一个Spark程序 WordCount

昨天我们学习了spark的本地搭建和一些基本的概念之后,我们今天开始我们的第一个程序的搭建。
(在生产环境中,通常会在 IDEA 中编 制程序,然后打成 jar 包,然后提交到集群,最常用的是创建一个 Maven 项目,利用 Maven 来管理 jar 包的依赖。)

1、创建一个 IDEA 的 maven 项目
在这里插入图片描述2、选择 Maven 项目,然后点击 next
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
现在我们Maven项目建好了,然后我们建一个scala文件夹如上图:

然后开始配置我们的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mazh.spark</groupId>
    <artifactId>Spark_WordCount</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <encoding>UTF-8</encoding>
        <scala.version>2.11.8</scala.version>
        <spark.version>2.3.0</spark.version>
        <hadoop.version>2.7.5</hadoop.version>
        <scala.compat.version>2.11</scala.compat.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>


       </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
    </dependencies>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <testSourceDirectory>src/test/scala</testSourceDirectory>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>


               <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>

                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

然后我们新建一个 Scala Class 类型为 Object,编写 WordCount 程序

package com.dandan.spark

import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}

object WordCount {
  def main(args: Array[String]): Unit = {
    // 不打印日志信息 减少控制台输出
    Logger.getLogger("org.apache.hadoop").setLevel(Level.WARN)
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.project-spark").setLevel(Level.WARN)
    // 创建一个 SparkConf对象,并设置程序的名称 ,和spark启动方式
    val dandanSparkConf = new SparkConf().setAppName("dandan").setMaster("local")
    // 创建一个 SparkContext对象
    val sparkContext = new SparkContext(dandanSparkConf)
    // 读取本地文件返回Rdd对象
    val lineRdd = sparkContext.textFile("C:\\Users\\ASUS\\Desktop\\新建文本文档.txt")
    // 构建一个单词 RDD
    val wordAndOneRDD = lineRdd.flatMap(_.split("==")).map((_, 1))

    // 进行单词的聚合
    val resultRDD = wordAndOneRDD.reduceByKey(_ + _)

    // 对 resultRDD进行单词出现次数的降序排序,然后写出结果到 HDFS
    resultRDD.sortBy(_._2, false).foreach(r => println(r))

    sparkContext.stop()
  }
}

在这里插入图片描述
在这里插入图片描述
我这里把数据给你们,我们一起学习进步,希望还在学校或者刚刚工作准备学spark的可以和我一起学习动手:

D01A==P1XY1==0P1XY1==0==10==0
D06A==DXJD9==D10-CARNAGE==0==5==33.83
S3A==10036Y100-600-H==HPQ==0==8==0
S31==T-PANGUL-H==HPQ==0==1==0
D02==7WP95==D9.5-SFF3==0==2107==13.17
D02==7WP95==D9.5-SFF3==0==2199==13.17
D02==7WP95==D9.5-SFF3==0==4019==13.17
S3A==L61705-001==HPQ==0==100==24.93
D11==KYJ8C==D9-MFF7==0==15==0
S3B==L76447-001-B==HPQ==0==9==0
D07==CWR57==D9-SFF-XE3==0==3==13.86
D03==5YDCW==D9.5-MFF3==0==3315==15.83
D03==5YDCW==D9.5-MFF3==0==10653==15.83
D03==5YDCW==D9.5-MFF3==0==3026==15.83
S3B==754109-001==HPQ==0==372==0
S31==SB20T22662==LENOVO==0==9==0
S35==SB20N60191==LENOVO==1453==1481==0
S35==SB20N60191==LENOVO==0==3197==0
xxx==844781-001==HPQ==0==492==0
xxx==844781-001==HPQ==0==15==0
xxx==844781-001==HPQ==0==692==0
S3F==902760-002==HPQ==0==70==1.80

这就完成我们的第一个spark编程wordcount程序,然后我在说一下怎么打包到集群上去运行,首先我们把我们刚刚写好的程序进行maven打包如下:

在这里插入图片描述
上传打好的 jar 包到 spark 集群中的用来提交任务的节点
put c:/Spark_WordCount-1.0-SNAPSHOT.jar
执行命令:

 $SPARK_HOME/bin/spark-submit \ 
 --class com.mazh.spark.WordCount \ 
 --master spark://hadoop02:7077 \  这个是节点ip地址映射和端口 按照自己的配置
 --executor-memory 512m \
 --total-executor-cores 4 \
 /home/hadoop/Spark_WordCount-1.0-SNAPSHOT.jar \ 
 hdfs://myha01/spark/wc/input \   输入文件路径
 hdfs://myha01/spark/wc/output_11  输出文件路径  

最后两个路径如何是main函数传入的参数如下改动代码:
在这里插入图片描述
记得打包之前先改代码哟,我是忘记了,你们不要忘了!

结果类似如下:在这里插入图片描述

修改 Spark 的日志级别

这个顺带一提:从我们运行的 spark 程序运行的情况来看,可以看到大量的 INFO 级别的日志信息。淹没了 我们需要运行输出结果。可以通过修改 Spark 配置文件来 Spark 日志级别
第一步:先进入 conf 目录 [hadoop@hadoop05 conf]$ cd $SPARK_HOME/conf

第二步:准备 log4j.properties [hadoop@hadoop05 conf]$ cp log4j.properties.template log4j.properties

第三步:配置日志级别: 把 INFO 改成你想要的级别:主要有 ERROR, WARN, INFO, DEBUG 几种
在这里插入图片描述
这一节 我们的spark wordcount 程序算完成了,然后我们之后再来说Spark作业提交的一些理论知识,和一下job提交的几种方法!

在这里插入图片描述

下次我们还要来学习哟!!!

记得点赞加关注!!! 不迷路 !!!

人活着真累:上车得排队,爱你又受罪,吃饭没香味,喝酒容易醉,挣钱得交税!

发布了53 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39361934/article/details/105691883