基于Intellij IDEA搭建Spark开发环境搭建

 基于Intellij IDEA搭建Spark开发环境搭——参考文档

  ● 参考文档http://spark.apache.org/docs/latest/programming-guide.html

  ● 操作步骤

·a)创建maven 项目

·b)引入依赖(Spark 依赖、打包插件等等)

 基于Intellij IDEA搭建Spark开发环境—maven vs sbt

  ● 哪个熟悉用哪个

  ● Maven也可以构建scala项目

 基于Intellij IDEA搭建Spark开发环境搭—maven构建scala项目

  ● 参考文档http://docs.scala-lang.org/tutorials/scala-with-maven.html

  ● 操作步骤

  a)用maven构建scala项目(基于net.alchim31.maven:scala-archetype-simple)

  b)pom.xml引入依赖(spark依赖、打包插件等等)

  在pom.xml文件中的合适位置添加以下内容:

<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.</artifactId>
<version>2.2.</version>
<scope>provided</scope> //设置作用域,不将所有依赖文件打包到最终的项目中
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"></transformer>
</transformers>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

  进行一次打包操作以测试是否工作正常。

  在Terminal中输入指令:

mvn clean package
运行结果如下:
D:\Code\JavaCode\sparkMaven>mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.zimo.spark:scala-spark >---------------------
[INFO] Building scala-spark 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ scala-spark ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ scala-spark ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\Code\JavaCode\sparkMaven\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ scala-spark ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ scala-spark ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\Code\JavaCode\sparkMaven\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ scala-spark ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.:test (default-test) @ scala-spark ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ scala-spark ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: D:\Code\JavaCode\sparkMaven\target\scala-spark-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-shade-plugin:2.4.:shade (default) @ scala-spark ---
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing D:\Code\JavaCode\sparkMaven\target\scala-spark-1.0-SNAPSHOT.jar with D:\Code\JavaCode\sparkMaven\target\scala-spark-1.0-SNAPSHOT-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.675 s
[INFO] Finished at: --11T15::+:
[INFO] ------------------------------------------------------------------------

  出现了BUILD SUCCESS,表明一切正常。下面给大家演示以下Scala编程的大致流程,以及在该框架下同样用Java进行实现应该如何操作。

Scala编程实现WordCount

  注意:此处必须选为Object,否则没有main方法!

  然后输入以下代码,执行打包操作

def main(args: Array[String]): Unit = {
println("hello spark")
}

  

  完成后可以看到项目目录下多出来了一个target目录。这就是使用Scala编程的一个大致流程,下面我们来写一个WordCount程序。(后面也会有Java编程的版本提供给大家)

  首先在集群中创建以下目录和测试文件:

[hadoop@masternode ~]$ cd /home/hadoop/

[hadoop@masternode ~]$ ll

total 

drwxr-xr-x.  hadoop hadoop   Sep  : app

drwxrwxr-x.  hadoop hadoop   Aug  : data

drwxr-xr-x.  hadoop hadoop   Apr  : Desktop

drwxr-xr-x.  hadoop hadoop   Apr  : Documents

drwxr-xr-x.  hadoop hadoop   Apr  : Downloads

drwxr-xr-x.  hadoop hadoop   Apr  : Music

drwxr-xr-x.  hadoop hadoop   Apr  : Pictures

drwxr-xr-x.  hadoop hadoop   Apr  : Public

drwxr-xr-x.  hadoop hadoop   Apr  : Templates

drwxrwxr-x.  hadoop hadoop   Apr  : tools

drwxr-xr-x.  hadoop hadoop   Apr  : Videos

-rw-rw-r--.  hadoop hadoop  Apr  : zookeeper.out

[hadoop@masternode ~]$ mkdir testSpark/

[hadoop@masternode ~]$ ll

total 

drwxr-xr-x.  hadoop hadoop   Sep  : app

drwxrwxr-x.  hadoop hadoop   Aug  : data

drwxr-xr-x.  hadoop hadoop   Apr  : Desktop

drwxr-xr-x.  hadoop hadoop   Apr  : Documents

drwxr-xr-x.  hadoop hadoop   Apr  : Downloads

drwxr-xr-x.  hadoop hadoop   Apr  : Music

drwxr-xr-x.  hadoop hadoop   Apr  : Pictures

drwxr-xr-x.  hadoop hadoop   Apr  : Public

drwxr-xr-x.  hadoop hadoop   Apr  : Templates

drwxrwxr-x.  hadoop hadoop   Sep  : testSpark

drwxrwxr-x.  hadoop hadoop   Apr  : tools

drwxr-xr-x.  hadoop hadoop   Apr  : Videos

-rw-rw-r--.  hadoop hadoop  Apr  : zookeeper.out

[hadoop@masternode ~]$ cd testSpark/

[hadoop@masternode testSpark]$ vi word.txt

apache hadoop spark scala

apache hadoop spark scala

