首页 > 其他分享 >Spark入门运行wordcount

Spark入门运行wordcount

时间:2023-10-17 16:01:02浏览次数:30  
标签:入门 -- wordcount hello apache org spark Spark String

在spark集群上跑一个程序首先保证下面进程开启

  • zookeeper
  • hdfs
  • spark

首先是父类的依赖

<properties>
        <scala.version>2.11.8</scala.version>
        <spark.version>2.2.2</spark.version>
        <hadoop.version>2.7.6</hadoop.version>
    </properties>
    <modules>
        <module>spark-core-study</module>
        <module>spark-common</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>

            <!-- scala去除
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>${scala.version}</version>
            </dependency>  -->
            <!-- sparkcore -->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.11</artifactId>
                <version>${spark.version}</version>
            </dependency>
            <!-- sparksql -->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_2.11</artifactId>
                <version>${spark.version}</version>
            </dependency>
            <!-- sparkstreaming -->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-streaming_2.11</artifactId>
                <version>${spark.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后是子类的依赖

<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <!--
                scope的范围
                    compile:    默认,在源码,编译,运行期都需要
                    provided:   只在写代码,编译器有效,运行期无效,因为系统已经提供了
                    test:       只在src/test/目录下面有效
                    runtime:    在源代码,编译器无效,在运行期有效,比如JDBC
            -->
            <scope>provided</scope>
        </dependency>

        <!-- 因为sparkcore内部已经集成了scala-library,所以就不需要在导入该包了
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
            </dependency>-->
    </dependencies>

WordCount

package blog

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

/**
  * WordCount
  */
object WordCount {
  def main(args: Array[String]): Unit = {
    //提示语,如果没有参数就报错,直接退出jvm
    if (args == null || args.length < 1) {
      println(
        """
          |parameter errors! Usage: <input>
          |input: input file path
        """.stripMargin
        //stripMargin是用来分行显示的
      )
      System.exit(-1)
    }
    val Array(input) = args
    //打印需要的日志
    Logger.getLogger("org.apache.hadoop").setLevel(Level.INFO)
    Logger.getLogger("org.apache.spark").setLevel(Level.INFO)
    Logger.getLogger("org.spark_project").setLevel(Level.INFO)
    val conf = new SparkConf()
      //这里名字可以随便去
      .setAppName("WordCount")
    //加上下面这句话就是在单个节点跑,Web UI上不会有显示
    //.setMaster("local[*]")
    //SparkContext为spark的入口
    val sc = new SparkContext(conf)
    //获取每一行
    val lines: RDD[String] = sc.textFile(input)
    //这里我们可以看一下spark将文件分成了几个区
    println("##############################partition num of lines is:" + lines.getNumPartitions)
    //flatMap进行过滤,\\s+表示切到空格以及多个空格
    val words: RDD[String] = lines.flatMap(line => line.split("\\s+"))
    //map端直接调用
    val pairs: RDD[(String, Int)] = words.map(word => count(word))
    //将出现多次的结果在reduce端相加
    val retRDD: RDD[(String, Int)] = pairs.reduceByKey((v1, v2) => v1 + v2)
    //控制台打印
    retRDD
      .collect() //
      .foreach(println)
    sc.stop()

  }

  //默认出现一次的单词为word, 1
  def count(word: String): (String, Int) = (word, 1)
}

接着开始打jar包,我这里使用的是idea,点击左上角的File,选择Project Structure

Spark入门运行wordcount_scala

然后创建一个空的jar

Spark入门运行wordcount_spark_02

给jar包起一个名

Spark入门运行wordcount_apache_03

选中要打包的代码

Spark入门运行wordcount_scala_04

添加到左边去,然后点击OK

Spark入门运行wordcount_apache_05

接着Build -> Build Artifacts

Spark入门运行wordcount_scala_06

然后直接Bulid即可

Spark入门运行wordcount_apache_07

可以看到idea左边的窗口多出了一个out文件夹

Spark入门运行wordcount_scala_08

然后打开文件所在位置

Spark入门运行wordcount_apache_09

将文件上传到Linux,然后随便找一个文件夹创建一个脚本

vi spark-submit-wc-standalone.sh

插入以下内容,文件的路径以及其他参数可以进行修改

#!/bin/sh

SPARK_HOME=/home/hadoop/apps/spark

${SPARK_HOME}/bin/spark-submit \
--class blog.WordCount \
--master spark://hadoop01:7077 \
--deploy-mode client \
--total-executor-cores 2 \
--executor-cores 1 \
--executor-memory 600M \
/home/hadoop/jars/spark/spark-wc.jar \
hdfs://bd1906/data/spark/hello.txt

这是文件内容,一定要保证hdfs上有这个文件

hello you
hello you
hello me
hello   you
hello you
hello me
This page outlines the steps for getting a Storm cluster up and running

如果没有的话可以上传一下

hdfs dfs -put hello.txt /data/spark/hello.txt

然后在当前目录运行脚本

./spark-submit-wc-standalone.sh

如果出现了权限不允许的错误,运行以下命令再运行脚本,如果没有可忽略

chmod 777 ./spark-submit-wc-standalone.sh

成功输出结果

Spark入门运行wordcount_spark_10

Spark入门运行wordcount_spark_11

我们可以访问一下spark的web页面http://hadoop01:8080

可以看到Completed Applications有记录

Spark入门运行wordcount_apache_12

点进去,在stderr中可以看到详细信息

Spark入门运行wordcount_spark_13

标签:入门,--,wordcount,hello,apache,org,spark,Spark,String
From: https://blog.51cto.com/u_15294184/7907152

相关文章

  • EPLAN 电气设计入门学习笔记
     1.EPLAN中的结构描述符号功能面结构=功能面结构符号“=”,译为高层代号,表示系统根据功能被分为若干组成项目。产品面结构-符号“-”,表示根据产品分类,例如“-Q”表示空气开关。位置面结构+符号“+”,描述部件在系统中的位置,译为“位置代号”。器件引脚标识:例如“-H1:......
  • VSCode 新手入门第二期 C/C++环境配置
    前言编译器由于VSCode不像VisualStudio和DEV,CodeBlocks一样自带编译器,所以说我们得自己安装编译器现在主流编译器有许多,我这边推荐TDM-GCC,因为后面还有图形化库要配编译器下载https://jmeubank.github.io/tdm-gcc/download/正常下载中间那个tdm64版本编译器安装选Creat......
  • VSCode 新手入门第一期 基本安装&常用插件
    前言来一大份适用于科大的VSCode上手全家桶安装VSCode官方下载地址:https://code.visualstudio.com/Download这边直接大按钮下的是User版(只能在你的账户里用),我自己下的是下面的SystemInstaller,优点是全局可用,缺点是补分操作需要管理员权限以上两个版本下哪个都可以由于现......
  • Python中的av入门
    Python中的av入门在Python中,av是一个强大的多媒体处理库,提供了音频和视频的编码、解码、剪辑、合并等功能。本文将介绍av库的安装和基本用法,以帮助你快速入门。安装av库使用pip命令可以方便地安装av库。bashCopycodepipinstallav如果你使用的是conda环境,请使用conda命令安装。ba......
  • Python中的SWIG入门
    Python中的SWIG入门什么是SWIG?SWIG(SimplifiedWrapperandInterfaceGenerator,简化封装和接口生成器)是一个开源工具,用于将C/C++代码转换为各种高级编程语言的接口代码。它允许开发人员在Python等脚本语言中直接使用底层的C/C++代码,以提高开发效率和灵活性。SWIG的优势及应用场......
  • Python中的gym入门
    Python中的gym入门在机器学习和强化学习领域,学习和评估算法的性能通常是非常重要的。为了满足这个需求,OpenAI开发了一个名为gym的Python库。gym提供了一系列标准化的环境,用于开发和比较强化学习算法。安装首先,我们需要安装gym库。打开终端,并执行以下命令:bashCopycodepipinstallg......
  • 神经网络入门篇:神经网络到底是什么东西
    神经网络到底是什么东西我们常常用深度学习这个术语来指训练神经网络的过程。有时它指的是特别大规模的神经网络训练。那么神经网络究竟是什么呢?举例说明-通俗易懂第一个例子从一个房价预测的例子开始讲起。假设你有一个数据集,它包含了六栋房子的信息。所以,你知道房屋的面......
  • Python 速学!不懂怎么入门python的小白看这篇就够了!
    Python是一种非常流行的脚本语言,而且功能非常强大,几乎可以做任何事情,比如爬虫、网络工具、科学计算、树莓派、Web开发、游戏等各方面都可以派上用场。同时无论在哪种平台上,都可以用Python进行系统编程。机器学习可以用一些Python库来实现,比如人工智能常用的TensorFlow。也可......
  • git入门
    git入门今天在学习黑马的实战项目时讲到了git,突然发现我还没有学过这部分内容,然后去b站找到了大佬狂神的这部分课,有参考了一些笔记(相关链接放在文末),自己随便总结了一下,以方便日后回顾学习。1.什么是版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、......
  • Linux基础入门
    通用快捷键tab按键补全,双击tab展示所有可能性:setnu显示行号上下键切换写过的命令开关机reboot重启poweroff关机;shutdown–hnow立刻关机ctrl+c强制停止命令的运行,退出当前命令的输入ctrl+d退出或登出history查看历史命令清屏ctrl+l或clear查询IP地址LInux:if......