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

出現如上界面即為成功。?

結語:整體的操作步我都給大家寫出來,并且截圖了,大家只需要無腦粘貼就好了,具體的講解可以看我的資料里的文檔解釋更加詳細,這個實驗就結束了。?

上面內容制作不易,喜歡的點個贊和收藏支持一下吧!!

后期會持續更新更多大數據內容,如果想共同學習,就點點關注把(

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77297.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DCDC芯片,boost升壓電路設計,MT3608 芯片深度解析:從架構到設計的全維度技術手冊

一、硬件架構解析:電流模式升壓 converter 的核心設計 (一)電路拓撲與核心組件 MT3608 采用恒定頻率峰值電流模式升壓(Boost)轉換器架構,核心由以下模塊構成: 集成功率 MOSFET 內置 80mΩ 導通電阻的 N 溝道 MOSFET,漏極(Drain)對應引腳 SW,源極(Source)內部接…

Java 日志:掌握本地與網絡日志技術

日志記錄是軟件開發中不可或缺的一部分&#xff0c;它為開發者提供了洞察應用程序行為、診斷問題和監控性能的手段。在 Java 生態系統中&#xff0c;日志框架如 Java Util Logging (JUL)、Log4j 和 Simple Logging Facade for Java (SLF4J) 提供了豐富的功能。然而&#xff0c;…

上位機知識篇---時鐘分頻

文章目錄 前言 前言 本文簡單介紹了一下時鐘分頻。時鐘分頻&#xff08;Clock Division&#xff09;是數字電路設計中常見的技術&#xff0c;用于將高頻時鐘信號轉換為較低頻率的時鐘信號&#xff0c;以滿足不同模塊的時序需求。它在處理器、FPGA、SoC&#xff08;片上系統&am…

推薦幾個免費提取音視頻文案的工具(SRT格式、通義千問、飛書妙記、VideoCaptioner、AsrTools)

文章目錄 1. 前言2. SRT格式2.1 SRT 格式的特點2.2 SRT 文件的組成2.3 SRT 文件示例 3. 通義千問3.1 官網3.2 上傳音視頻文件3.3 導出文案 4. 飛書妙記4.1 官網4.2 上傳音視頻文件4.3 導出文案4.4 缺點 5. VideoCaptioner5.1 GitHub地址5.2 下載5.2.1 通過GitHub下載5.2.2 通過…

Linux深度探索:進程管理與系統架構

1.馮諾依曼體系結構 我們常見的計算機&#xff0c;如筆記本。我們不常見的計算機&#xff0c;如服務器&#xff0c;大部分都遵守馮諾依曼體系。 截至目前&#xff0c;我們所認識的計算機&#xff0c;都是由?個個的硬件組件組成。 輸入設備&#xff1a;鍵盤&#xff0c;鼠標…

觀察者模式 (Observer Pattern)

觀察者模式(Observer Pattern)是一種行為型設計模式。它定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。當主題對象的狀態發生變化時,會自動通知所有觀察者對象,使它們能夠自動更新自己的狀態。 一、基礎 1. 意圖 核心目的:定義對象間的一種一對…

Network.framework 的引入,不是為了取代 URLSession

Network.framework 的引入&#xff0c;不是為了取代 URLSession 如果你感覺 Network.framework 的引入, 可能是為了取代 URLSession, 那你就大錯特錯了&#xff01;這里需要非常準確地區分一下&#xff1a; &#x1f535; Network.framework 不是為了取代 URLSession。 &…

Redis 數據分片三大方案深度解析與 Java 實戰

Redis 數據分片是將數據分散存儲在多個 Redis 實例上的技術&#xff0c;以解決單個 Redis 實例在存儲容量、性能和可用性上的限制。常見的 Redis 數據分片方案包括客戶端分片、代理分片和Redis Cluster&#xff08;集群分片&#xff09;&#xff0c;以下為你詳細介紹&#xff1…

FreeBSD可以不經過windows服務器訪問windows機器上的共享文件嗎?

答案是&#xff1a;當然可以&#xff01; 使用sharity-light 軟件 可以使用sharity-light 軟件&#xff0c;直接不用安裝samba等軟件&#xff0c;直接訪問windows機器上的共享文件。 但是可惜的是&#xff0c;sharity-light在FreeBSD的ports里棄用了。看來是從FreeBSD 8 就開…

主流 LLM 部署框架

主流 LLM 部署框架 框架主要特點適用場景vLLM- 超快推理&#xff08;高吞吐&#xff09; - 動態批處理 - 支持 HuggingFace Transformer - 支持 PagedAttention高并發、低延遲在線推理TGI (Text Generation Inference)- Huggingface官方出品 - 多模型管理 - 支持動態量化 - 支持…

在 Vue 3 setup() 函數中使用 TypeScript 處理 null 和 undefined 的最佳實踐

在 Vue 3 中使用 setup() 函數和 TypeScript 時&#xff0c;null 和 undefined 是兩個需要特別關注的類型。雖然它們看起來都表示“沒有值”&#xff0c;但它們在 JavaScript 和 TypeScript 中有著不同的含義和使用場景。如果不小心處理它們&#xff0c;可能會導致潛在的 bug 或…

在 UniApp 中獲取當前頁面地址

在 UniApp 中獲取當前頁面地址&#xff0c;可以通過以下步驟實現&#xff1a; 方法說明&#xff1a; 獲取當前頁面實例&#xff1a;使用 getCurrentPages() 獲取頁面棧數組&#xff0c;最后一個元素即為當前頁面實例。 提取頁面路徑和參數&#xff1a;從頁面實例的 route 屬性…

【華為】防火墻雙擊熱備-之-主備模式-單外網線路-分享

FW1和FW2的業務接口都工作在三層&#xff0c;上行連接二層交換機。上行交換機連接運營商的接入點&#xff0c;運營商為企業分配的IP地址為100.100.100.2。現在希望FW1和FW2以主備備份方式工作。正常情況下&#xff0c;流量通過FW1轉發&#xff1b;當FW1出現故障時&#xff0c;流…

crossOriginLoading使用說明

1. 說明 此配置用于控制 Webpack 動態加載的代碼塊&#xff08;chunk&#xff09;&#xff08;例如代碼分割或懶加載的模塊&#xff09;在跨域&#xff08;不同域名&#xff09;加載時的行為。它通過為動態生成的 <script>標簽添加 crossorigin 屬性&#xff0c;確保符合…

windows中安裝VMware Workstation Pro虛擬機和ubuntu

目錄 一、安裝 VMware Workstation Pro 虛擬機 1、官網下載VMware Workstation Pro 1.1 選中 "VMware Workstation Pro for PC" 的 "DOWNLOAD NOW" 1.2 跳轉到broadcom登錄頁面 1.3 注冊賬號 1.4 輸入給郵箱收到的驗證碼信息&#xff0c;然后點擊”Verify…

如何快速輕松地恢復未保存的 Word 文檔:簡短指南

文字處理器已經存在了幾十年&#xff0c;其中許多已經變得非常擅長防止問題。丟失未保存的數據是一個常見問題&#xff0c;因此辦公軟件通常帶有恢復文件的方法。在本文中&#xff0c;我們將介紹如何恢復 Word 文檔&#xff0c;即使您尚未保存它。 確保數據安全的最佳方法是保…

JavaScript原生實現簡單虛擬列表(列表不定高)

本文首發在我的個人博客上&#xff1a;JavaScript原生實現簡單虛擬列表(列表不定高)https://www.brandhuang.com/article/1745637125513 前言 之前實現了一個定高版本的虛擬列表&#xff0c;今天在定高版本的基礎上稍作調整&#xff0c;來實現不定高版本&#xff0c;之前的版本…

redis數據類型-位域bitfield

redis數據類型-位域bitfield 文檔 redis單機安裝redis常用的五種數據類型redis數據類型-位圖bitmapredis數據類型-基數統計HyperLogLogredis數據類型-地理空間GEOredis數據類型-流Stream 官方文檔 官網操作命令指南頁面&#xff1a;https://redis.io/docs/latest/commands/…

pandas讀取MySQL中的數據

使用pandas讀取MySQL中的數據 1、導入庫 pip install pandas pip install sqlalchemy2、示例代碼 # -*- coding: utf-8 -*-import pandas as pd import re from sqlalchemy import create_engine# 清洗文本 def clean_text(text):text

MyBatis緩存配置的完整示例,包含一級緩存、二級緩存、自定義緩存策略等核心場景,并附詳細注釋和總結表格

以下是MyBatis緩存配置的完整示例&#xff0c;包含一級緩存、二級緩存、自定義緩存策略等核心場景&#xff0c;并附詳細注釋和總結表格&#xff1a; 1. 一級緩存&#xff08;默認開啟&#xff09; // 使用同一SqlSession執行兩次查詢&#xff0c;自動命中一級緩存 try (SqlSe…