<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          我的 Spark 3.1.1 之旅【收藏夾吃灰系列】

          共 7601字,需瀏覽 16分鐘

           ·

          2021-04-14 14:09

          點(diǎn)擊藍(lán)色“有關(guān)SQL”關(guān)注我喲

          加個(gè)“星標(biāo)”,天天與10000人一起快樂(lè)成長(zhǎng)

          圖 | 榖依米


          大數(shù)據(jù)三部曲終于完成了:


          我的 Hadoop 3.2.2 之旅 【收藏夾吃灰系列】

          我的 Hive 3.1.2 之旅 【收藏夾吃灰系列】


          本篇是最后一部,《我的 Spark 3.1.1 之旅》。


          如今使用 CDH( Cloudera Distribution Hadoop) 部署 Hadoop 成了業(yè)界常規(guī),為什么還要費(fèi)勁自己動(dòng)手呢?這不浪費(fèi)時(shí)間嘛!


          是的。時(shí)間投入蠻大的,不算寫(xiě)文章,搭建過(guò)程也得有 20多個(gè)小時(shí)。白天忙公司項(xiàng)目,都已經(jīng)焦頭爛額,回到家,還得花上 2-3 小時(shí),熬到深夜。


          搭建過(guò)程,難熬的是,遇到卡點(diǎn),找不到解決方法。抓狂,質(zhì)疑,懷疑人生,不停對(duì)自己說(shuō)放棄,但最后一刻,總能在一杯杯熱咖啡的陪伴下,找到破解。


          一切技術(shù)難點(diǎn),都是紙糊的。我們要做的,只有埋頭苦干,與等待!


          浪費(fèi)時(shí)間,給自己找罪受?No, 這正是我享受的地方!


          初學(xué)數(shù)據(jù)庫(kù)時(shí),我把 Oracle 反復(fù)裝了 50 多遍。Solaris, Redhat, CentOS,能找到的操作系統(tǒng),我都裝了。哪個(gè) Linux 容易裝,網(wǎng)絡(luò)不穩(wěn)定會(huì)出什么問(wèn)題,磁盤(pán)不夠用會(huì)有什么癥狀,RAC 該如何配置,等等,都經(jīng)歷了一遍。之后看到問(wèn)題,心里才沒(méi)有初學(xué)時(shí)那種慌張。


          搭建大數(shù)據(jù)環(huán)境也一樣。CDH/Hortonworks/MapR, 這些廠(chǎng)商都給封裝完了,純 UI 式安裝管理,開(kāi)發(fā)用得挺爽。但某天爆出一個(gè) Hive Authentication exception, 如果不知道有 hive-site.xml 這回事,不知道 hive.server2.authentication, 處理起來(lái),兩眼一抹黑,只能傻傻等待重啟了!


          所以,我還是會(huì)選擇,多自己動(dòng)手,從 0 到 1 玩一樣?xùn)|西。雖然少看了很多藍(lán)光高清電影,但這個(gè)過(guò)程是值得的!





          以下是這次分享的主題:


          • 巧婦也做有米之炊: 準(zhǔn)備安裝文件
          • 買(mǎi)鍋造爐:集群搭建
          • 生米煮成熟飯之后:集群?jiǎn)?dòng)與關(guān)閉
          • 真香系列:Spark Shell 獨(dú)食記



          A

          準(zhǔn)備安裝文件


          Spark 是一個(gè)分布式計(jì)算框架,通過(guò)集群部署,可以發(fā)揮并發(fā)計(jì)算的優(yōu)勢(shì)。

          其與 Hadoop, Hive 天然集成的策略,讓計(jì)算更貼近本地?cái)?shù)據(jù),完成快速計(jì)算,提高效率。

          所以在本次實(shí)驗(yàn)中,我把 Spark 部署到了 Hadoop 集群中,發(fā)揮最大的優(yōu)勢(shì)。當(dāng)然,實(shí)際運(yùn)用中,完成可以有不同的部署方法。

          既然是與 hadoop 結(jié)合起來(lái)運(yùn)用,那么選擇 Spark 版本就很重要了。

          image.png

          Spark 官網(wǎng):https://spark.apache.org/downloads.html

          對(duì)應(yīng)的,Scala 版本也應(yīng)該選擇 Scala 2.12. Scala 是 Spark 預(yù)編譯語(yǔ)言,用來(lái)開(kāi)發(fā) Spark 應(yīng)用最自然。

          總結(jié)下,完成此次部署,需要的軟件有:

          • Spark 3.1.1
          • Scala 2.12

          Scala 下載官網(wǎng):https://www.scala-lang.org/download/



          A

          集群搭建


          搭建 Spark ,首要的事情,是規(guī)劃好 master 節(jié)點(diǎn)與 worker 節(jié)點(diǎn)。與前面的兩部曲相結(jié)合,本次實(shí)驗(yàn)共有 3 臺(tái)計(jì)算機(jī),對(duì)應(yīng)的 host 與 IP 如下:

          namenode 192.168.31.10 

          nodea 192.168.31.11

          nodeb 192.168.31.12

          namenode 上運(yùn)行了 HDFS 的 namenode, YARN 的 ResourceManager,還有本次的 Spark Master. nodea 和 nodeb 上運(yùn)行了 HDFS 的 datanode, YARN 的 NodeManager,還有 Spark Worker.

          接下來(lái)配置每臺(tái)計(jì)算機(jī)的環(huán)境變量,以及 Spark 集群參數(shù).

          環(huán)境變量

          環(huán)境變量,提供了快捷訪(fǎng)問(wèn)可執(zhí)行文件的路徑。

          本次實(shí)驗(yàn)主要配置 Spark Home 與 Scala Home.

          SPARK_HOME=/opt/Spark/Spark3.1.1
          SCALA_HOME=/opt/Scala/Scala2.12
          export SPARK_HOME
          export SCALA_HOME
          PATH=$PATH:$PARK_HOME/bin:$SCALA_HOME/bin
          export PATH

          除了要建立相應(yīng)的文件目錄,目錄訪(fǎng)問(wèn)權(quán)限需要單獨(dú)配置。為了實(shí)驗(yàn)方便,設(shè)置這兩目錄為 HadoopAdmin 所有,并且給目錄加上 777 的權(quán)限。

          chown -R hadoopadmin /opt/Spark
          chown -R hadoopadmin /opt/Scala
          chmod a+rwx /opt/Spark
          chmod a+rwx /opt/Scala

          但事實(shí)證明,Scala 的 RPM 包,不能指定目錄安裝,而只能隨遇而安:

          [hadoopadmin@namenode Scala]$ rpm -qpi scala-2.12.13.rpm
          Name        : scala
          Version     : 2.12.13
          Release     : 1
          Architecture: noarch
          Install Date: (not installed)
          Group       : Development/Languages
          Size        : 634532234
          License     : BSD
          Signature   : (none)
          Source RPM  : scala-2.12.13-1.src.rpm
          Build Date  : Tue 12 Jan 2021 10:16:51 AM EST
          Build Host  : travis-job-efec1d00-ea82-450c-8151-6fc45a7e286d
          Relocations : (not relocatable)
          Vendor      : lightbend
          URL         : http://github.com/scala/scala
          Summary     : Scala Programming Language Distribution
          Description :
          Have the best of both worlds. Construct elegant class hierarchies for maximum code reuse and extensibility, implement their behavior using higher-order functions. Or anything in-between.

          通過(guò) rpm -qpi 查詢(xún)得知,scala 的 relocations 屬性為 not relocatable, 即,無(wú)法指定安裝路徑。

          但安裝之后,通過(guò)

          whereis scala

          可以找到 scala 的安裝目錄。

          [hadoopadmin@namenode Scala]$ whereis scala
          scala: /usr/bin/scala /usr/share/scala /usr/share/man/man1/scala.1.gz

          所以,SCALA_HOME 指定 /usr/share/scala.

          最終,在 .bashrc 文件中,加入這些環(huán)境變量:

          SPARK_HOME=/opt/Spark/Spark3.1.1
          SCALA_HOME=/usr/share/scala

          PATH=$PATH:$SPARK_HOME/bin:$SCALA_HOME/bin

          集群參數(shù)配置

          1. 為了可以和 Hive 做交互,把 Hive-site.xml 復(fù)制到 $SPARK_HOME/conf 下面。
          2. 配置 spark-env.sh. 在 $SPARK_HOME/conf 下可能沒(méi)有 spark-env.sh 文件,需要將 spark-env.sh.template 復(fù)制一份成 spark-env.sh:
          --spark-env.sh

          JAVA_HOME=/opt/java/jdk8
          HADOOP_HOME=/opt/Hadoop/hadoop-3.2.2
          HADOOP_CONF_DIR=/opt/Hadoop/hadoop-3.2.2/etc/hadoop
          YARN_CONF_DIR=/opt/Hadoop/hadoop-3.2.2/etc/hadoop
          SPARK_CONF_DIR=/opt/Spark/Spark3.1.1/conf
          SPARK_MASTER_HOST=namenode

          1. 將 nodea/nodeb 加入到 $SPARK_HOME/workers 文件中。
          -- workers
          nodea
          nodeb

          1. 通過(guò) scp 把 /opt/Spark 復(fù)制到 nodea 和 nodeb 上
          scp -rv $SPARK_HOME hadoopadmin@nodea:$SPARK_HOME
          scp -rv $SPARK_HOME hadoopadmin@nodeb:$SPARK_HOME



          A

          Spark 集群?jiǎn)?dòng)與關(guān)閉


          啟動(dòng)

          Spark 集群的啟動(dòng),有兩種方式。一種是可以把 Master 與 worker 分開(kāi)來(lái)處理。即,先啟動(dòng) master 節(jié)點(diǎn),worker 節(jié)點(diǎn)之后一臺(tái)一臺(tái)手工啟動(dòng);第二種是,用一個(gè)啟動(dòng)文件,將 master 和 worker 同時(shí)啟動(dòng)。

          本次實(shí)驗(yàn),選擇第二種方法:

          $SPARK_HOME/sbin/start-all.sh

          因?yàn)?spark 與 hadoop 裝在了同一臺(tái)機(jī)器上,而 hadoop 的簡(jiǎn)易啟動(dòng)命令文件也是 start-all.sh , 所以這里指定了下全目錄文件名。

          關(guān)閉

          同上,stop-all.sh 和 hadoop 的關(guān)閉腳本同名,指定下全目錄文件名:

          $SPARK_HOME/sbin/stop-all.sh

          監(jiān)控頁(yè)

          可通過(guò)本地8080端口,訪(fǎng)問(wèn) Spark 集群的監(jiān)控頁(yè)。

          image.png



          A

          Spark Shell 應(yīng)用


          最簡(jiǎn)單的使用 Spark 集群的方式,就是利用集成的 spark-shell 腳本

          [hadoopadmin@namenode bin]$ spark-shell
          2021-04-11 07:56:21,588 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
          Setting default log level to "WARN".
          To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
          Spark context Web UI available at http://namenode:4040
          Spark context available as 'sc' (master = local[*], app id = local-1618142189348).
          Spark session available as 'spark'.
          Welcome to
                ____              __
               / __/__  ___ _____/ /__
              _\ \/ _ \/ _ `/ __/  '_/
             /___/ .__/\_,_/_/ /_/\_\   version 3.1.1
                /_/
                   
          Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_281)
          Type in expressions to have them evaluated.
          Type :help for more information.

          scala> 

          現(xiàn)在做一個(gè)例子,把 frank_lin.txt 這個(gè)原本在 HDFS 上的文本文件,復(fù)制到 HDFS 的 /user/hadoopadmin 目錄下(如果沒(méi)有 hadoopadmin 目錄就建一個(gè))

          hdfs dfs -cp /user/hadoop/wordcounter/input/franklin.txt /user/hadoopadmin/

          接著用 spark 來(lái)統(tǒng)計(jì),改文件共有多少行:

          scala> val textfile_franklin=spark.read.textFile("franklin.txt")
          textfile_franklin: org.apache.spark.sql.Dataset[String] = [value: string]

          scala> textfile_franklin.count()
          res1: Long = 2773

          注意,這里的 spark 默認(rèn)用戶(hù)路徑是 HDFS 上的 /user/hadoopadmin.

          scala> val textfile = spark.read.textFile("README.md")
          org.apache.spark.sql.AnalysisException: Path does not exist: hdfs://namenode:9000/user/hadoopadmin/README.md

          通過(guò)訪(fǎng)問(wèn) namenode:4040 可看到應(yīng)用的執(zhí)行情況

          image.png


          A

          小結(jié)


          有了之前搭建 Hadoop/Hive 的經(jīng)歷后,Spark 的搭建是非常順利的。配置都是同一個(gè)套路,指定 Master/Workder, 改變環(huán)境變量,復(fù)制到其他節(jié)點(diǎn)。

          這大概也是多動(dòng)手的好處,無(wú)形中訓(xùn)練了腦力肌肉。讓一切變得有規(guī)律可尋。

          三部曲,要是這么快,這么容易就結(jié)束,那肯定不是《有關(guān)SQL》的風(fēng)格。接下來(lái),有意思的事情,才剛剛上場(chǎng)!



          --完--





          往期精彩:


          本號(hào)精華合集(三)

          外企一道 SQL 面試題,刷掉 494 名候選人

          我在面試數(shù)據(jù)庫(kù)工程師候選人時(shí),常問(wèn)的一些題

          零基礎(chǔ) SQL 數(shù)據(jù)庫(kù)小白,從入門(mén)到精通的學(xué)習(xí)路線(xiàn)與書(shū)單








          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色网页免费看 | 先锋影音av成人版 | 国内一级视频 | 大香蕉大香蕉视频影院 | 成人性爱视频免费网站 |