apache hadoop spark scala

apache hadoop spark scala

  WordCount.scala代码如下:(如果右键New下面没有“Scala Class“”选项,请检查IDEA是否添加了scala插件)

package com.zimo.spark

import org.apache.spark.{SparkConf, SparkContext}

/**
* Created by Zimo on 2018/9/11
*/
object MyWordCount {
def main(args: Array[String]): Unit = {
//参数检查
if (args.length < ) {
System.err.println("Usage: myWordCount <input> <output>")
System.exit()
} //获取参数
val input = args()
val output = args() //创建Scala版本的SparkContext
val conf = new SparkConf().setAppName("myWordCount")
val sc = new SparkContext(conf) //读取数据
val lines = sc.textFile(input) //进行相关计算
lines.flatMap(_.split(" ")).map((_,)).reduceByKey(_+_).collect().foreach(println) //保存结果 sc.stop()
}
}

  从代码可以看出scala的优势就是简洁,但是可读性较差。所以,学习可以与后面的java代码进行对比。

  然后打包

  打包完成后把上图中的文件上传到spark集群上去,然后执行。

[hadoop@masternode testSpark]$ rz

[hadoop@masternode testSpark]$ ll

total 

-rw-r--r--.  hadoop hadoop  Sep  : scala-spark-1.0-SNAPSHOT.jar

-rw-rw-r--.  hadoop hadoop   Sep  : word.txt

[hadoop@masternode testSpark]$ cd ../app/spark-2.2./

[hadoop@masternode spark-2.2.]$ cd bin/

[hadoop@masternode bin]$ ll

total 

-rwxr-xr-x.  hadoop hadoop  Jul     beeline

-rw-r--r--.  hadoop hadoop   Jul     beeline.cmd

-rwxr-xr-x.  hadoop hadoop  Jul     find-spark-home

-rw-r--r--.  hadoop hadoop  Jul     load-spark-env.cmd

-rw-r--r--.  hadoop hadoop  Jul     load-spark-env.sh

-rwxr-xr-x.  hadoop hadoop  Jul     pyspark

-rw-r--r--.  hadoop hadoop  Jul     pyspark2.cmd

-rw-r--r--.  hadoop hadoop  Jul     pyspark.cmd

-rwxr-xr-x.  hadoop hadoop  Jul     run-example

-rw-r--r--.  hadoop hadoop   Jul     run-example.cmd

-rwxr-xr-x.  hadoop hadoop  Jul     spark-class

-rw-r--r--.  hadoop hadoop  Jul     spark-class2.cmd

-rw-r--r--.  hadoop hadoop  Jul     spark-class.cmd

-rwxr-xr-x.  hadoop hadoop  Jul     sparkR

-rw-r--r--.  hadoop hadoop  Jul     sparkR2.cmd

-rw-r--r--.  hadoop hadoop  Jul     sparkR.cmd

-rwxr-xr-x.  hadoop hadoop  Jul     spark-shell

-rw-r--r--.  hadoop hadoop  Jul     spark-shell2.cmd

-rw-r--r--.  hadoop hadoop  Jul     spark-shell.cmd

-rwxr-xr-x.  hadoop hadoop  Jul     spark-sql

-rwxr-xr-x.  hadoop hadoop  Jul     spark-submit

-rw-r--r--.  hadoop hadoop  Jul     spark-submit2.cmd

-rw-r--r--.  hadoop hadoop  Jul     spark-submit.cmd
[hadoop@masternode testSpark]$ ./spark-submit --class com.zimo.spark.MyWordCount ~/testSpark/scala-spark-1.0-SNAPSHOT.jar ~/testSpark/word.txt ~/testSpark/

  运行结果如下图所示:

  以上操作是把结果直接打印出来,下面我们尝试一下将结果保存到文本当中去。修改以下代码:

//进行相关计算
//lines.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
val resultRDD = lines.flatMap(_.split(" ")).map((_,)).reduceByKey(_+_) //保存结果
resultRDD.saveAsTextFile(output)

  再次执行:

./spark-submit --class com.zimo.spark.MyWordCount ~/testSpark/scala-spark-1.0-SNAPSHOT.jar ~/testSpark/word.txt ~/testSpark/result
//输出目录一定要为不存在的目录!

  结果如下:

[hadoop@masternode testSpark]$ ll

total 

drwxrwxr-x.  hadoop hadoop     Sep  : result

-rw-r--r--.  hadoop hadoop  Sep  : scala-spark-1.0-SNAPSHOT.jar

-rw-rw-r--.  hadoop hadoop      Sep  : word.txt

[hadoop@masternode testSpark]$ cd result/

[hadoop@masternode result]$ ll

total 

-rw-r--r--.  hadoop hadoop  Sep  : part-

-rw-r--r--.  hadoop hadoop   Sep  : _SUCCESS

[hadoop@masternode result]$ cat part-

(scala,)

(spark,)

