Spark入门程序WordCount实现(Java)

文章目录

      • 1. 环境与数据准备
        • 1.1 运行环境
        • 1.2 数据准备
      • 2. 代码实现
        • 2.1 maven工程创建
        • 2.2 代码逻辑
        • 2.3 编译、打包、运行
      • Reference

为了快速入门java与Spark工程的构建与开发,本次使用java实现Spark经典程序WordCount,过程记录如下,如有错误,请指正。

1. 环境与数据准备

1.1 运行环境

  • Hadoop:2.7.7

  • Spark:2.4.7

  • java:1.8.0_211

  • Maven:3.6.3

1.2 数据准备

  • 使用如下命令启动Hadoop集群,并使用jps命令确认是否启动成功
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager

Spark入门程序WordCount实现(Java)_第1张图片

  • 在本地启动Hadoop集群后,将测试文件上传至HDFS指定目录下,查看hdfs目录如下:
hdfs dfs -mkdir /input
hdfs dfs -mkdir /output
hdfs dfs -put JackMa /input
hdfs dfs -ls /input

Spark入门程序WordCount实现(Java)_第2张图片

2. 代码实现

2.1 maven工程创建

使用intellij IDEA创建Maven工程,关于Maven的基本知识可以参考Maven系列教程。

  • 在pom文件中增加以下语句,添加spark依赖
<properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <spark.version>2.4.7spark.version>
        <scala.version>2.11scala.version>
        <hadoop.version>2.7.7hadoop.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.sparkgroupId>
            <artifactId>spark-core_${scala.version}artifactId>
            <version>${spark.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.sparkgroupId>
            <artifactId>spark-sql_${scala.version}artifactId>
            <version>${spark.version}version>
        dependency>
    dependencies>
  • 执行maven命令mvn clean package,下载好依赖

2.2 代码逻辑

代码逻辑比较简单——

  • 从hdfs读文件
  • 对句子进行分词(因为用的是中文,所以是分字)
  • 按字分组计数并排序
  • 结果写到hdfs
package org.personal.yc.sparkExample;

import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.sql.*;
import java.util.*;

/**
 * @Description: spark的WordCount实战
 * @author: yczheng
 * @date: 2020/11/28 22:37
 * @reference: https://gist.github.com/lucianogiuseppe/063aff936f548fdd0faad6ef004a43e7
 */

public class WordCount {

    public static final String BASE_PATH = "hdfs://localhost:9000/";

    public static void main(String[] args) {

        String input_path = args[0];
        String output_path = args[1];

        // create spark_session
        SparkSession spark = SparkSession
                .builder()
                .appName("java WordCount example")
                .enableHiveSupport()
                .getOrCreate();

        // input
        Dataset<String> text = spark.read().textFile(BASE_PATH + input_path).as(Encoders.STRING());

        // 分词
        Dataset<String> words = text.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterator<String> call(String s) throws Exception {
                return Arrays.asList(s.split("")).iterator();
            }
        }, Encoders.STRING());

        // 转化为的形式
        Dataset<Row> word_count = words.groupBy("value").count().sort(functions.desc("count")).coalesce(1);

        // output
        word_count.write().mode("overwrite").csv(BASE_PATH + output_path);
    }
}

2.3 编译、打包、运行

  • 在工程根目录下执行mvn clean package,编译并打包,可以在根目录的target目录中找到对应的jar文件

Spark入门程序WordCount实现(Java)_第3张图片

  • 使用spark-submit命令提交jar文件,指定运行模式为local,运行类为WordCount,以及对应的输入输出路径
 spark-submit --master local --class org.personal.yc.sparkExample.WordCount target/hellomaven-1.0-SNAPSHOT.jar input/JackMa output/JackMaWordCount
  • 运行后,查看hdfs的output路径,可以看到结果已经写入到对应路径下

Spark入门程序WordCount实现(Java)_第4张图片

  • 拉下来查看文件,可以看到对每个文字计数的结果

Spark入门程序WordCount实现(Java)_第5张图片

Reference

  1. Maven系列教程

  2. Hadoop学习——(2) 安装过程记录(Ubuntu上的伪分布模式)

  3. Hadoop学习——(3) 基本使用

  4. https://gist.github.com/lucianogiuseppe/063aff936f548fdd0faad6ef004a43e7

你可能感兴趣的:(数据分析,大数据学习记录,spark,wordcount,maven)