Hadoop學習筆記(HDP)-Part.17 安裝Spark2

目錄
Part.01 關于HDP
Part.02 核心組件原理
Part.03 資源規劃
Part.04 基礎環境配置
Part.05 Yum源配置
Part.06 安裝OracleJDK
Part.07 安裝MySQL
Part.08 部署Ambari集群
Part.09 安裝OpenLDAP
Part.10 創建集群
Part.11 安裝Kerberos
Part.12 安裝HDFS
Part.13 安裝Ranger
Part.14 安裝YARN+MR
Part.15 安裝HIVE
Part.16 安裝HBase
Part.17 安裝Spark2
Part.18 安裝Flink
Part.19 安裝Kafka
Part.20 安裝Flume

十七、安裝Spark2

1.安裝

添加Spark2服務
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
需要重啟HDFS、YARN、MapReduce2、Hive、HBase等相關服務

2.取消kerberos對頁面的認證

在CONFIGS->Advanced spark2-env下的content里,將下面內容加#注釋掉

export SPARK_HISTORY_OPTS='-Dspark.ui.filters=org.apache.hadoop.security.authentication.server.AuthenticationFilter -Dspark.org.apache.hadoop.security.authentication.server.AuthenticationFilter.params="type=kerberos,kerberos.principal={{spnego_principal}},kerberos.keytab={{spnego_keytab}}"'

在這里插入圖片描述
訪問頁面,http://hdp01.hdp.com:18081/
在這里插入圖片描述

3.確認Spark on Yarn配置

查看/usr/hdp/3.1.5.0-152/spark2/conf/spark-env.sh

export HADOOP_HOME=${HADOOP_HOME:-/usr/hdp/3.1.5.0-152/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/usr/hdp/3.1.5.0-152/hadoop/conf}

/usr/hdp/3.1.5.0-152/hadoop-yarn/conf/yarn-site.xml

4.spark-shell交互式命令

每個Spark應用程序都需要一個Spark環境,這是Spark RDD API的主要入口點。Spark Shell提供了一個名為“sc”的預配置Spark環境和一個名為“spark”的預配置Spark會話。使用Spark Shell的時候,本身是預配置了sc,即SparkConf和SparkContext的,但是在實際使用編輯器編程過程中是需要設置這些配置的。

(1)啟動

啟動spark-shell

spark-shell --master local

在這里插入圖片描述
正確界面如下:
在這里插入圖片描述
(2)加載本地文件
通過預置sc加載本地文件

val textFile = sc.textFile("file:///root/wordcount_input")

val后面的是變量textFile,而sc.textFile()中的這個textFile是sc的一個方法名稱,這個方法用來加載文件數據。這兩個textFile不是一個東西,不要混淆。實際上,val后面的是變量textFile。
要加載本地文件,必須采用“file:///”開頭的這種格式。執行上上面這條命令以后,并不會馬上顯示結果,因為,Spark采用惰性機制,只有遇到“行動”類型的操作,才會從頭到尾執行所有操作。

textFile.first()

first()是一個“行動”(Action)類型的操作,會啟動真正的計算過程,從文件中加載數據到變量textFile中,并取出第一行文本。屏幕上會顯示很多反饋信息,這里不再給出,你可以從這些結果信息中,找到word.txt文件中的第一行的內容。
在這里插入圖片描述
正因為Spark采用了惰性機制,在執行轉換操作的時候,即使我們輸入了錯誤的語句,spark-shell也不會馬上報錯,而是等到執行“行動”類型的語句時啟動真正的計算,那個時候“轉換”操作語句中的錯誤就會顯示出來。
在這里插入圖片描述

(3)變量回寫到本地文件

將變量中的內容寫回到本地文件/root/output中

val textFile = sc.textFile("file:///root/wordcount_input")
textFile.saveAsTextFile("file:///root/output")

上面的saveAsTextFile()括號里面的參數是保存文件的路徑,不是文件名。saveAsTextFile()是一個“行動”(Action)類型的操作,所以,馬上會執行真正的計算過程,從wordcount_input中加載數據到變量textFile中,然后,又把textFile中的數據寫回到本地文件目錄“/root/output”下面

