学习进度十四(Spark之Java独立应用编程)

Posted 细胞何

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习进度十四(Spark之Java独立应用编程)相关的知识,希望对你有一定的参考价值。

环境如下:(更新了林子雨教程中不可使用的部分)

Hadoop 2.6.0以上

java JDK 1.7以上

Spark 3.0.0-preview2

 

一、Scala独立应用编程

二、java独立应用编程(在下载依赖jar包的过程中如遇到卡顿现象可以Ctrl+C停止下载,然后重新执行本条命令即可继续下载相应的依赖jar包)

1、安装maven

ubuntu中没有自带安装maven,需要手动安装maven。可以访问maven官方下载自己下载。这里直接给出apache-maven-3.6.3-bin.zip的下载地址,直接点击下载即可。
选择安装在/usr/local/maven中:

sudo unzip ~/下载/apache-maven-3.6.3-bin.zip -d /usr/local

cd /usr/local
sudo mv apache-maven-3.6.3/ ./maven

sudo chown -R hadoop ./maven

 

2、Java应用程序代码

在终端执行如下命令创建一个文件夹sparkapp2作为应用程序根目录

cd ~ #进入用户主文件夹
mkdir -p ./sparkapp2/src/main/java

 

在 ./sparkapp2/src/main/java 下建立一个名为 SimpleApp.java 的文件(vim ./sparkapp2/src/main/java/SimpleApp.java),添加代码如下:

/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;

public class SimpleApp {
public static void main(String[] args) {
String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
JavaSparkContext sc = new JavaSparkContext("local", "Simple App",
"file:///usr/local/spark/", new String[]{"target/simple-project-1.0.jar"});
JavaRDD<String> logData = sc.textFile(logFile).cache();

long numAs = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) { return s.contains("a"); }
}).count();

long numBs = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) { return s.contains("b"); }
}).count();

System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
}
}

 

该程序依赖Spark Java API,因此我们需要通过Maven进行编译打包。在./sparkapp2中新建文件pom.xml(vim ./sparkapp2/pom.xml),添加内容如下,声明该独立应用程序的信息以及与Spark的依赖关系:

<project>
    <groupId>edu.berkeley</groupId>
    <artifactId>simple-project</artifactId>
    <modelVersion>4.0.0</modelVersion>
    <name>Simple Project</name>
    <packaging>jar</packaging>
    <version>1.0</version>
    <repositories>
        <repository>
            <id>Akka repository</id>
            <url>http://repo.akka.io/releases</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency> <!-- Spark dependency -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0-preview2</version>
        </dependency>
    </dependencies>
  <!-- 如果不加下面这段可能会报错 -->
  <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>2.7</version>
            </plugin>           
          </plugins>
        </pluginManagement>   
    </build>
</project>

关于Spark dependency的依赖关系,可以访问The Central Repository。搜索spark-core可以找到相关依赖关系信息。

 


 3、使用maven打包java程序

为了保证maven能够正常运行,先执行如下命令检查整个应用程序的文件结构:

cd ~/sparkapp2

find

 

 文件结构如下图:

 接着,我们可以通过如下代码将这整个应用程序打包成Jar(注意:电脑需要保持连接网络的状态,而且首次运行同样下载依赖包,同样消耗几分钟的时间(笔者耗时2个小时左右,下载时的实时网速只有十几K,具体原因暂时不详)):

 /usr/local/maven/bin/mvn package

 

如出现下图,说明生成Jar包成功:

 4、通过spark-submit 运行程序

最后,可以通过将生成的jar包通过spark-submit提交到Spark中运行,如下命令:

/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar 2>&1 | grep "Lines with a"

 

最后得到的结果如下:

 

 

 

 

 

 

 

 

本博客参考了林子雨的大数据原理与应用 第十六章 Spark 学习指南 http://dblab.xmu.edu.cn/blog/804-2/

以上是关于学习进度十四(Spark之Java独立应用编程)的主要内容,如果未能解决你的问题,请参考以下文章

2020年寒假学习进度第七天

「大数据」(七十四)Spark之应用案例编程

Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information

大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目(示例代

我的QT Creator学习笔记(三十四)——网络编程之HTTP与FTP