📜  如何配置 Windows 以构建具有 Apache Spark 代码的项目而无需安装它?

📅  最后修改于: 2021-10-27 06:42:30             🧑  作者: Mango

Apache Spark 是一个统一的分析引擎,用于处理大规模数据。 Apache spark 提供了通过使用 API 与其他编程语言(如Java、 Python、R 等)连接的功能。它提供了一种简单的方法来配置其他 IDE 以及根据您的要求执行我们的任务。它支持诸如用于 SQL 的 Spark SQL、用于图形处理的 GraphX、用于机器学习的 MLlib 等工具。

在此,您将看到我们如何配置 Scala IDE 以执行 Apache Spark 代码。您将能够学习在 Scala IDE 中配置 Spark 项目,而无需在您的系统中明确安装 Hadoop 和 Spark。我们将详细讨论每个步骤,您将能够使用这些步骤进行配置。此外,还将介绍配置所需的依赖项,我们还将介绍配置 Scala IDE 所需的先决条件。在这里,我们将讨论并在 Scala IDE 上实现所有步骤。但是,任何其他 IDE 也可以遵循这些步骤。如果您想在 Eclipse IDE 上配置它,那么 Eclipse IDE 也可以遵循相同的步骤。

介绍

  • Spark 是加州大学AMPLab于 2009 年开发的开源分布式大数据处理框架。
  • 后来 Spark 被捐赠给了 Apache 软件基金会。现在,它由 Apache 基金会维护。
  • Spark 是主要的大数据处理引擎,它是一种编写的 Scala 编程语言。
  • 最初,Hadoop 中有 MapReduce(基于Java编程语言)处理模型。
  • Spark 框架支持Java、Scala、 Python和 R 编程语言。

基于数据类型和功能,Spark 有一个不同的 API 来处理如下:

  • Spark 的基本构建块是 Spark 核心。
  • Spark 提供 SparkSQL 用于基于 DataFrame 和 Dataset 的结构化和半结构化数据分析。
  • 对于流式数据 Spark 具有 Spark Streaming API。
  • 为了实现机器学习算法,Spark 提供了 MLib,即分布式机器学习框架。
  • Graph 数据可以用 GraphX 有效地处理,即分布式图处理框架。

SparkSQL、Spark Streaming、MLib 和 GraphX 基于 Spark 核心功能和 RDD 的概念,即弹性分布式数据集。 RDD 是分布式分区数据集的不可变集合,存储在 Hadoop 集群中的数据节点上。

先决条件:

  1. Java。确保您的系统上安装了Java 。
  2. Scala IDE/Eclipse/Intellij IDEA:您可以使用其中任何一个,只要您熟悉。在这里,您将看到 Scala IDE 供您参考。

第 1 步:创建 Maven 项目

创建一个 Maven 项目非常简单。请按照以下步骤创建项目。

  • 单击文件菜单选项卡 ->新建->其他
  • 单击Maven 项目。在这里,在这一步点击“ Create a simple project(skip archtype selection) ”复选框,然后点击“ Next>
  • 添加Group IdArtifact Id ,然后点击“ Finish

至此,您已经成功地使用 Maven 创建了一个Java项目。现在,下一步是为 Spark 添加依赖项。

第 2 步:将所需的 Spark 依赖项添加到 pom.xml

您可以在新创建的 maven 项目中找到 pom.xml 文件并在 Spark(spark-core, spark-sql) 依赖项下添加。您可以根据项目需要更改这些依赖项版本。

注意:可以看到 Spark-core 和 spark-sql 添加了 2.4.0 依赖。 Spark 3.0.1 版本也可用,您可以根据您在集群上的 Spark 版本和您的项目需求添加依赖项。

XML

  
 4.0.0
 java.spark
 Spark-Learning
 0.0.1-SNAPSHOT
  
 
  
 
  com.thoughtworks.paranamer
  paranamer
  2.8
 
  
 
  org.apache.spark
  spark-core_2.12
  2.4.0
 
  
 
  org.apache.spark
  spark-sql_2.12
  2.4.0
 
  

  


Java
package spark.java;
  
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
  
public class SparkReadCSV {
  
