spark2.1.0配置windows本地基于java语言的Eclipse开发环境

本文详细介绍在Windows环境下搭建Spark开发环境的过程,包括Hadoop、Spark、JDK、Scala、Maven、Eclipse等软件的安装配置,以及如何在Eclipse中使用Maven创建Spark项目并进行开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面配置过在windows本地通过Eclipse开发hadoop程序然后打成jar包在Linux集群中运行的经历,因此一方面是基于同样的需求,另一方面是因为我是spark小白,想通过这种方式快速了解和学习spark开发。

(注意:此文配置的是基于java语言开发spark的,如果要用scala开发,则需要在Eclipse中添加scala插件并做进一步配置。如果要用python开发,则最好用pycharm)

软件环境介绍

首先,需要在windows本地安装hadoop、spark、jdk、scala、maven、Eclipse。

软件版本及下载链接
Hadoop2.7.5http://archive.apache.org/dist/hadoop/core/hadoop-2.7.5/
Spark2.1.0http://spark.apache.org/downloads.html
JDK1.8.0https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Scala2.11.0http://distfiles.macports.org/scala2.11/
Maven3.5.4http://maven.apache.org/docs/history.html
EclipseMars.2 (4.5.2)http://www.eclipse.org/downloads/packages/release/Mars/2
winutils&hadoop.dll https://github.com/srccodes/hadoop-common-2.2.0-bin

首先安装jdk,这里不做介绍了。 

一、Hadoop安装

下载压缩文件后解压到某个目录下,我的是在F:\MySoftware下,解压后会得到一个hadoop-2.7.5文件夹,结果如下:

 然后配置hadoop的环境变量HADOOP_HOME,并在path中加入%HADOOP_HOME%\bin。

 

 然后在cmd中输入hadoop -version查看版本信息,证明是否安装成功

 最后还有一步!将下载下来的winutils.exe和hadoop.dll复制到%HADOOP_HOME%\bin目录下即可完成hadoop安装配置。(如果没有这两个文件的话,运行spark程序的时候会报错,但奇怪的是,我的报错了但仍然可以运行得到结果。。。)

二、Scala安装

下载解压scala压缩文件,得到一个scala-2.11.0文件夹,文件目录结果如下:

然后配置 SCALA_HOME系统变量,并在path中加入%SCALA_HOME%\bin

 然后在cmd中输入scala -version查看是否安装成功。

三、Spark安装

首先将下载的spark压缩包解压到某个目录下,我的是放在F:\MySoftware\下,解压后会生成一个名为spark-2.1.0-bin-hadoop2.7的文件夹,文件结构如下:

 然后配置spark的环境变量SPARK_HOME,并在path中加入%SPARK_HOME%\bin。

此后在cmd中输入spark-shell查看是否安装成功(此时可能会显示一些警告信息,一般不会影响,如果看着不舒服也可以配置)

(注意,因为没有在windows本地搭建hadoop集群和spark集群,只是想在本地能够开发spark程序,真正的运行是在Linux集群上的,因此没有配置spark.env.sh等文件)

四、Eclipse下载和配置maven

Eclipse的安装在这里不做介绍了,相信大家都安装过。没安装的可以看这里

主要需要说的是maven的配置。

首先下载maven压缩文件后解压得到一个名为apache-maven-3.5.4的文件夹,文件目录结构如下:

 与前面安装hadoop之类的类似,也需要添加系统变量及path。。。

 在cmd中输入mvn -v查看是否安装成功

接下来要在Eclipse中配置maven。

在Eclipse中点击window-->preference进入如下界面:

现在就已经将maven安装到Eclipse中了。但是还需要配置本地仓库。因为maven是一个方便我们管理jar包的工具,我们需要的jar包都是从中央仓库下载到本地的,但是如果本地不做保存,以后用到相同的jar包时还需要到中央仓库下载,就会很麻烦。因此需要配置本地仓库,这样下载后的jar包就放到本地仓库,方便以后使用。

配置本地仓库:

找到maven安装目录下的conf文件夹下的settings.xml文件,编辑其localRepository属性。

然后再次点击Eclipse中的window-->preferences,进入如下界面,并点击browser选择刚刚配置的那个settings.xml文件,然后下面就会自动显示你配置的本地仓库路径,最后点击应用即可。

这样就完成了Eclipse中的maven的配置。 接下来就在Eclipse中开始开发第一个spark程序。

五、开发spark

