初识Spark的Java
这节主要带大家更好的步入Spark大堂,所以用一个,Spark官网提供的一个简单例子,给大家演示Spark关于java的开发。
这里我们用到的Maven工程,管理Spark的依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${spark.scala.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
初始化SparkContext
一旦完成了应用与Spark的连接,接下来就需要再程序中导入Spark包并且创建SparkContext。你可以通过先创建一个SparkConf对象来配置你的应用,然后基于这个SparkConf创建一个SparkContext对象。这里我们只用Java语言做实例:
/**
* @author DKing
* @description
* @date 2019/5/29
*/
public class SparkInitialContext {
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setMaster("local")
.setAppName("initSparkContext");
SparkContext context = new SparkContext(conf);
}
}
这个例子展示创建SparkContext的最基本的方法,你只需要传递两个参数:
- 集群URL:告诉Spark如何连接到集群上。在这个例子中我们使用的是local,这个特殊值可以让Spark运行再单击单线程上而无需连接到集群。工作过程中,经验告诉我们,通常不推荐这种local方式启动,并进行Spark元子对数据的一系列处理,因为,我们有一套可视化服务管理,local在程序运行时不方便管理,推荐YARN。
- 应用名:在例子中我们使用的是initSparkContext。当连接到一个集群时,这个值可以帮助你在集群管理器的用户界面中找到你的应用。
还有很多附加参数可以用来配置应用的运行方式或添加要发送到集群上的代码。
在初始化SparkContext之后,你可以使用我们前面展示的方法来创建RDD并操控他们。
最后,关闭Spark可以调用SparkContext的stop()方法,或者直接推出应用。
接下来我们看一个完整的例子,单词数统计:
/**
* @author DKing
* @description
* @date 2019/5/29
*/
public class SparkInitialContext {
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setMaster("local")
.setAppName("wordCount");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> lines = sc.textFile("thefilepath");
JavaRDD<String> words = lines.flatMap(
(FlatMapFunction<String, String>) s -> (Iterator<String>) Arrays.asList(s.split(" "))
);
JavaPairRDD<String, Integer> counts = words.mapToPair(
(PairFunction<String, String, Integer>) s -> new Tuple2<>(s, 1)
).reduceByKey(
(Function2<Integer, Integer, Integer>) (integer, integer2) -> integer + integer2
);
counts.saveAsTextFile("thefilepath");
}
}
Spark-Core包被标记为provided,这是为了控制我们以assembly方式打包应用时的行为。之后会具体讨论这方面概念。
一旦敲定了构建方式,我们就可以轻松打包并且使用bin/spark-submit脚本执行我们的应用了。spark-submit脚本可以为我们配置Spark索要用到的一系列环境变量。
下面时Maven构建与运行
mvn clean && mvn compile && mvn package
$SPARK_HOME/bin/spark-submit \
--class com.oreilly.learningsparkexamples.mini.java.WordCount \
./target/learning-spark-mini-example-0.0.1.jar \
./README.md ./wordcounts
明天我将揭开Spark的RDD核心-弹性分布式数据集。明天见!!!