ll /root/output/
cat /root/output/part-00000

在這里插入圖片描述
(4)加載HDFS中文件
與加載本地文件類似

val textFile = sc.textFile("hdfs://hdp315/testhdfs/tenant1/wordcount_input")
textFile.first()

在這里插入圖片描述

實驗:Spark SQL-詞頻統計

(1)spark-shell方式

待統計文件為/root/wordcount_input

spark-shell --master local
val textFile = sc.textFile("file:///root/wordcount_input")
val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).ruduceByKey((a,b) => a + b)
wordCount.collect()

在這里插入圖片描述
textFile包含了多行文本內容,textFile.flatMap(line => line.split(" “))會遍歷textFile中的每行文本內容,當遍歷到其中一行文本內容時,會把文本內容賦值給變量line,并執行Lamda表達式line => line.split(” “)。line => line.split(” “)是一個Lamda表達式,左邊表示輸入參數,右邊表示函數里面執行的處理邏輯,這里執行line.split(” "),也就是針對line中的一行文本內容,采用空格作為分隔符進行單詞切分,從一行文本切分得到很多個單詞構成的單詞集合。這樣,對于textFile中的每行文本,都會使用Lamda表達式得到一個單詞集合,最終,多行文本,就得到多個單詞集合。textFile.flatMap()操作就把這多個單詞集合“拍扁”得到一個大的單詞集合。
然后,針對這個大的單詞集合,執行map()操作,也就是map(word => (word, 1)),這個map操作會遍歷這個集合中的每個單詞,當遍歷到其中一個單詞時,就把當前這個單詞賦值給變量word,并執行Lamda表達式word => (word, 1),這個Lamda表達式的含義是,word作為函數的輸入參數,然后,執行函數處理邏輯,這里會執行(word, 1),也就是針對輸入的word,構建得到一個tuple,形式為(word,1),key是word,value是1(表示該單詞出現1次)。
程序執行到這里,已經得到一個RDD,這個RDD的每個元素是(key,value)形式的tuple。最后,針對這個RDD,執行reduceByKey((a, b) => a + b)操作,這個操作會把所有RDD元素按照key進行分組,然后使用給定的函數(這里就是Lamda表達式:(a, b) => a + b),對具有相同的key的多個value進行reduce操作,返回reduce后的(key,value),比如(“hadoop”,1)和(“hadoop”,1),具有相同的key,進行reduce以后就得到(“hadoop”,2),這樣就計算得到了這個單詞的詞頻。

(2)spark-submit方式

建議找一臺有外網的服務器來做sbt,因為需要下載很多依賴包
安裝sbt

tar -zxvf /opt/sbt-1.8.2.tgz -C /usr/local/

將位于sbt/bin下面的sbt-launch.jar文件放在sbt目錄下。
cp /usr/local/sbt/bin/sbt-launch.jar /usr/local/sbt/
在sbt目錄下創建sbt腳本

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

確認是否成功

/usr/local/sbt/sbt sbtVersion

在這里插入圖片描述
創建工程目錄及相關文件
在這里插入圖片描述
scala文件,/data01/project/wordcount/src/main/scala/wordcount.scala

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject WordCount {def main(args: Array[String]) {val inputFile =  "hdfs://hdp315/testhdfs/ranger_yarn/wordcount_input"val conf = new SparkConf().setAppName("WordCount")val sc = new SparkContext(conf)val textFile = sc.textFile(inputFile)val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)wordCount.foreach(println)}
}

sbt文件,/data01/project/wordcount/wordcount.sbt

name := "WordCount Project"version := "1.0"scalaVersion := "2.11.12"libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0"

進入到工程目錄下,將整個工程打成jar包

/usr/local/sbt/sbt package

在這里插入圖片描述
jar包在工程目錄下的./target/scala-2.11/下
在這里插入圖片描述
回到hdp01上,通過spark-submit提交jar包執行

