1397 3

第10课:实战java开发spark程序 [推广有奖]

  • 1关注
  • 8粉丝

硕士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
305 个
通用积分
0
学术水平
5 点
热心指数
14 点
信用等级
2 点
经验
23002 点
帖子
73
精华
0
在线时间
135 小时
注册时间
2016-2-27
最后登录
2016-9-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、环境搭建


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

网上有很多参考资料,此处省略。

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属性后添加<localRepository>D:/repository</localRepository>修改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,点击next,group id 为 com.dt.spark,artifact id 为 sparkApps,然后点击finish。

2)修改jdk 和pom文件

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

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>

  4.   <groupId>com.dt.spark</groupId>
  5.   <artifactId>SparkApps</artifactId>
  6.   <version>0.0.1-SNAPSHOT</version>
  7.   <packaging>jar</packaging>

  8.   <name>SparkApps</name>
  9.   <url>http://maven.apache.org</url>

  10.   <properties>
  11.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12.   </properties>

  13.   <dependencies>
  14.     <dependency>
  15.       <groupId>junit</groupId>
  16.       <artifactId>junit</artifactId>
  17.       <version>3.8.1</version>
  18.       <scope>test</scope>
  19.     </dependency>
  20.     <dependency>
  21.        <groupId>org.apache.spark</groupId>
  22.        <artifactId>spark-core_2.10</artifactId>
  23.        <version>1.6.0</version>
  24.     </dependency>
  25.     <dependency>
  26.         <groupId>org.apache.spark</groupId>
  27.         <artifactId>spark-sql_2.10</artifactId>
  28.         <version>1.6.0</version>
  29.     </dependency>
  30.     <dependency>
  31.       <groupId>org.apache.spark</groupId>
  32.       <artifactId>spark-hive_2.10</artifactId>
  33.       <version>1.6.0</version>
  34.     </dependency>
  35.         <dependency>
  36.               <groupId>org.apache.spark</groupId>
  37.               <artifactId>spark-streaming_2.10</artifactId>
  38.               <version>1.6.0</version>
  39.         </dependency>
  40.         <dependency>
  41.               <groupId>org.apache.hadoop</groupId>
  42.               <artifactId>hadoop-client</artifactId>
  43.               <version>2.6.0</version>
  44.         </dependency>
  45.         <dependency>
  46.               <groupId>org.apache.spark</groupId>
  47.               <artifactId>spark-streaming-kafka_2.10</artifactId>
  48.               <version>1.6.0</version>
  49.         </dependency>
  50.         <dependency>
  51.               <groupId>org.apache.spark</groupId>
  52.               <artifactId>spark-graphx_2.10</artifactId>
  53.               <version>1.6.0</version>
  54.         </dependency>
  55.   </dependencies>

  56.   <build>
  57.      <sourceDirectory>src/main/java</sourceDirectory>
  58.      <testSourceDirectory>src/main/test</testSourceDirectory>

  59.      <plugins>
  60.            <plugin>
  61.                <artifactId>maven-assembly-plugin</artifactId>
  62.                <configuration>
  63.                  <descriptorRefs>
  64.                    <descriptorRef>jar-with-dependencies</descriptorRef>
  65.                  </descriptorRefs>
  66.                  <archive>
  67.                     <manifest>
  68.                         <maniClass></maniClass>
  69.                     </manifest>
  70.                  </archive>
  71.                </configuration>
  72.                <executions>
  73.                    <execution>
  74.                       <id>make-assembly</id>
  75.                       <phase>package</phase>
  76.                       <goals>
  77.                          <goal>single</goal>
  78.                       </goals>
  79.                    </execution>
  80.                </executions>
  81.            </plugin>
  82.            <plugin>
  83.                <groupId>org.codehaus.mojo</groupId>
  84.                <artifactId>exec-maven-plugin</artifactId>
  85.                <version>1.3.1</version>
  86.                <executions>
  87.                   <execution>
  88.                      <goals>
  89.                         <goal>exec</goal>
  90.                      </goals>
  91.                   </execution>
  92.                </executions>
  93.                <configuration>
  94.                    <executable>java</executable>
  95.                    <includeProjectDependencies>false</includeProjectDependencies>
  96.                    <classpathScope>compile</classpathScope>
  97.                    <mainClass>com.dt.spark.SparkApps.WordCount</mainClass>
  98.                </configuration>
  99.            </plugin>
  100.            <plugin>
  101.               <groupId>org.apache.maven.plugins</groupId>
  102.               <artifactId>maven-compiler-plugin</artifactId>
  103.               <configuration>
  104.                   <source>1.6</source>
  105.                   <target>1.6</target>
  106.               </configuration>
  107.            </plugin>
  108.      </plugins>
  109. </build>

  110. </project>