(hadoop,)

(apache,)

Java编程实现WordCount

  在同样目录新建一个java目录,并设置为”Sources Root”。

  单元测试目录”test”同样需要建一个java文件夹。

  同理设置为”Test Sources Root”。然后分别再创建resources目录(用于存放配置文件),并分别设置为“Resources Root”和“Test Resources Root”。

  最后,创建一个“com.zimo.spark”包,并在下面新建一个MyJavaWordCount.Class类(如果右键New下面没有“Java Class”选项请参看博文https://www.cnblogs.com/zimo-jing/p/9628784.html下的详细讲解),其中的代码为如下:

package com.zimo.spark;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;
import java.util.Arrays;
import java.util.Iterator; /**
* Created by Zimo on 2018/9/12
*/
public class MyJavaWordCount {
public static void main(String[] args) { //参数检查
if (args.length < ) {
System.err.println("Usage: MyJavaWordCount <input> <output>");
System.exit();
} //获取参数
String input = args[];
String output = args[]; //创建Java版本的SparkContext
SparkConf conf = new SparkConf().setAppName("MyJavaWordCount");
JavaSparkContext sc = new JavaSparkContext(conf); //读取数据
JavaRDD<String> inputRDD = sc.textFile(input); //进行相关计算
JavaRDD<String> words = inputRDD.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String line) throws Exception {
return Arrays.asList(line.split(" "));
}
}); JavaPairRDD<String, Integer> result = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String word) throws Exception {
return new Tuple2<String, Integer>(word, );
}
}).reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer x, Integer y) throws Exception {
return x+y;
}
}); //保存结果
result.saveAsTextFile(output); //关闭sc
sc.stop();
}
}

  注意:此处要做一点点修改。注释掉pom.xml文件下的此处内容

  此处是默认Source ROOT的路径,所以打包时就只能打包Scala下的代码,而我们新建的Java目录则不会被打包,注释之后则会以我们之前的目录配置为主。

  然后就可以执行打包和集群上的运行操作了。运行和Scala编程一模一样,我在这里就不赘述了,大家参见上面即可!只是需要注意一点:output目录必须为不存在的目录,请记得每次运行前进行修改!

以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢!

Spark编程环境搭建及WordCount实例的更多相关文章

  1. Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  2. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  3. Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)

    此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和a ...

  4. Spark认识&环境搭建&运行第一个Spark程序

    摘要:Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度.这里总结下对Spark的认识.虚拟机Spark安装.Spark开发环境搭建及编写第一个scala程序.运 ...

  5. unix网络编程环境搭建

    unix网络编程环境搭建 网络编程 环境 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xz ...

  6. win10下Spark的环境搭建

    win10下Spark的环境搭建 2018-08-19  18:36:45 一.jdk 1.8.0 安装与配置 二.scala 2.11.8 安装与配置http://www.scala-lang.or ...

  7. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  8. Qt在Windows下的三种编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

  9. Qt在Mac OS X下的编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要 ...

随机推荐

  1. CSS3 日常小结

    1. pointer-events:none; 2. flex 今天看到一个牛X的CSS3属性 flex, 称为弹性盒子.  这中属性完全可以替代媒体查询啦 使用方法: 父元素使用属性display ...

  2. mongodb 的命令操作(转)

    成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作. 输入help可以看到基本操作命令: show dbs:显示数据库列表  show collections:显 ...

  3. js函数篇

    1.闭包函数,作用:不污染全局变量,  定义:与外界隔离的独立作用域被称为闭包,使用函数实现该功能称为函数闭包: 写法: (function(){ function sayHello(){ conso ...

  4. VisualGDB系列2:VisualGDB对Linux平台的支持特性

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 1 复杂问题的直观解决方案 只需要轻点几 ...

  5. Python模块-chardet模块

    chardet模块用来获取文件的编码 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import chardet f = o ...

  6. js提交数据时需判断是点击事件还是回车键

    使用回车键实质还是点击事件==回车时将焦点聚居在某个标签上. Html代码: <div id="btlogin" class="btlogin">& ...

  7. jquery easyui 推荐博客 (MVC+EF+EasyUI+Bootstrap)

    构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(52)-美化EasyUI皮肤和图标   系列目录 我很久以前就想更新系统的皮肤功能,Easyui 自 ...

  8. VIewPage+Fragment

    效果图: 代码 public class NewOrderListFargmentActivity extends BaseActivity implements OnClickListener { ...

  9. wdcp安全设置,让你的后台,只有你自己能访问

    wdcp安全设置,让你的后台,只有你自己能访问 wdcp的后台,默认端口,是8080,可以修改为其它端口wdcp的后台,可以限制IP地址的访问,也可以限制域名的访问做了这些限制与设置后,已相对安全了, ...

  10. PCLVisualizer可视化类(3)

    viewer->addLine<pcl::PointXYZRGB> (cloud->points[0], cloud->points[cloud->size() - ...