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.打开终端输入粘贴以下命令:(注意最后一句是你的用户名)

bash 复制代码
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.继续在终端输入以下命令:

bash 复制代码
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh

3.继续在终端入:

bash 复制代码
vim ./conf/spark-env.sh

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

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

记得保存退出。

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

bash 复制代码
cd /usr/local/spark
bin/run-example SparkPi 2>&1 | grep "Pi is"

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

1.启动Spark Shell

在终端继续输入:

bash 复制代码
cd /usr/local/spark
bin/spark-shell

2.加载text文件

在终端继续输入:

bash 复制代码
val textFile = sc.textFile("file:///usr/local/spark/README.md")

3.简单RDD操作

终端可以输入:

bash 复制代码
//获取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

输入:

bash 复制代码
:quit

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

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

1. 安装sbt

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

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

Download | sbt

找到sbt-1.3.8.tgz。

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

然后拖到下载里

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

bash 复制代码
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脚本文件

bash 复制代码
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脚本文件增加可执行权限:继续执行以下命令

bash 复制代码
chmod u+x /usr/local/sbt/sbt

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

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

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

bash 复制代码
./sbt sbtVersion

Scala应用程序代码

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

bash 复制代码
cd ~ 
mkdir ./sparkapp
mkdir -p ./sparkapp/src/main/scala

继续输入

bash 复制代码
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))

}

}

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

bash 复制代码
cd ~/sparkapp
vim simple.sbt

在文本添加以下内容

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.12"

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

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

bash 复制代码
cd ~/sparkapp
find .

出现以上界面成功。

使用 sbt 打包 Scala 程序

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

bash 复制代码
/usr/local/sbt/sbt package

出现以上界面成功。

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

bash 复制代码
/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

继续

继续

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

bash 复制代码
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应用程序代码

bash 复制代码
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);

}

}

继续在终端输入:

bash 复制代码
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能够正常运行,先执行如下命令检查整个应用程序的文件结构:

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

bash 复制代码
find .

​​​出现下面的结构

继续输入 下面的命令

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

bash 复制代码
/usr/local/maven/bin/mvn package

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

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

bash 复制代码
/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作为应用程序根目录:

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

继续输入:

bash 复制代码
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进行编译打包

在终端中执行如下命令

bash 复制代码
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>

继续执行下面的内容

bash 复制代码
find  .

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

继续在终端输入:

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

bash 复制代码
/usr/local/maven/bin/mvn  package

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

通过 spark-submit 运行程序

继续在终端输入:

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

出现如上界面即为成功。

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

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

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

相关推荐
临风赏月28 分钟前
Hadoop、Kafka、Flink、Spark、Hive五大组件运维常用操作命令
hadoop·flink·kafka
杨超越luckly1 小时前
HTML应用指南:利用POST请求获取全国爱回收门店位置信息
大数据·前端·python·信息可视化·html
呆呆小金人1 小时前
SQL视图:虚拟表的完整指南
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
梦里不知身是客112 小时前
Spark介绍
大数据·分布式·spark
啊吧怪不啊吧2 小时前
SQL之表的查改(下)
大数据·数据库·sql
猫猫姐姐10 小时前
Flink基于Paimon的实时湖仓解决方案的演进
大数据·flink·湖仓一体
笨蛋少年派12 小时前
Hive安装部署
数据仓库·hive·hadoop
极客数模12 小时前
2025年(第六届)“大湾区杯”粤港澳金融数学建模竞赛准备!严格遵循要求,拿下大奖!
大数据·python·数学建模·金融·分类·图论·boosting
雍凉明月夜13 小时前
人工智能学习中深度学习之python基础之迭代器、生成器、文件处理和模块等
python·深度学习·学习·pycharm
Elastic 中国社区官方博客14 小时前
Elastic AI agent builder 介绍(三)
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索