kinit -kt /root/keytab/ranger_yarn.keytab ranger_yarn
spark-submit --class "WordCount" /root/wordcount-project_2.11-1.0.jar --deploy-mode cluster --master yarn

在這里插入圖片描述
查看結果
在spark中可以查看任務信息,已經結果
在這里插入圖片描述
在這里插入圖片描述

6.實驗:Spark Streaming-顯示實時流內容

將nc作為服務器端,用戶產生數據;啟動sparkstreaming客戶端程序,監聽服務器端發送過來的數據,并對其數據進行顯示。
在測試的nc服務端,啟動nc程序,端口為1234

nc -l 1234

配置sbt文件,增加sparking-streaming依賴包,/data01/project/streamPrint/streamPrint.sbt

name := "streamPrint Project"version := "1.0"scalaVersion := "2.11.12"libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.3.0",
"org.apache.spark" %% "spark-streaming" % "2.3.0"
)

配置scala文件,/data01/project/streamPrint/src/main/scala/streamPrint.scala

import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.storage.StorageLevelobject StreamPrint {def main(args: Array[String]) {val conf = new SparkConf().setAppName("streamPrint")val sc = new StreamingContext(conf, Seconds(5))val lines = sc.socketTextStream("192.168.111.1", 1234, StorageLevel.MEMORY_AND_DISK)if (lines != null) {lines.print()println("start!")}sc.start()sc.awaitTermination()}
}

進入到工程目錄下,將整個工程打成jar包

/usr/local/sbt/sbt package

回到hdp01上,通過spark-submit提交jar包執行

kinit -kt /root/keytab/ranger_yarn.keytab ranger_yarn
spark-submit --class "StreamPrint" /root/streamprint-project_2.11-1.0.jar --deploy-mode cluster --master yarn

此時在nc服務端輸入內容后,可在spark streaming中看到相應的內容
在這里插入圖片描述
在這里插入圖片描述
Spark streaming中的間隔,是在scala程序中設置的,val sc = new StreamingContext(conf, Seconds(5))因此是5秒輸出一次。

7.spark-submit參數

–master
master的地址,提交任務到哪里執行
常見的選項有
local:提交到本地服務器執行,并分配單個線程
local[k]:提交到本地服務器執行,并分配k個線程
spark://HOST:PORT:提交到standalone模式部署的spark集群中,并指定主節點的IP與端口
mesos://HOST:PORT:提交到mesos模式部署的集群中,并指定主節點的IP與端口
yarn:提交到yarn模式部署的集群中
–deploy-mode
在本地(client)啟動driver或在cluster上啟動,默認是client
DEPLOY_MODE:設置driver啟動的位置,可選項如下,默認為client
client:在客戶端上啟動driver,這樣邏輯運算在client上執行,任務執行在cluster上
cluster:邏輯運算與任務執行均在cluster上,cluster模式暫時不支持于Mesos集群或Python應用程序
–class
應用程序的主類,僅針對java或scala應用
CLASS_NAME:指定應用程序的類入口,即主類,僅針對java、scala程序,不作用于python程序
–name
應用程序的名稱
–jars
用逗號分隔的本地jar包,設置后,jar包將包含在driver和executor的classpath下
–packages
包含在driver和executor的classpath中的jar的maven坐標
–exclude-packages
為了避免沖突,指定的參數–package中不包含的jars包
–repositories
遠程repository
附加的遠程資源庫(包含jars包)等,可以通過maven坐標進行搜索
–py-files
PY_FILES:逗號隔開的的.zip、.egg、.py文件,這些文件會放置在PYTHONPATH下,該參數僅針對python應用程序
–files
FILES:逗號隔開的文件列表,這些文件將存放于每一個工作節點進程目錄下
–conf PROP=VALUE
指定spark配置屬性的值,格式為PROP=VALUE,例如–confspark.executor.extraJavaOptions=“-XX:MaxPermSize=256m”
–properties-file
指定需要額外加載的配置文件,用逗號分隔,如果不指定,默認為conf/spark-defaults.conf
–driver-memory
Driver內存,默認1G
–driver-java-options
傳給driver的額外的Java選項
–driver-library-path
傳給driver的額外的庫路徑
–driver-class-path
傳給driver的額外的類路徑,用–jars添加的jar包會自動包含在類路徑里
–driver-cores
Driver的核數,默認是1。在yarn或者standalone下使用
–executor-memory
每個executor的內存,默認是1G
–total-executor-cores
所有executor總共的核數。僅僅在mesos或者standalone下使用
–num-executors
啟動的executor數量。默認為2。在yarn下使用
–executor-core
每個executor的核數。在yarn或者standalone下使用

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

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

