Spark入门程序WordCount实现(Java)

本文介绍了在Hadoop 2.7.7和Spark 2.4.7环境下,使用Java实现WordCount的步骤。首先,详细讲解了环境配置和数据准备,包括启动Hadoop集群和上传测试文件至HDFS。接着,通过IntelliJ IDEA创建Maven工程,添加Spark依赖。代码逻辑主要涉及从HDFS读取文件,分词,分组计数,然后将结果写回HDFS。最后,指导如何编译打包,使用spark-submit命令运行程序,并查看输出结果。


为了快速入门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

在这里插入图片描述

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

在这里插入图片描述

2. 代码实现

2.1 maven工程创建

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

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

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <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());

        // 转化为<word, count>的形式
        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-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路径,可以看到结果已经写入到对应路径下

在这里插入图片描述

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

在这里插入图片描述

Reference

  1. Maven系列教程

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值