    public static void main(String[] args)
    {
  
        // Set winutils.exe file path
  
        System.setProperty("hadoop.home.dir",
                           "D:\\Hadoop\\");
  
        // Create a SparkSession object to process the data
        // Function builder() used for creating SparkSession
          
        // object
        // Function appName() set a name for the application
        // which will be show in YARN/Spark web UI.
  
        // Function master() set a spark master URL to run
        // application, such "local" to run locally OR
  
        // "local[3]" to run with 3 cores OR "yarn-cluster"
        //  to run on YARN Hadoop cluster.
  
        // Function getOrCreate() return a Spark session to
        // execute application.
        SparkSession spark
            = SparkSession
                  .builder()
                  .appName("***** Reading CSV file.*****")
                  .master("local[3]")
                  .getOrCreate();
  
        // Read sample CSV file.
  
        // Read used to read data as a DataFrame.
  
        // The boolean value in option function indicate that
        // input data first line is header.
  
        // The delimiter value("|") in option indicate that
        // files records are | separated.
  
        // function csv() is accept input data file path
        // either from Local File System OR Hadoop Distributed
        // File System.
        
        // Here we are reading data from Local File System.
        Dataset employeeDS
            = spark
                  .read()
                  .option("header", true)
                  .option("delimiter", "|")
                  .csv("D:\\data\\employee.txt");
  
        // Displaying the records.
        employeeDS.show();
    }
}


第 3 步:编写示例 Spark 代码

现在,您几乎完成了。只需创建一个名为 spark 的包。 Java在您的项目中。然后在新创建的包中,创建一个Java类 SparkReadCSV。由于我们没有在系统上安装 Hadoop,我们仍然可以简单地下载winutils文件并将该路径添加为 Hadoop 主目录路径。

以下是我们执行此操作所需的几个步骤。

  • 下载 winutils.exe 文件。 https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-winutils/2.4.1
  • 在您的驱动器上创建一个 Hadoop\bin 目录。在这里,就我而言,我在 D: 驱动器中创建了 Hadoop\bin 文件夹。
  • 将 winutils.exe 文件复制到 D:\\hadoop\\bin 文件夹。
  • 最后在 SparkReadCSV 中。 Java文件将 Hadoop 主目录添加到上述路径。像这样如下。
System.setProperty("hadoop.home.dir", "D:\\Hadoop\\");

创建一个employee.txt 文件并添加以下虚拟记录。

id name address salary
1 Bernard Norris Amberloup 10172
2 Sebastian Russell Delicias 18178
3 Uriel Webster Faisalabad 16419
4 Clarke Huffman Merritt 16850
5 Orson Travis Oberursel 17435

将以下代码添加到SparkReadCSV。 Java文件。您可以使用非常描述性的注释检查下面给出的代码,以便更好地理解。

代码:

Java

package spark.java;
  
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
  
public class SparkReadCSV {
  
    public static void main(String[] args)
    {
  
        // Set winutils.exe file path
  
        System.setProperty("hadoop.home.dir",
                           "D:\\Hadoop\\");
  
        // Create a SparkSession object to process the data
        // Function builder() used for creating SparkSession
          
        // object
        // Function appName() set a name for the application
        // which will be show in YARN/Spark web UI.
  
        // Function master() set a spark master URL to run
        // application, such "local" to run locally OR
  
        // "local[3]" to run with 3 cores OR "yarn-cluster"
        //  to run on YARN Hadoop cluster.
  
        // Function getOrCreate() return a Spark session to
        // execute application.
        SparkSession spark
            = SparkSession
                  .builder()
                  .appName("***** Reading CSV file.*****")
                  .master("local[3]")
                  .getOrCreate();
  
        // Read sample CSV file.
  
        // Read used to read data as a DataFrame.
  
        // The boolean value in option function indicate that
        // input data first line is header.
  
        // The delimiter value("|") in option indicate that
        // files records are | separated.
  
        // function csv() is accept input data file path
        // either from Local File System OR Hadoop Distributed
        // File System.
        
        // Here we are reading data from Local File System.
        Dataset employeeDS
            = spark
                  .read()
                  .option("header", true)
                  .option("delimiter", "|")
                  .csv("D:\\data\\employee.txt");
  
        // Displaying the records.
        employeeDS.show();
    }
}

我们已经通过几个简单的步骤设置了一个 Spark 开发环境。以此为出发点,我们可以通过解决不同的用例来进一步探索 Spark。