相關文章

Web前端 ---- 【Vue】Vuex的使用(輔助函數、模塊化開發)

目錄 前言 Vuex是什么 Vuex的配置 安裝vuex 配置vuex文件 Vuex核心對象 actions mutations getters state Vuex在vue中的使用 輔助函數 Vuex模塊化開發 前言 本文介紹一種新的用于組件傳值的插件 —— vuex Vuex是什么 Vuex 是一個專為 Vue.js 應用程序開發的狀態…

淺談前端代碼里的命名規范與注釋

淺談前端代碼里的命名規范與注釋 在前端代碼中,命名規范和注釋是非常重要的。它們不僅有助于提高代碼的可讀性和可維護性,還可以幫助開發者之間更好地協作和溝通。下面是一些關于命名規范和注釋的常見建議: 命名規范: 使用有意義…

【ArcGIS Pro微課1000例】0053:基于SQL Server創建與啟用地理數據庫

之前的文章有講述基于SQL Server創建企業級地理數據庫,本文講述在SQL Server中創建常規的關心數據庫,然后在ArcGIS Pro中將其啟用,轉換為企業級地理數據庫。 1. 在SQL Server中創建數據庫** 打開SQL Server 2019,連接到數據庫服務器。 展開數據庫連接,在數據庫上右鍵→新…

python中的lambda關鍵字

對于一切很模糊的知識,首要的是抓住概念的定義。 lambda:在 Python 中用于創建匿名函數的關鍵字。 也即,lambda是一種關鍵字,這種關鍵字的作用是創建匿名函數。 這一段很好懂,就是匿名函數有點懵。 什么是匿名函數&…

mybatis-plus構造器查詢

文章目錄 Hutool工具包Vo與entity轉換多表分頁查詢構造器:查詢構造器:拼接構造器:刪除操作構造器:修改操作查詢關鍵字 Hutool工具包Vo與entity轉換 BeanUtils:copyProperties(vo, entity),vo轉實體類。 L…

在裝有 PostgreSQL 14 的 Red Hat8上安裝 `pg_cron`

要在裝有 PostgreSQL 14 的 Red Hat、CentOS、Fedora 或 Amazon Linux 上安裝 pg_cron,請遵循以下步驟。這些步驟假定您已經安裝了 PostgreSQL Global Development Group (PGDG) 的 PostgreSQL 版本。 安裝 pg_cron 擴展 使用 yum 安裝 pg_cron 擴展:s…

(四)Tiki-taka算法(TTA)求解無人機三維路徑規劃研究(MATLAB)

