真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spark入門指南-創(chuàng)新互聯(lián)

  一、初識(shí)Spark和Hadoop

10年的蘭考網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蘭考建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“蘭考網(wǎng)站設(shè)計(jì)”,“蘭考網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

    Apache Spark 是一個(gè)新興的大數(shù)據(jù)處理通用引擎,提供了分布式的內(nèi)存抽象。Spark 正如其名,大的特點(diǎn)就是快(Lightning-fast),可比 Hadoop MapReduce 的處理速度快 100 倍。

    Hadoop實(shí)質(zhì)上更多是一個(gè)分布式數(shù)據(jù)基礎(chǔ)設(shè)施: 它將巨大的數(shù)據(jù)集分派到一個(gè)由普通計(jì)算機(jī)組成的集群中的多個(gè)節(jié)點(diǎn)進(jìn)行存儲(chǔ),意味著你不需要購買和維護(hù)昂貴的服務(wù)器硬件。

同時(shí),Hadoop還會(huì)索引和跟蹤這些數(shù)據(jù),讓大數(shù)據(jù)處理和分析效率達(dá)到前所未有的高度。Spark則是一個(gè)專門用來對(duì)那些分布式存儲(chǔ)的大數(shù)據(jù)進(jìn)行處理的工具,它并不會(huì)進(jìn)行分布式數(shù)據(jù)的存儲(chǔ)。

Hadoop除了提供為大家所共識(shí)的HDFS分布式數(shù)據(jù)存儲(chǔ)功能之外,還提供了叫做MapReduce的數(shù)據(jù)處理功能。所以我們完全可以拋開Spark,使用Hadoop自身的MapReduce來完成數(shù)據(jù)的處理。

當(dāng)然,Spark也不是非要依附在Hadoop身上才能生存。但它沒有提供文件管理系統(tǒng),所以,它必須和其他的分布式文件系統(tǒng)進(jìn)行集成才能運(yùn)作。我們可以選擇Hadoop的HDFS,也可以選擇其他的基于云的數(shù)據(jù)系統(tǒng)平臺(tái)。但Spark默認(rèn)來說還是被用在Hadoop上面的,畢竟大家都認(rèn)為它們的結(jié)合是最好的。

二、安裝Spark


以下都是在Ubuntu 16.04 系統(tǒng)上的操作


1.安裝Java JDK并配置好環(huán)境變量(這部分就不詳細(xì)說了)

2.安裝Hadoop


    2.1 創(chuàng)建Hadoop用戶:

打開終端,輸入命令:

sudo useradd -m hadoop -s /bin/bash

添加hadoop用戶,并設(shè)置/bin/bash作為shell

    2.2 設(shè)置Hadoop用戶的登錄密碼:

sudo passwd hadoop

然后根據(jù)系統(tǒng)提示輸入兩次自己的密碼,再給hadoop用戶添加管理員權(quán)限:

sudo adduser hadoop sudo

    2.3 將當(dāng)前的用戶切換到剛剛創(chuàng)建的hadoop用戶(屏幕右上角有個(gè)齒輪,點(diǎn)進(jìn)去就看到)

    2.4 更新系統(tǒng)的apt。打開終端,輸入命令:

sudo apt-get update

   2.5 安裝ssh、配置ssh無密碼登錄

集群、單節(jié)點(diǎn)模式都需要遇到SSH登錄。Ubuntu默認(rèn)安裝了SSH Client,但需要自己安裝SSH Server:

sudo apt-get install openssh-server

安裝后,直接登錄本機(jī)

ssh localhost

SSH首次登錄需要確認(rèn),根據(jù)提示輸入:yes,然后再按提示輸入剛剛設(shè)置的hadoop的密碼,就登錄了。

    2.6 下載Hadoop

下載地址:http://mirror.bit.edu.cn/apache/hadoop/common/


選擇“stable”文件夾,點(diǎn)擊下載“hadoop-2.x.y.tar.gz”文件。默認(rèn)會(huì)下載到“下載”目錄中,


Spark入門指南

在該文件夾下打開終端,將該文件解壓到/usr/local文件中,執(zhí)行命令:


sudo tar -zxf ~/hadoop-2.9.0.tar.gz
cd /usr/local/
sudo mv ./hadoop-2.9.0/ ./hadoop    #將文件名修改為hadoop
sudo chown -R hadoop ./hadoop    #修改文件權(quán)限

Hadoop的文件夾解壓之后就可以直接使用,檢查一下Hadoop是否可以正常使用,如果正常則顯示Hadoop的版本信息