复制代码

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 中编写如下代码。

  1. import java.util.Arrays;
  2. import org.apache.spark.SparkConf;
  3. import org.apache.spark.api.java.JavaPairRDD;
  4. import org.apache.spark.api.java.JavaRDD;
  5. import org.apache.spark.api.java.JavaSparkContext;
  6. import org.apache.spark.api.java.function.FlatMapFunction;
  7. import org.apache.spark.api.java.function.Function2;
  8. import org.apache.spark.api.java.function.PairFunction;
  9. import org.apache.spark.api.java.function.VoidFunction;
  10. import scala.Function;
  11. import scala.Tuple2;

  12. /**
  13. * 使用java的方式开发进行本地测试spark的 wordcount 程序
  14. * @author DT大数据梦工厂
  15. *
  16. */
  17. public classWordCount {

  18.     public static void main(String[] args) {

  19.          /**
  20.            * 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
  21.            * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置
  22.            * 为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如
  23.            * 只有1G的内存)的初学者       *
  24.            */
  25.         SparkConfconf=newSparkConf().setAppName("Spark WordCountwritten by java").setMaster("local");

  26.         /**
  27.            * 第2步:创建SparkContext对象
  28.            * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须有一个SparkContext(不同的语言具体的类名称不同,如果是java 的为javaSparkContext)
  29.            * SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBackend
  30.            * 同时还会负责Spark程序往Master注册程序等
  31.            * SparkContext是整个Spark应用程序中最为至关重要的一个对象
  32.            */
  33.         JavaSparkContextsc=new JavaSparkContext(conf); //其底层就是scala的sparkcontext


  34.           /**
  35.            * 第3步:根据具体的数据来源(HDFS、HBase、Local FS、DB、S3等)通过SparkContext来创建RDD
  36.            * JavaRDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、由其它的RDD操作
  37.            * 数据会被JavaRDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
  38.            */
  39.         JavaRDD<String>lines=sc.textFile("D://spark-1.6.0-bin-hadoop2.6//README.md");

  40.          /**
  41.            * 第4步:对初始的JavaRDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
  42.            *     第4.1步:讲每一行的字符串拆分成单个的单词
  43.            */
  44.         JavaRDD<String>words= lines.flatMap(new FlatMapFunction<String,String>(){//如果是scala由于Sam转化所以可以写成一行代码

  45.             @Override
  46.             public Iterable<String>call(String line)throwsException {
  47.                 // TODO Auto-generated method stub

  48.                 return Arrays.asList(line.split(" "));
  49.             }

  50.         });
  51.         /**
  52.            * 第4步:对初始的JavaRDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
  53.            *     第4.2步:在单词拆分的基础上对每个单词实例计数为1,也就是word => (word, 1)
  54.            */
  55.         JavaPairRDD<String,Integer>pairs=words.mapToPair(new PairFunction<String,String, Integer>() {

  56.             @Override
  57.             public Tuple2<String,Integer> call(String word) throwsException {
  58.                 // TODO Auto-generated method stub
  59.                 return new Tuple2<String,Integer>(word,1);
  60.             }
  61.         });


  62.         /**
  63.            * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
  64.            *     第4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数
  65.            */
  66.         JavaPairRDD<String,Integer>wordsCount=pairs.reduceByKey(new Function2<Integer,Integer, Integer>() { //对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)

  67.             @Override
  68.             public Integer call(Integer v1, Integer v2) throws Exception {
  69.                 // TODO Auto-generated method stub
  70.                 return v1+v2;
  71.             }
  72.         });

  73.         wordsCount.foreach(new VoidFunction<Tuple2<String,Integer>>(){

  74.             @Override
  75.             public void call(Tuple2<String,Integer> pairs)throwsException {
  76.                 // TODO Auto-generated method stub
  77.                 System.out.println(pairs._1+" : " +pairs._2);
  78.             }
  79.         });

  80.         sc.close();

  81.     }

  82. }
复制代码

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



注:本学习笔记来自DT大数据梦工厂

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:java开发 Spark Park SPAR Java Spark scala DT_Spark 大数据

已有 1 人评分论坛币 收起 理由
daazx + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

沙发
lzjsltt 发表于 2016-4-26 22:43:15 |只看作者 |坛友微信交流群
正在学习中,感谢楼主!!!

使用道具

使用道具

lzjsltt 发表于 2016-4-26 22:43
正在学习中,感谢楼主!!!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-21 17:23