一、無人機模型簡介: 單個無人機三維路徑規劃問題及其建模_IT猿手的博客-CSDN博客 參考文獻: [1]胡觀凱,鐘建華,李永正,黎萬洪.基于IPSO-GA算法的無人機三維路徑規劃[J].現代電子技術,2023,46(07):115-120 二、Tiki-taka算法(TTA&#xf…

基于SSH的java記賬管理系統

基于SSH的java記賬管理系統 一、系統介紹二、功能展示四、其他系統實現五、獲取源碼 一、系統介紹 項目類型:Java EE項目 項目名稱:基于SSH的記賬管理系統 項目架構:B/S架構 開發語言:Java語言 前端技術:HTML、CS…

初識優先級隊列與堆

1.優先級隊列 由前文隊列queue可知,隊列是一種先進先出(FIFO)的數據結構,但有些情況下,操作的數據可能帶有優先級,一般出隊列時,可能需要優先級高的元素先出隊列,在此情況下,使用隊列queue顯然不…

git常用命令指南

目錄 一、基本命令 1、創建分支 2、切換分支 3、合并分支 4、初始化空git倉庫 二、文件操作 1、創建文件 2、添加多個文件 3、查看項目的當前狀態 4、修改文件 5、刪除文件 6、提交項目 三、實際操作 1、創建目錄 2、進入新目錄 3、初始化空git倉庫 4、創建文…

C++STL的string模擬實現

文章目錄 前言string的成員變量成員函數構造函數拷貝構造賦值重載 模擬實現string各種接口print迭代器普通迭代器const迭代器 string比較大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要講string的底層實現&…

總線(什么是南北橋?您都用過哪些總線?)

什么是總線? 計算機系統中的總線(Bus)是指計算機設備和設備之間傳輸信息的公共數據通道,是連接計算機硬件系統內多種設備的通信線路,它的一個重要特征是由總線上的所有設備共享,因此可以將計算機系統內的多…

python基于輕量級GhostNet模型開發構建23種常見中草藥圖像識別系統

輕量級識別模型在我們前面的博文中已經有過很多實踐了,感興趣的話可以自行移步閱讀: 《移動端輕量級模型開發誰更勝一籌,efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2駕駛危險行為識別模型對比開發測試》 《基…

Vue 核心 數據監聽 computed | watch

Vue 核心 數據監聽 computed | watch 一、今日學習目標 1.指令補充 指令修飾符v-bind對樣式增強的操作v-model應用于其他表單元素 2.computed計算屬性 基礎語法計算屬性vs方法計算屬性的完整寫法成績案例 3.watch偵聽器 基礎寫法完整寫法 4.綜合案例 (演示&…

缺陷責任期與質量保修期如何快速區分?

缺陷責任期 《建設工程質量保證金管理辦法》第二條對缺陷給出了定義,是指建設工程質量不符合工程建設強制性標準、設計文件,以及承包合同的約定。缺陷責任期是指承包人對工程質量瑕疵擔保的期限,由發承包雙方在合同中進行約定,期…

制造業數字化轉型該怎么做?這篇1.6萬字的文章終于講透了!

制造業數字化轉型該怎么做?下面通過 1.6W 字干貨內容,全面講透制造業數字化轉型。 (為防后續找不到,建議大家先點贊收藏~) 引言: 1、發達國家制造業回流力度加大,中國制造業戰略地位提升。 …

selenium 解決 id定位、class定位中,屬性值帶空格的解決辦法

一、前置說明 selenium遇到下面這種元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、雖然id一般不會有空格&#xff0c;但是前端錯誤的這種寫法(如下圖)&#xff0c;會造成使用id定位不到元素&#xff0c;如&#xff1a; find…

面試遇到的一些問題(二)

1、v-if v-show 區別,他們的生命周期區別 v-show: (類似于display:none/black 的切換)不管初始值是true 或false 都會進行渲染,狀態改變也不會銷毀和重新生成。不會影響生命周期 v-if : 是根據條件,dom進行刪除插入操作。 依附于普通元素時:會觸發父組件的beforeUpdate和u…

IOday6作業

1>使用有名管道&#xff0c;完成兩個進程的相互通信 //create.c #include<myhead.h>int main(int argc, const char *argv[]) {if((mkfifo("myfifo1",0664)) -1){perror("mkfifo");return -1;}if((mkfifo("myfifo2",0664)) -1){perror…

MYSQL練題筆記-高級查詢和連接-這系列最后一題以及下個系列(子查詢)的第一題

今天做了下面兩題&#xff0c;到第三題的時候想了下但是沒有太多的思路&#xff0c;然后看題解的時候實在是覺得自己不會&#xff0c;打算明天看吧。 1.按分類統計薪水相關的表和題目如下 我是想著簡化問題&#xff0c;先找出薪水低于30000的員工&#xff0c;然后找這些員工的上…