cd /usr/local/hadoop
./bin/hadoop version

Spark入門指南


這里就初步完成了Hadoop的安裝,還有很多配置什么的用到的時(shí)候在寫,比如偽分布式系統(tǒng)配置。

3.安裝Spark

 3.1 下載Spark:http://spark.apache.org/downloads.html


Spark入門指南

第一項(xiàng)我選擇的版本是最新當(dāng)前的最新版本:2.3.1,第二項(xiàng)選擇“Pre-build with user-provided Apache Hadoop”,然后點(diǎn)擊第三項(xiàng)后面的下載“spark-2.3.1-bin-without-hadoop-tgz”。

 3.2 解壓文件

這一步與Hadoop的解壓是一樣的,我們都把它解壓到/usr/local路徑下:

$ sudo tar -zxf ~/下載/spark-2.3.1-bin-without-hadoop.tgz -C /usr/local/
$ cd /usr/local
$ sudo mv ./spark-2.3.1-bin-without-hadoop/ ./spark
$ sudo chown -R hadoop:hadoop ./spark

  3.3 設(shè)置環(huán)境變量

執(zhí)行如下命令拷貝一個(gè)配置文件:

$ cd /usr/local/spark
$ ./conf/spark-env.sh.template ./conf/spark-env.sh

然后編輯spark-env.sh:

$ vim ./conf/spark-env.sh

打開之后在這個(gè)文件的最后一行加上下面的內(nèi)容:

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

    然后保存退出Vim,就可以使用Spark了。

  三、Spark入門示例



    在文件路徑“/usr/local/spark/examples/src/main”中,我們可以找到spark自帶的一些實(shí)例,如下圖可以看到Spark支持Scala、Python、Java、R語言等。

Spark入門指南

    1.Spark最簡單的方式就是使用交互式命令行提示符。打開PySpark終端,在命令行中打出pyspark:

   ~$ pyspark

   2.PySpark將會(huì)自動(dòng)使用本地Spark配置創(chuàng)建一個(gè)SparkContext。我們可以通過sc變量來訪問它,來創(chuàng)建第一個(gè)RDD:

>>>text=sc.textFile(“file\\\usr\local\spark\exp\test1.txt")
>>>print text

Spark入門指南

    3.轉(zhuǎn)換一下這個(gè)RDD,來進(jìn)行分布式計(jì)算的“hello world”:“字?jǐn)?shù)統(tǒng)計(jì)”

Spark入門指南


   首先導(dǎo)入了add操作符,它是個(gè)命名函數(shù),可以作為加法的閉包來使用。我們稍后再使用這個(gè)函數(shù)。首先我們要做的是把文本拆分為單詞。我們創(chuàng)建了一個(gè)tokenize函數(shù),參數(shù)是文本片段,返回根據(jù)空格拆分的單詞列表。然后我們通過給flatMap操作符傳遞tokenize閉包對(duì)textRDD進(jìn)行變換創(chuàng)建了一個(gè)wordsRDD。你會(huì)發(fā)現(xiàn),words是個(gè)PythonRDD,但是執(zhí)行本應(yīng)該立即進(jìn)行。顯然,我們還沒有把整個(gè)數(shù)據(jù)集拆分為單詞列表。

    4.將每個(gè)單詞映射到一個(gè)鍵值對(duì),其中鍵是單詞,值是1,然后使用reducer計(jì)算每個(gè)鍵的1總數(shù)

>>> wc = words.map(lambda x: (x,1))
>>> print wc.toDebugString()

Spark入門指南

   我使用了一個(gè)匿名函數(shù)(用了Python中的lambda關(guān)鍵字)而不是命名函數(shù)。這行代碼將會(huì)把lambda映射到每個(gè)單詞。因此,每個(gè)x都是一個(gè)單詞,每個(gè)單詞都會(huì)被匿名閉包轉(zhuǎn)換為元組(word, 1)。為了查看轉(zhuǎn)換關(guān)系,我們使用toDebugString方法來查看PipelinedRDD是怎么被轉(zhuǎn)換的??梢允褂胷educeByKey動(dòng)作進(jìn)行字?jǐn)?shù)統(tǒng)計(jì),然后把統(tǒng)計(jì)結(jié)果寫到磁盤。

    5.使用reduceByKey動(dòng)作進(jìn)行字?jǐn)?shù)統(tǒng)計(jì),然后把統(tǒng)計(jì)結(jié)果寫到磁盤

>>> counts = wc.reduceByKey(add)
>>> counts.saveAsTextFile("wc")

