Java接入Apache Spark(入门环境搭建、常见问题)

Java接入Apache Spark(环境搭建、常见问题)

背景介绍

Apache Spark 是一个快速的,通用的集群计算系统。它对 Java,Scala,Python 和 R 提供了的高层 API,并有一个经优化的支持通用执行图计算的引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL,用于机器学习的 MLlib,用于图计算的 GraphX 和 Spark Streaming。

Spark 是 MapReduce 的替代方案,而且兼容 HDFS、Hive,可融入 Hadoop 的生态系统,以弥补 MapReduce 的不足。,Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快 10 倍以上。Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流

Apache Spark官网:https://spark.apache.org/

Apache Spark中文官网:https://spark.apachecn.org/

开发环境

  • win11 操作系统
  • IntelliJ IDEA 2023.2.5
  • jdk1.8 (corretto-1.8.0_392)

资源下载

Hadoop下载
winutils下载

安装环境

安装Hadoop【别安装在 Program Files这类带空格的文件夹下,因为环境变量找不着!!!】
  • 将下载好的hadoop-3.3.6.tar.gz包,放到想要安装的目录,我这里是放在D盘(D:\hadoop-3.3.6.tar.gz)

  • 解压hadoop-3.3.6.tar.gz文件【注意:需要在cmd中以管理员身份运行】

  • 进入文件目录

    等待执行结束

  • 配置HADOOP_HOME环境变量,进入 此电脑 -> 右键 -> 属性 -> 高级系统设置 -> 环境变量
    选择新建,配置变量名 HADOOP_HOME ,变量值为 hadoop的解压路径

    然后在系统变量的path中加入以下两个变量,保存即可。

bash 复制代码
%HADOOP_HOME%\bin
%HADOOP_HOME%\sbin

bash 复制代码
tar zxvf hadoop-3.3.6.tar.gz

解压后路径

bash 复制代码
D:\hadoop-3.3.6
  • 配置 Hadoop 环境脚本
    在解压后的路径中(D:\Program Files\hadoop-3.3.6)找到D:\Program Files\hadoop-3.3.6\etc\hadoop\hadoop-env.cmd脚本,配置JDK的JAVA_HOME真实路径。
bash 复制代码
## 替换前
set JAVA_HOME=%JAVA_HOME%
## 替换后
set JAVA_HOME=C:\Users\cessz\.jdks\corretto-1.8.0_392
安装winutils
  • 将winutils下载地址里 hadoop.dll 和 winutils.exe 文件拷贝到 C:\Windows\System32

    目录中

    重启电脑

  • 或者将winutils下载地址里的所有文件下载下来放入,hadoop的bin文件夹(D:\hadoop-3.3.6\bin)

    重启IDEA

检查是否安装成功

  • 检测环境变量是否配置成功
    bash hadoop -version

  • 在IDEA中测试

    引入依赖

java 复制代码
<dependency> <!-- Spark dependency -->
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.5.0</version>
    <scope>provided</scope>
</dependency>
<dependency> <!-- Spark dependency -->
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.5.0</version>
    <scope>provided</scope>
</dependency>

编写测试Application

java 复制代码
import org.apache.spark.api.java.function.FilterFunction;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.SparkSession;

public class SimpleApp {
    public static void main(String[] args) {
        String logFile = "D:\\IdeaProjects\\project\\README.md";
        SparkSession spark = SparkSession.builder().appName("Simple Application").master("local[*]").getOrCreate();
        Dataset<String> logData = spark.read().textFile(logFile).cache();

        long numAs = logData.filter((FilterFunction<String>) s -> s.contains("base")).count();
        long numBs = logData.filter((FilterFunction<String>) s -> s.contains("common")).count();

        System.out.println("Lines with base: " + numAs + ", lines with common: " + numBs);
        spark.stop();
    }
}

查看打印读取到的字符数量

常见问题

启动问题:IDEA:Error running,Command line is too long. Shorten command line启动行过长

解决方案:

打开Edit Configurations,配置保存完成,Apply之后启动即可。

Spark执行任务时,找不到主节点 Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration

在Spark中,主节点的地址配置位于spark.master属性中,默认值为local[],表示使用本地模式运行。本文章是本地搭建使用的,所以加上 .master("local[ ]") 即可。

参考博客

相关推荐
ss2733 分钟前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
DokiDoki之父15 分钟前
MyBatis—增删查改操作
java·spring boot·mybatis
兩尛32 分钟前
Spring面试
java·spring·面试
Java中文社群39 分钟前
服务器被攻击!原因竟然是他?真没想到...
java·后端
Full Stack Developme1 小时前
java.nio 包详解
java·python·nio
零千叶1 小时前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝1 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li3714908901 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠1 小时前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea
Aevget2 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse