使用java开发spark实战

课程内容

 使用java开发spark 实战

 

 

一:环境搭建 安装jdk 和maven

1. 安装jdk并配置环境变量

系统变量→新建 JAVA_HOME 变量 。

变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0)

系统变量→寻找 Path 变量→编辑

在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)

系统变量→新建 CLASSPATH 变量值填写   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

2. Maven的安装和配置

解压apache-maven-3.1.1-bin.zip,并把解压后的文件夹下的apache-maven-3.1.1文件夹移动到D:\Java下,如果没有Java这个文件夹的话,请自行创建

新建系统变量   MAVEN_HOME  变量值:D:\Java\apache-maven-3.1.1。编辑系统变量 Path 添加变量值: ;%MAVEN_HOME%\bin

在mave 的目录中修改conf/settings.xml, 在 localRepository属性后添加D:/repository 修改maven下载jar 的位置。

3. eclipse 中java 和maven 的配置

点击 window ->java ->Installed JREs ->add ->standard vm  ,点击next ,然后选择jdk 的安装路径点击finish即可。

点击window ->Maven ->Installations ->add 在弹出页面选择mave 的安装路径,然后点击finish然后在列表中选择我们自己刚添加的那个maven信息。

然后点击window ->Maven ->User Setings   在 右侧的User Settings 点击browse 现在maven  conf目录下的setttings.xml .(主要是修改maven下载依赖包存放的位置)

二:创建maven项目

1. 创建maven项目

点击file ->new ->others ->maven project  点击next选择maven-archetype-quickstart ,点击nextgroup id 为 com.dt.spark,artifact id 为 sparkApps,然后点击finish

2. 修改jdk 和pom文件

创建maven项目后,默认的jdk 是1.5改成我们前面安装好的jdk1.8 。在项目上右击 build path ->configure build path 。在弹出页面点击Libraries,选中jre system library 。点击 edit,在弹出框选择 workspace default jre ,然后点击finish 然后在点击ok将pom文件修改为如下内容,然后等待eclipse 下载好maven依赖的jar包,并编译工程。编译好工程后有个错误提示,在此错误列上,右击选择 quick fix ,在弹出页面点击finish即可。

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  4.0.0

 

  com.dt.spark

  SparkApps

  0.0.1-SNAPSHOT

  jar

 

  SparkApps

  http://maven.apache.org

 

  

    UTF-8

  

 

  

    

      junit

      junit

      3.8.1

      test

    

    

       org.apache.spark

       spark-core_2.10

       1.6.0

    

    

        org.apache.spark

        spark-sql_2.10

        1.6.0

    

    

      org.apache.spark

      spark-hive_2.10

      1.6.0

    

      org.apache.spark

      spark-streaming_2.10

      1.6.0

      org.apache.hadoop

      hadoop-client

      2.6.0

      org.apache.spark

      spark-streaming-kafka_2.10

      1.6.0

      org.apache.spark

      spark-graphx_2.10

      1.6.0

  

  

  

     src/main/java

     src/main/test

 

     

           

               maven-assembly-plugin

               

                 

                   jar-with-dependencies

                 

                 

                    

                        

                    

                 

               

               

                   

                      make-assembly

                      package

                      

                         single

                      

                   

               

           

           

               org.codehaus.mojo

               exec-maven-plugin

               1.3.1

               

                  

                     

                        exec

                     

                  

               

               

                   java

                   false

                   compile

                   com.dt.spark.SparkApps.WordCount

               

           

           

              org.apache.maven.plugins

              maven-compiler-plugin

              

                  1.6

                  1.6

              

           

     

 

3. 创建 包路径以及java代码

在包路径 com.dt.spark.SparkApps 上 右击 new ->package 在弹出页面name中填写com.dt.spark.SparkApps.cores,点击finish的。

在包路径下com.dt.spark.SparkApps.cores上 右击 new ->class ,在弹出窗口中name 中填写 WordCount ,点击finish然后在 WordCount 中编写如下代码。

 

     package com.dt.spark.SparkApps.cores;

 

import java.util.Arrays;

 

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 org.apache.spark.api.java.function.VoidFunction;

 

import scala.Function;

import scala.Tuple2;

 

/**

 * 使用java的方式开发进行本地测试sparkwordcount 程序

 * @author DT大数据梦工厂

 *

 */

public class WordCount {

 

public static void main(String[] args) {

 /**

       * 1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,

       * 例如说通过setMaster来设置程序要链接的Spark集群的MasterURL,如果设置

       * local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如

       * 只有1G的内存)的初学者       *

       */

SparkConf conf =new SparkConf().setAppName("Spark WordCount written by java").setMaster("local");

/**

       * 2步:创建SparkContext对象

       * SparkContextSpark程序所有功能的唯一入口,无论是采用ScalaJavaPythonR等都必须有一个SparkContext(不同的语言具体的类名称不同,如果是java 的为javaSparkContext)

       * SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGSchedulerTaskSchedulerSchedulerBackend

       * 同时还会负责Spark程序往Master注册程序等

       * SparkContext是整个Spark应用程序中最为至关重要的一个对象

       */

JavaSparkContext sc=new JavaSparkContext(conf); //其底层就是scalasparkcontext

 

      /**

       * 3步:根据具体的数据来源(HDFSHBaseLocal FSDBS3等)通过SparkContext来创建RDD

       * JavaRDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、由其它的RDD操作

       * 数据会被JavaRDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴

       */

JavaRDD lines =sc.textFile("D://spark-1.6.0-bin-hadoop2.6//README.md");

 /**

       * 4步:对初始的JavaRDD进行Transformation级别的处理,例如mapfilter等高阶函数等的编程,来进行具体的数据计算

       * 4.1步:讲每一行的字符串拆分成单个的单词

       */

JavaRDD words = lines.flatMap(new FlatMapFunction(){ //如果是scala由于Sam转化所以可以写成一行代码

 

@Override

public Iterable call(String line) throws Exception {

// TODO Auto-generated method stub

   

return Arrays.asList(line.split(" "));

}

});

/**

       * 4步:对初始的JavaRDD进行Transformation级别的处理,例如mapfilter等高阶函数等的编程,来进行具体的数据计算

       * 4.2步:在单词拆分的基础上对每个单词实例计数为1,也就是word => (word, 1)

       */

JavaPairRDD pairs=words.mapToPair(new PairFunction() {

 

@Override

public Tuple2 call(String word) throws Exception {

// TODO Auto-generated method stub

return new Tuple2(word,1);

}

});

/**

       * 4步:对初始的RDD进行Transformation级别的处理,例如mapfilter等高阶函数等的编程,来进行具体的数据计算

       * 4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数

       */

JavaPairRDD wordsCount =pairs.reduceByKey(new Function2() { //对相同的Key,进行Value的累计(包括LocalReducer级别同时Reduce

@Override

public Integer call(Integer v1, Integer v2) throws Exception {

// TODO Auto-generated method stub

return v1+v2;

}

});

wordsCount.foreach(new VoidFunction>() {

@Override

public void call(Tuple2 pairs) throws Exception {

// TODO Auto-generated method stub

System.out.println(pairs._1+" : " +pairs._2);

}

});

sc.close();

     

}

 

}

 

 

在代码区右击 run as -> java application 。来运行此程序并查看运行结果。如果要开发cluster 的代码,请参考前面第8或者第9


主编辑:王家林

备注:

资料来源于:DT_大数据梦工厂(IMF传奇行动绝密课程)

更多私密内容,请关注微信公众号:DT_Spark

如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:68917580

Life is short,you need to Spark!

你可能感兴趣的:(Spark,IMF)