Spark入門指南


  一旦我們最終調(diào)用了saveAsTextFile動(dòng)作,這個(gè)分布式作業(yè)就開始執(zhí)行了,在作業(yè)“跨集群地”(或者你本機(jī)的很多進(jìn)程)運(yùn)行時(shí),你應(yīng)該可以看到很多INFO語句。如果退出解釋器,你可以看到當(dāng)前工作目錄下有個(gè)“wc”目錄。每個(gè)part文件都代表你本機(jī)上的進(jìn)程計(jì)算得到的被保持到磁盤上的最終RDD。

Spark入門指南


    四、Spark數(shù)據(jù)形式

4.1 彈性分布式數(shù)據(jù)集(RDD)

  Spark 的主要抽象是分布式的元素集合(distributed collection of items),稱為RDD(Resilient Distributed Dataset,彈性分布式數(shù)據(jù)集),它可被分發(fā)到集群各個(gè)節(jié)點(diǎn)上,進(jìn)行并行操作。RDDs 可以通過 Hadoop InputFormats 創(chuàng)建(如 HDFS),或者從其他 RDDs 轉(zhuǎn)化而來。

獲得RDD的三種方式:

Parallelize:將一個(gè)存在的集合,變成一個(gè)RDD,這種方式試用于學(xué)習(xí)spark和做一些spark的測(cè)試

 >>>sc.parallelize(['cat','apple','bat’])

MakeRDD:只有scala版本才有此函數(shù),用法與parallelize類似

textFile:從外部存儲(chǔ)中讀取數(shù)據(jù)來創(chuàng)建 RDD

>>>sc.textFile(“file\\\usr\local\spark\README.md”)

   RDD的兩個(gè)特性:不可變;分布式。

    RDD支持兩種操作;Transformation(轉(zhuǎn)化操作:返回值還是RDD)如map(),filter()等。這種操作是lazy(惰性)的,即從一個(gè)RDD轉(zhuǎn)換生成另一個(gè)RDD的操作不是馬上執(zhí)行,只是記錄下來,只有等到有Action操作是才會(huì)真正啟動(dòng)計(jì)算,將生成的新RDD寫到內(nèi)存或hdfs里,不會(huì)對(duì)原有的RDD的值進(jìn)行改變;Action(行動(dòng)操作:返回值不是RDD)會(huì)實(shí)際觸發(fā)Spark計(jì)算,對(duì)RDD計(jì)算出一個(gè)結(jié)果,并把結(jié)果返回到內(nèi)存或hdfs中,如count(),first()等。

4.2 RDD的緩存策略

  Spark最為強(qiáng)大的功能之一便是能夠把數(shù)據(jù)緩存在集群的內(nèi)存里。這通過調(diào)用RDD的cache函數(shù)來實(shí)現(xiàn):rddFromTextFile.cache,

  調(diào)用一個(gè)RDD的cache函數(shù)將會(huì)告訴Spark將這個(gè)RDD緩存在內(nèi)存中。在RDD首次調(diào)用一個(gè)執(zhí)行操作時(shí),這個(gè)操作對(duì)應(yīng)的計(jì)算會(huì)立即執(zhí)行,數(shù)據(jù)會(huì)從數(shù)據(jù)源里讀出并保存到內(nèi)存。因此,首次調(diào)用cache函數(shù)所需要的時(shí)間會(huì)部分取決于Spark從輸入源讀取數(shù)據(jù)所需要的時(shí)間。但是,當(dāng)下一次訪問該數(shù)據(jù)集的時(shí)候,數(shù)據(jù)可以直接從內(nèi)存中讀出從而減少低效的I/O操作,加快計(jì)算。多數(shù)情況下,這會(huì)取得數(shù)倍的速度提升。

Spark的另一個(gè)核心功能是能創(chuàng)建兩種特殊類型的變量:廣播變量和累加器。廣播變量(broadcast variable)為只讀變量,它由運(yùn)行SparkContext的驅(qū)動(dòng)程序創(chuàng)建后發(fā)送給會(huì)參與計(jì)算的節(jié)點(diǎn)。對(duì)那些需要讓各工作節(jié)點(diǎn)高效地訪問相同數(shù)據(jù)的應(yīng)用場景,比如機(jī)器學(xué)習(xí),這非常有用。Spark下創(chuàng)建廣播變量只需在SparkContext上調(diào)用一個(gè)方法即可:

>>> broadcastAList = sc.broadcast(list(["a", "b", "c", "d", "e"]))


另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享題目:Spark入門指南-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/dsghes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部