1 新建Maven项目



特别提醒,Maven项目中有GropId和ArtifactId。GroupId是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。一般GruopId形如ncepu.com.cn。ArtifactId是项目的唯一的标识符,实际对应项目的名字,就是项目根目录的名称。

2 添加依赖包

spark-assembly-1.6.3-hadoop2.6.0.jar路径:/home/hadoop/spark-1.6.3-bin-hadoop2.6/lib(虚拟机中)

先将spark-assembly-1.6.3-hadoop2.6.0.jar从虚拟机中复制到本机。

File→Project Structure→Libraries→“+”→Java,将spark-assembly-1.6.3-hadoop2.6.0.jar添加进来。

3 测试IDEA和Spark的连通性

在src/main/java目录下新建Java类ConnectionUtil。



Run→Edit Confugurations



在Main class右侧点击“..."选择想要运行的类。

点击图示位置进行编译。

Run→Run"Connection Util“运行Connection Util类。



出现如图结果说明运行成功。

4 IDEA打包运行

准备一个txt文档,上传到HDFS上。



之前已经上传过,所以在此仅用text命令查看。

新建java类JavaWordCount。

import scala.Tuple2;
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 java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public final class JavaWordCount {
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) throws Exception {
// if (args.length < 1) {
// System.err.println("Usage: JavaWordCount <file>");
// System.exit(1);
// }
SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount")
.setMaster("spark://master:7077")
.set("spark.executor.memory", "512M");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
ctx.addJar("D:\\Users\\NCEPU\\IdeaProjects\\Test\\out\\artifacts\\Test_jar\\JavaWordCount.jar");
String path = "hdfs://master:9000/user/hadoop/wordcount.txt";
JavaRDD<String> lines = ctx.textFile(path);
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String s) {
return Arrays.asList(SPACE.split(s));
}
});
JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});
JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});
List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?,?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
ctx.stop();
}
}

将JavaWordCount类打包。

File→Project Structure→Artifacts→“+”→JAR→From module with dependencies。



特别需要注意的是,Output Directory是打包的jar包的输出路径。

输入main class入口函数名,将Output Layout下所有jar包删掉(因为spark运行环境已经包含了这些包),如果已经存在 META‐INF 要先将这个文件夹删除。

Build→Build Artifact进行打包。打包生成的jar包如图所示。

运行程序后,出现以下结果说明程序运行成功。

5 出现的问题

问题一:提示WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

++原因++:这个问题是因为内存不够。

++解决++:有如下两种可能的解决方法。

一是修改设置的内存



将这里的内存设置得小一点。

二是重启虚拟机。

问题二:java无法访问scala.Cloneable 找不到scala.Cloneable的类文件

++原因++:原来使用的是 spark‐2.1.0‐bin‐hadoop2.4 没有 spark‐assembly‐1.6.3‐hadoop2.6.0.jar 依赖包所致。

++解决++:因为原来是用的hadoop版本为 2.5.2 相应的依赖包官网已经不再支持,所以更新的平台的hadoop环境为 2.6.5 ,spark 2.X相应的文档很少,更改版本为 1.6.3 。

IDEA开发Spark的漫漫摸索(二)的更多相关文章

  1. IDEA开发Spark的漫漫摸索(一)

    系统:Win10 01 安装IDEA IDEA版本:IntelliJ IDEA 2017.2.1 64位 使用的学生授权下载的ultimate版本,此处不赘叙安装过程. 02安装编译环境 Spark可 ...

  2. 使用scala开发spark入门总结

    使用scala开发spark入门总结 一.spark简单介绍 关于spark的介绍网上有很多,可以自行百度和google,这里只做简单介绍.推荐简单介绍连接:http://blog.jobbole.c ...

  3. IDEA搭建scala开发环境开发spark应用程序

    通过IDEA搭建scala开发环境开发spark应用程序   一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安 ...

  4. FusionInsight大数据开发---Spark应用开发

    Spark应用开发 要求: 了解Spark基本原理 搭建Spark开发环境 开发Spark应用程序 调试运行Spark应用程序 YARN资源调度,可以和Hadoop集群无缝对接 Spark适用场景大多 ...

  5. 【机器学习之一】python开发spark环境搭建

    环境 spark-1.6 python3.5 一.python开发spark原理使用python api编写pyspark代码提交运行时,为了不破坏spark原有的运行架构,会将写好的代码首先在pyt ...

  6. spark函数sortByKey实现二次排序

    最近在项目中遇到二次排序的需求,和平常开发spark的application一样,开始查看API,编码,调试,验证结果.由于之前对spark的API使用过,知道API中的sortByKey()可以自定 ...

  7. Spark面试题(二)

    首发于我的个人博客:Spark面试题(二) 1.Spark有哪两种算子? Transformation(转化)算子和Action(执行)算子. 2.Spark有哪些聚合类的算子,我们应该尽量避免什么类 ...

  8. 利用Scala语言开发Spark应用程序

    Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...

  9. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

随机推荐

  1. codeforces 629D D. Babaei and Birthday Cake (线段树+dp)

    D. Babaei and Birthday Cake time limit per test 2 seconds memory limit per test 256 megabytes input ...

  2. codeforces 632B B. Alice, Bob, Two Teams(暴力)

    B. Alice, Bob, Two Teams time limit per test 1.5 seconds memory limit per test 256 megabytes input s ...

  3. leetcode 205. Isomorphic Strings(哈希表)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  4. stl_iterator.h

    stl_iterator.h // Filename: stl_iterator.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...

  5. Java中的泛型、枚举和注解

    1.泛型: 一.为什么要有泛型(Generic)?1.解决元素存储的安全性问题任何类型都可以添加到集合中:类型不安全2.解决获取数据元素时,需要类型强转的问题读取出来的对象需要强转:繁琐可能有Clas ...

  6. User-Agent 及其构造

    url = ... user_agent = ... headers = {'User-Agent' : user_agent} req = requests.request(url=url, hea ...

  7. Arc082_F Sandglass

    Description有一个沙漏由两个上下相通玻璃球$A$和$B$构成,这两个玻璃球都含有一定量的沙子,我们暂且假定$A,B$中位于上方的玻璃球的为$U$,下方的玻璃球为$L$,则除非$U$中没有沙子 ...

  8. CF510E. Fox And Dinner

    CF510E. Fox And Dinner https://codeforces.com/contest/510 分析: 由于\(a_i>2\), 相邻两个数一定一奇一偶,按奇偶建立二分图. ...

  9. Swift中数组和字典都是值类型

    在 Swift 中,所有的基本类型:整数(Integer).浮点数(floating-point).布尔值(Boolean).字符串(string).数组(array)和字典(dictionary), ...

  10. 深入V8引擎-枚举+位运算实现参数配置

    不知不觉都快月底了,看了看上一篇还是6号写的,惭愧惭愧,说好的坚持.为了证明没有偷懒(其实还是沉迷了一会dota2),先上一个图自证清白. 基本上从初始化引擎,到Isolate.handleScope ...