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:"

出现如上界面即为成功。

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

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

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

相关推荐
lilye6615 分钟前
精益数据分析(17/126):精益画布与创业方向抉择
大数据·数据挖掘·数据分析
不要天天开心23 分钟前
大数据利器:Kafka与Spark的深度探索
spark·scala
思通数科AI全行业智能NLP系统3 小时前
AI视频技术赋能幼儿园安全——教师离岗报警系统的智慧守护
大数据·人工智能·安全·目标检测·目标跟踪·自然语言处理·ocr
A-Kamen5 小时前
MySQL 存储引擎对比:InnoDB vs MyISAM vs Memory
数据库·mysql·spark
程序员沉梦听雨5 小时前
【Elasticsearch】入门篇
大数据·elasticsearch·搜索引擎
Gadus_5 小时前
Elasticsearch性能优化实践
大数据·elasticsearch·搜索引擎·性能优化
riveting7 小时前
SD2351核心板:重构AI视觉产业价值链的“超级节点”
大数据·linux·图像处理·人工智能·重构·智能硬件
一点.点7 小时前
李沐动手深度学习(pycharm中运行笔记)——04.数据操作
pytorch·笔记·python·深度学习·pycharm·动手深度学习
IT成长日记8 小时前
【Hive入门】Hive基础操作与SQL语法:DDL操作全面指南
hive·hadoop·sql·ddl操作
欧先生^_^8 小时前
Spark 的一些典型应用场景及具体示例
大数据·分布式·spark