Spark学习笔记8-在eclipse里用Java编写spark程序

0.前言

这次的学习内容是,在eclipse里用java编写spark程序。相关jar包用maven来管理。程序实现笔记7一样的内容,做一个README.md文件的单词计数,并打印出来,这次只做单机下运行,集群模式可以参考Spark学习笔记7的内容完成。

1.安装eclipse

1.1下载eclipse

下载地址如下:
http://www.eclipse.org/downloads/
我的是64位的mac,所以下载j2e,64位的。
Spark学习笔记8-在eclipse里用Java编写spark程序_第1张图片

1.2运行

直接运行就行。

2.创建maven工程

2.1创建工程

点击file->new->Maven Project
Spark学习笔记8-在eclipse里用Java编写spark程序_第2张图片
直接next
Spark学习笔记8-在eclipse里用Java编写spark程序_第3张图片
选择maven-archetype-quickstart
Spark学习笔记8-在eclipse里用Java编写spark程序_第4张图片
创建Group ID,Artifact ID,直接finish完成。
Spark学习笔记8-在eclipse里用Java编写spark程序_第5张图片
成功后是这样的:(这里要注意了,如果创建不能成功,报错Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart,解决方法看博客:http://blog.csdn.net/xummgg/article/details/50655382 )
Spark学习笔记8-在eclipse里用Java编写spark程序_第6张图片
上面的JRE System Libary里面默认的不是1.8版本,这个要自己进入build path里面的configure build path修改,修改成想要的版本。

2.2 修改pom.xml文件

在创建好的工程里有个pom.xml文件,修改该文件。在maven中pom.xml文件是用来配置所有jar包的。

修改好后内容如下:

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

  <groupId>com.dt.sparkgroupId>
  <artifactId>SparkAppsartifactId>
  <version>0.0.1-SNAPSHOTversion>
  <packaging>jarpackaging>

  <name>SparkAppsname>
  <url>http://maven.apache.orgurl>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
  properties>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>3.8.1version>
      <scope>testscope>
    dependency>
    <dependency>  
      <groupId>org.apache.sparkgroupId>
      <artifactId>spark-core_2.10artifactId>
      <version>1.6.0version>
    dependency>
    <dependency>
      <groupId>org.apache.sparkgroupId>
      <artifactId>spark-sql_2.10artifactId>
      <version>1.6.0version>
      dependency>
    <dependency>
      <groupId>org.apache.sparkgroupId>
      <artifactId>spark-hive_2.10artifactId>
      <version>1.6.0version>
    dependency>
    <dependency>
      <groupId>org.apache.sparkgroupId>
      <artifactId>spark-streaming_2.10artifactId>
      <version>1.6.0version>
    dependency>
    <dependency>
      <groupId>org.apache.hadoopgroupId>
      <artifactId>hadoop-clientartifactId>
      <version>2.6.0version>
    dependency>
    <dependency>
      <groupId>org.apache.sparkgroupId>
      <artifactId>spark-streaming-kafka_2.10artifactId>
      <version>1.6.0version>
    dependency>
    <dependency>
    <groupId>org.apache.sparkgroupId>
    <artifactId>spark-graphx_2.10artifactId>
    <version>1.6.0version>
dependency>
  dependencies>
  <build>
    <sourceDirectory>src/main/javasourceDirectory>
    <testSourceDirectory>src/main/testtestSourceDirectory>

    <plugins>
      <plugin>
        <artifactId>maven-assembly-pluginartifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependenciesdescriptorRef>
          descriptorRefs>
          <archive>
            <manifest>
              <mainClass>mainClass>
            manifest>
          archive>
        configuration>
        <executions>
          <execution>
            <id>make-assemblyid>
            <phase>packagephase>
            <goals>
              <goal>singlegoal>
            goals>
          execution>
        executions>
      plugin>

      <plugin>
        <groupId>org.codehaus.mojogroupId>
        <artifactId>exec-maven-pluginartifactId>
        <version>1.2.1version>
        <executions>
          <execution>
            <goals>
              <goal>execgoal>
            goals>
          execution>
        executions>
        <configuration>
          <executable>javaexecutable>
          <includeProjectDependencies>trueincludeProjectDependencies>
          <includePluginDependencies>falseincludePluginDependencies>
          <classpathScope>compileclasspathScope>
          <mainClass>com.dt.spark.AppmainClass>
        configuration>
      plugin>

      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        <configuration>
          <source>1.6source>
          <target>1.6target>
        configuration>
      plugin>

    plugins>
  build>
project>

如何修改这个pom文件可以看下面2个网站:
可以在spark官网上找到各个组件的maven配置方法:
http://spark.apache.org/docs/latest/
Spark学习笔记8-在eclipse里用Java编写spark程序_第7张图片
也可以在maven的下面网址中找到关于spark的配置方法:
http://maven.outofmemory.cn/org.apache.spark/
Spark学习笔记8-在eclipse里用Java编写spark程序_第8张图片

2.3 保存pom.xml文件

按Alt+S保存该文件,可以看到如下图,右下脚开始有进度条,自动下载tar包。
Spark学习笔记8-在eclipse里用Java编写spark程序_第9张图片

完成后可以看到所有jar包被导入:
Spark学习笔记8-在eclipse里用Java编写spark程序_第10张图片

3.编写程序并运行

终于可以开始用java来编写spark程序啦。
创建新工程SparkApps.cores,再创建新类WordCount.java
Spark学习笔记8-在eclipse里用Java编写spark程序_第11张图片
然后编写程序(程序的具体意思,可以参考Spark学习笔记7的代码注释,内容是一样的,只是用不同语言实现):

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.Tuple2;

/**
 * 使用Java的方式开发进行本地测试Spark的WordCount程序
 */
public class WordCount {

    public static void main(String[] args) {

        SparkConf conf = new SparkConf().setAppName("Spakr WordCount written by jaba").setMaster("local");

        JavaSparkContext sc = new JavaSparkContext(conf);

        JavaRDD lines = sc.textFile("/Users/xxm/Documents/soft/spark-1.6.0-bin-hadoop2.6/README.md");

        JavaRDD words =lines.flatMap(new FlatMapFunction() {

            public Iterable call(String line) throws Exception {
                // TODO Auto-generated method stub

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

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

            public Tuple2 call(String word) throws Exception {
                // TODO Auto-generated method stub

                return new Tuple2(word,1);
            }
        });

        JavaPairRDD wordsCount = pairs.reduceByKey(new Function2() {

            public Integer call(Integer v1, Integer v2) throws Exception {
                // TODO Auto-generated method stub
                return v1 + v2;
            }
        });

        wordsCount.foreach(new VoidFunction>() {

            public void call(Tuple2 pairs) throws Exception {
                // TODO Auto-generated method stub
                System.out.println(pairs._1+":"+pairs._2);
            }
        });

        sc.close();
    }

}

写好后,运行java程序,结果如下。Wordcount完成啦。
Spark学习笔记8-在eclipse里用Java编写spark程序_第12张图片


XianMing

你可能感兴趣的:(Spark)