当前位置: 首页 > news >正文

ubantu18.04(Hadoop3.1.3)之Spark安装和编程实践

说明:本文图片较多,耐心等待加载。(建议用电脑)

注意所有打开的文件都要记得保存。

 第一步:准备工作

本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。

以下所有操作均在Master主机进行。

 第二步:安装 Spark2.4.0

1.首先需要下载Spark安装文件,在虚拟机打开浏览器粘贴下面的地址

Index of /dist/spark

 2.找到2.4.0,点击

3.点击 spark-2.4.0-bin-without-hadoop.tgz

 第三步:安装Spark(Local模式)

1.打开终端输入粘贴以下命令:(注意最后一句是你的用户名

sudo tar -zxf ~/下载/spark-2.4.0-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-2.4.0-bin-without-hadoop/ ./spark
sudo chown -R hadoop:hadoop ./spark          # 此处的 hadoop 为你的用户名

 2.继续在终端输入以下命令:

cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh

3.继续在终端入:

vim ./conf/spark-env.sh

在第一行添加以下配置信息:

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

 记得保存退出。

4.验证Spark是否安装成功。出现如下界面即成功

cd /usr/local/spark
bin/run-example SparkPi 2>&1 | grep "Pi is"

第四步:使用 Spark Shell 编写代码

 1.启动Spark Shell

在终端继续输入:

cd /usr/local/spark
bin/spark-shell

 

2.加载text文件

 在终端继续输入:

val textFile = sc.textFile("file:///usr/local/spark/README.md")

3.简单RDD操作

终端可以输入:

//获取RDD文件textFile的第一行内容
textFile.first()
//获取RDD文件textFile所有项的计数
textFile.count()
//抽取含有“Spark”的行,返回一个新的RDD
val lineWithSpark = textFile.filter(line => line.contains("Spark"))
//统计新的RDD的行数
lineWithSpark.count()
//找出文本中每行的最多单词数
textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)

 4.退出Spark Shell

输入:

:quit

 第五步:独立应用程序编程

(一)使用sbt对Scala独立应用程序进行编译打包

1. 安装sbt

说明一下,因为这个地址下载之前版本的时候,是从github拉取得,我这里在虚拟机下载很慢,就直接在主机进行下载(魔法),然后放到共享文件夹,然后拖到下载目录。

在虚拟机的浏览器复制下面地址

Download | sbt

 找到sbt-1.3.8.tgz。

我这里在共享文件夹,(不知道在哪里的翻前面的教程第一章) 

 然后拖到下载里

在终端中执行如下命令: (注意下面的hadoop,是你自己的用户名

sudo mkdir /usr/local/sbt 
cd ~/下载
sudo tar -zxvf ./sbt-1.3.8.tgz -C /usr/local
cd /usr/local/sbt
sudo chown -R hadoop /usr/local/sbt
cp ./bin/sbt-launch.jar ./ 

 

使用下面命令创建一个Shell脚本文件 

vim /usr/local/sbt/sbt

添加以下内容到文件 

#!/bin/bash

SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"

java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

 保存后,还需要为该Shell脚本文件增加可执行权限:继续执行以下命令

chmod u+x /usr/local/sbt/sbt

最后,可以使用如下命令查看sbt版本信息: 

注意出现以下界面极为成功,但是需等待时间很长,取决于你的网速,博主这里网速较慢就去刷了10分钟抖音,大家也可以去了。记的回来哈!

有想提速解决这个问题的的,可以去看看教程里给的博客,我这里就“苦等”了。(刷dy)

./sbt sbtVersion

 

Scala应用程序代码

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

cd ~ 
mkdir ./sparkapp
mkdir -p ./sparkapp/src/main/scala

继续输入

vim ./sparkapp/src/main/scala/SimpleApp.scala

 文件添加这些内容

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
    def main(args: Array[String]) {
        val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
        val logData = sc.textFile(logFile, 2).cache()
        val numAs = logData.filter(line => line.contains("a")).count()
        val numBs = logData.filter(line => line.contains("b")).count()
        println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
    }
}

保存退出。 继续输入下面的命令:

cd ~/sparkapp
vim simple.sbt

在文本添加以下内容

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.12"

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

保存退出,继续输入以下: 

cd ~/sparkapp
find .

 出现以上界面成功。

使用 sbt 打包 Scala 程序

接着,我们就可以通过如下命令将整个应用程序打包成 JAR(首次运行同样需要下载依赖包 ):

/usr/local/sbt/sbt package

  出现以上界面成功。

通过 spark-submit 运行程序,终端输入以下命令:

/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "Lines with a:"

  出现以上界面成功。 

(二)使用Maven对Java独立应用程序进行编译打包

1. 安装Maven

在虚拟机浏览器粘贴一下地址

Index of /dist/maven/maven-3

找到 3.6.3

继续 

 继续

在终端继续输入下面的命令: (注意最后一句是你的用户名

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-202202810203- ./maven

 

2. Java应用程序代码 

cd ~
mkdir -p ./sparkapp2/src/main/java
vim ./sparkapp2/src/main/java/SimpleApp.java

在文件里添加以下内容:

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

public class SimpleApp {
    public static void main(String[] args) {
        String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
        SparkConf conf = new SparkConf().setMaster("local").setAppName("SimpleApp");
        JavaSparkContext sc = new JavaSparkContext(conf);
        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);
    }
}

 继续在终端输入:

cd ~/sparkapp2
vim pom.xml

在文件里添加在下面的内容

<project>

    <groupId>cn.edu.xmu</groupId>

    <artifactId>simple-project</artifactId>

    <modelVersion>4.0.0</modelVersion>

    <name>Simple Project</name>

    <packaging>jar</packaging>

    <version>1.0</version>

    <repositories>

        <repository>

            <id>jboss</id>

            <name>JBoss Repository</name>

            <url>http://repository.jboss.com/maven2/</url>

        </repository>

    </repositories>

    <dependencies>

        <dependency> <!-- Spark dependency -->

            <groupId>org.apache.spark</groupId>

            <artifactId>spark-core_2.11</artifactId>

            <version>2.4.0</version>

        </dependency>

    </dependencies>

</project>  

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

保存退出,继续在终端输入以下命令

find .

 ​​​出现下面的结构

继续输入 下面的命令

大家可以去刷15分钟抖音了,这里也很慢哈。

/usr/local/maven/bin/mvn package

 出现下面的界面极为成功。

通过spark-submit 运行程序 ,继续在终端输入

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

  出现下面的界面极为成功。

 (三)使用Maven对Scala独立应用程序进行编译打包

 Scala应用程序代码

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

cd ~           # 进入用户主文件夹
mkdir ./sparkapp3        # 创建应用程序根目录
mkdir -p ./sparkapp3/src/main/scala     # 创建所需的文件夹结构

继续输入:

vim ./sparkapp3/src/main/scala/SimpleApp.scala

在文件欸添加下面的内容

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
    def main(args: Array[String]) {
        val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
        val logData = sc.textFile(logFile, 2).cache()
        val numAs = logData.filter(line => line.contains("a")).count()
        val numBs = logData.filter(line => line.contains("b")).count()
        println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
    }
}

使用Maven进行编译打包

在终端中执行如下命令

cd ~/sparkapp3
vim pom.xml

 在文件里添加下面的内容

<project>

    <groupId>cn.edu.xmu</groupId>

    <artifactId>simple-project</artifactId>

    <modelVersion>4.0.0</modelVersion>

    <name>Simple Project</name>

    <packaging>jar</packaging>

    <version>1.0</version>

    <repositories>

        <repository>

            <id>jboss</id>

            <name>JBoss Repository</name>

            <url>http://repository.jboss.com/maven2/</url>

        </repository>

    </repositories>

    <dependencies>

        <dependency> <!-- Spark dependency -->

            <groupId>org.apache.spark</groupId>

            <artifactId>spark-core_2.11</artifactId>

            <version>2.4.0</version>

        </dependency>

    </dependencies>

  <build>

    <sourceDirectory>src/main/scala</sourceDirectory>

    <plugins>

      <plugin>

        <groupId>org.scala-tools</groupId>

        <artifactId>maven-scala-plugin</artifactId>

        <executions>

          <execution>

            <goals>

              <goal>compile</goal>

            </goals>

          </execution>

        </executions>

        <configuration>

          <scalaVersion>2.11.12</scalaVersion>

          <args>

            <arg>-target:jvm-1.8</arg>

          </args>

        </configuration>

    </plugin>

    </plugins>

</build>

</project>

继续执行下面的内容

find  .

  出现上面的界面极为成功。

继续在终端输入:

大家可以去刷15分钟抖音了,这里也很慢哈。

/usr/local/maven/bin/mvn  package

出现上面的界面极为成功。 

通过 spark-submit 运行程序

继续在终端输入:

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

出现如上界面即为成功。 

结语:整体的操作步我都给大家写出来,并且截图了,大家只需要无脑粘贴就好了,具体的讲解可以看我的资料里的文档解释更加详细,这个实验就结束了。 

上面内容制作不易,喜欢的点个赞和收藏支持一下吧!!

后期会持续更新更多大数据内容,如果想共同学习,就点点关注把(

相关文章:

  • Java面试高频问题(29-30)
  • 现代化Android开发:Compose提示信息的最佳封装方案
  • Universal Value Function Approximators 论文阅读(强化学习,迁移?)
  • 利器善其事:软件开发工具管理之道
  • TRO再添新案 TME再拿下一热门IP,涉及Paddington多个商标
  • 3、初识RabbitMQ
  • Git 工具的安装
  • git和github的使用指南
  • 浅谈Java 内存管理:栈与堆,垃圾回收
  • OpenStack Yoga版安装笔记(24)启动一个实例(L2Population测试)
  • css3新特性第八章(过渡)
  • JVM知识点(一)---内存管理
  • 【每天一个知识点】点乘(Dot Product)
  • 基于STM32的物流搬运机器人
  • 【漫话机器学习系列】225.张量(Tensors)
  • Android学习总结之kotlin篇(一)
  • 关于图论的知识
  • 正则表达式三剑客之——grep和sed
  • 有关图的类型的题目(1)
  • 从基础到实战的量化交易全流程学习:1.2 金融市场基础
  • 特朗普的百日执政支持率与他“一税解千愁”的世界观和方法论
  • 人社部:我国劳动力市场潜力足,韧性强
  • 上海浦东单价超10万楼盘228套房源开盘当天售罄,4月已有三个新盘“日光”
  • 中国航天员乘组完成在轨交接,神十九乘组将于29日返回地球
  • 2025厦门体育产业采风活动圆满举行
  • 2025年“畅游江淮 合肥等侬”文旅推介会在沪成功举办