1.创建maven项目

点击finish后就会生成一个FirstSparkDemo的maven项目,结果如下:

接下来要配置pom.xml文件,让它帮忙下载一些spark开发所需要的jar文件。用以下内容替换掉<url>http://www.example.com</url>以下的内容。

<repositories>
		<repository>
			<id>central</id>
			<name>Central Repository</name>
			<url>http://maven.aliyun.com/nexus/content/repositories/central</url>
			<layout>default</layout>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.7</maven.compiler.source>
		<maven.compiler.target>1.7</maven.compiler.target>
		<spark.version>2.1.0</spark.version>
		<scala.version>2.11.0</scala.version>
		<hadoop.version>2.7.5</hadoop.version>
	</properties>


	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-core_2.11</artifactId>
			<version>${spark.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-sql_2.11</artifactId>
			<version>${spark.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-hive_2.11</artifactId>
			<version>${spark.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-streaming_2.11</artifactId>
			<version>${spark.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>2.7.0</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.6</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.6</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>
		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>jaxen</groupId>
			<artifactId>jaxen</artifactId>
			<version>1.1.6</version>
		</dependency>
		<dependency>
			<groupId>args4j</groupId>
			<artifactId>args4j</artifactId>
			<version>2.33</version>
		</dependency>
		<dependency>
			<groupId>jline</groupId>
			<artifactId>jline</artifactId>
			<version>2.14.5</version>
		</dependency>
	</dependencies>

	<build>
		<pluginManagement><!-- lock down plugins versions to avoid using Maven 
				defaults (may be moved to parent pom) -->
			<plugins>
				<plugin>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.0.0</version>
				</plugin>
				<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.7.0</version>
				</plugin>
				<plugin>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>2.20.1</version>
				</plugin>
				<plugin>
					<artifactId>maven-jar-plugin</artifactId>
					<version>3.0.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-install-plugin</artifactId>
					<version>2.5.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>2.8.2</version>
				</plugin>
				<plugin>
					<artifactId>maven-assembly-plugin</artifactId>
					<version>2.2</version>
					<configuration>
						<archive>
							<manifest>
								<!-- 我运行这个jar所运行的主类 -->
								<mainClass>code.demo.spark.JavaWordCount</mainClass>
							</manifest>
						</archive>
						<descriptorRefs>
							<descriptorRef>
								<!-- 必须是这样写 -->
								jar-with-dependencies
							</descriptorRef>
						</descriptorRefs>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

接下来在src/main/java下创建类,开始编程。

package FirstSpark;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;
import java.util.ArrayList;
import java.util.List;

public final class FirstSparkDemo {

	public static void main(String[] args) throws Exception {
		SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi").setMaster("local");//local是特殊值,可以让spark运行在单机单线程上而无需连接到集群
		JavaSparkContext jsc = new JavaSparkContext(sparkConf);
		long start = System.currentTimeMillis();
		int slices = 10;
		int n = 100000 * slices;
		List<Integer> l = new ArrayList<Integer>(n);
		for (int i = 0; i < n; i++) {
			l.add(i);
		}
		/*
		 * JavaSparkContext的parallelize:将一个集合变成一个RDD - 第一个参数一是一个 Seq集合 -
		 * 第二个参数是分区数 - 返回的是RDD[T]
		 */
		JavaRDD<Integer> dataSet = jsc.parallelize(l, slices);
		int count = dataSet.map(new Function<Integer, Integer>() {
			private static final long serialVersionUID = 1L;

			public Integer call(Integer integer) {
				double x = Math.random() * 2 - 1;
				double y = Math.random() * 2 - 1;
				return (x * x + y * y < 1) ? 1 : 0;
			}
		}).reduce(new Function2<Integer, Integer, Integer>() {
			private static final long serialVersionUID = 1L;

			public Integer call(Integer integer, Integer integer2) {
				return integer + integer2;
			}
		});
		long end = System.currentTimeMillis();
		System.out.println("Pi is roughly " + 4.0 * count / n + ",use : " + (end - start) + "ms");
		jsc.stop();
		jsc.close();
	}

}

运行后有如下输出则说明配置成功。

参考博文:

https://blog.youkuaiyun.com/qq_32653877/article/details/81979371

https://my.oschina.net/orrin/blog/1812035

https://blog.youkuaiyun.com/nxw_tsp/article/details/78281533(这是一个配置windows本地spark集群的博文) 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值