0x01 环境说明

1.1 本地

OS: windows 10

JDK: jdk1.8.0_121

Scala: scala-2.11.11

IDE: IntelliJ IDEA ULTIMATE 2017.2.1

1.2 服务器

OS: CentOS_6.5_x64

JDK: jdk1.8.111

Hadoop: hadoop-2.6.5

Spark: spark-1.6.3-bin-hadoop2.6

Scala: scala-2.11.11

0x02 windows端配置

2.1 安装JDK

配置环境变量

JAVA_HOME
CLASSPATH
Path

2.2 配置hosts

文件位置

C:\Windows\System32\drivers\etc

新增如下内容(和集群的hosts文件内容一样,根据自己集群的实际情况修改)

192.168.1.10    master
192.168.1.11 slave1
192.168.1.12 slave2

2.3 安装IntelliJ IDEA

  • 注意插件安装Maven

2.4 IDEA中安装scala插件

0x03 服务器端配置

3.1 安装JDK

3.2 安装Hadoop

3.3 安装Spark

0x04 测试

4.1 新建maven项目

4.2 添加依赖包

File -> Project Structure -> Libraries添加spark-assembly-1.6.3-hadoop2.6.0.jar(位置在服务器端spark/lib/下)

4.3 新建ConnectionUtil类

src\main\java目录下新建javaConnectionUtil

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
public class ConnectionUtil {
public static final String master = "spark://master:7077";
public static void main(String[] args) {
SparkConf sparkConf = new SparkConf().setAppName("demo").setMaster(master);
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
System.out.println(javaSparkContext);
javaSparkContext.stop();
}
}

4.4 编译运行

如果出现上图结果则证明,运行正确。

4.5 运行JavaWordCount

  • 数据准备,随便准备一个文档格式不限,上传到hdfs上。
$ vim wordcount.txt
hello Tom
hello Jack
hello Ning
# 上传文件
$ hadoop fs -put wordcount.txt /user/hadoop/
# 查看文件是否上传成功
$ hadoop fs -ls /user/hadoop/
  • 代码(spark安装包中的example,指定了jar包和输入文件的路径)
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:\\workspace\\spark\\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();
}
}
  • 打包非常重要,否则运行会出现各种错误,甚至无法运行

File -> Project Structure ->Artifacts点击绿色“+”,Add-->JAR-->From Modules with Dependencies

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

编译程序:Build-->Build Artifacts...,然后选择要编译的项目进行编译

在当前工程生成的out目录下就可以找到输出的jar包,放到程序中指定的位置(就是addJar()方法中所设置的路径)

  • 运行程序,结果如下

0x05 出现的问题

5.1 无法访问scala.Cloneable

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

Create: 2017-08-12 10:33:55 星期六

Update1: 2017-08-14 20:10:47 星期一

最新文章

  1. KMP匹配算法 - Number Sequence
  2. java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法
  3. FineUI 基于 ExtJS 的专业 ASP.NET 控件库
  4. LOMO效果
  5. SQL Server 2008导出数据为SQL脚本的操作步骤
  6. IOS 系统API---NSJSONSerialization四个枚举什么意思
  7. Visual Studio 2012 Professional 密钥
  8. python str + int
  9. RAC检查各资源
  10. vue+webpack一些知识
  11. JavaFX它ListView使用
  12. Swift构造
  13. Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
  14. 微信小程序分包跳转主包页面
  15. 714-Card Trick
  16. git&#160;用远程覆盖本地
  17. JMeter学习(八)JDBC测试计划-连接Oracle(转载)
  18. java如何编写下载功能
  19. 用python实现MRO算法
  20. tomcat使用方法大全

热门文章

  1. Linux之用户管理--初级上
  2. Bootstrap提示信息(标签、徽章、巨幕和页头)
  3. (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程
  4. Unreal Engine 4 Radiant UI 插件入门(三)——从蓝图中调用JS
  5. java封装性、继承性及关键字
  6. hadoop全分布式环境搭建
  7. Work 1(导游类)(2017.06.27)
  8. bash脚本编程---循环
  9. 一个Web 持续集成工作实践
  10. spring加载异常