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

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

RDD持久化性能測試步驟-創(chuàng)新互聯(lián)

1 前言

成都網(wǎng)站建設公司更懂你!創(chuàng)新互聯(lián)只做搜索引擎喜歡的網(wǎng)站!成都網(wǎng)站制作前臺采用搜索引擎認可的DIV+CSS架構,全站HTML靜態(tài),HTML5+CSS3網(wǎng)站,提供:網(wǎng)站建設,微信開發(fā),小程序制作,商城系統(tǒng)網(wǎng)站開發(fā),手機APP定制開發(fā),域名與空間,服務器租售,網(wǎng)站代托管運營,微信公眾號代托管運營。

Java/Scala代碼通過設置開始時間和結束時間的方式來進行統(tǒng)計測試,其實不夠準確,最好的方式就是把Spark應用部署到集群中,通過觀察Spark UI的統(tǒng)計信息來獲取時間,這樣會更準備,尤其是希望觀察RDD緩存時對性能帶來的提升。

為了更好查看Spark UI提供的信息,通過操作方便簡單,下面會使用Spark Shell的方式來做測試,這樣一來,就可以輕松使用Spark Shelllocalhost:8080來查看應用程序的執(zhí)行信息。

2 數(shù)據(jù)準備

測試是基于大數(shù)據(jù)計算的經(jīng)典helloword案例—wordcount程序來進行,所以首先應該準備一定量的數(shù)據(jù),這里我準備的數(shù)據(jù)如下:

yeyonghao@yeyonghaodeMacBook-Pro:~$ ls -lh wordcount_text.txt
-rw-r--r--  1 yeyonghao  staff  127M 10  1 14:24 wordcount_text.txt

數(shù)據(jù)量不用太大,不然就需要等待很長時間,同時在進行RDD緩存時,也有可能會出現(xiàn)沒有足夠內容來緩存RDD的問題;數(shù)據(jù)量也不要太小,太小的話,時間差別不大,很難觀察出效果。

3 測試

3.1 啟動Spark Shell

如下:

yeyonghao@yeyonghaodeMacBook-Pro:~$ sudo spark-shell --driver-memory 2G
Password:
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's repl log4j profile: org/apache/spark/log4j-defaults-repl.properties
To adjust logging level use sc.setLogLevel("INFO")
Welcome to
    ____        __
   / __/__  ___ _____/ /__
   _\ \/ _ \/ _ `/ __/  '_/
  /___/ .__/\_,_/_/ /_/\_\  version 1.6.2
    /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc.
18/10/01 14:39:36 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
18/10/01 14:39:36 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
18/10/01 14:39:38 WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
18/10/01 14:39:38 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException
18/10/01 14:39:39 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
18/10/01 14:39:39 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)
SQL context available as sqlContext.

3.2 加載文本數(shù)據(jù)并緩存RDD

先加載數(shù)據(jù),并設置transformation,如下:

scala> val linesRDD = sc.textFile("/Users/yeyonghao/wordcount_text.txt")
linesRDD: org.apache.spark.rdd.RDD[String] = /Users/yeyonghao/wordcount_text.txt MapPartitionsRDD[1] at textFile at :27

scala> val retRDD = linesRDD.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
retRDD: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at :29

緩存RDD

scala> retRDD.cache()
res0: retRDD.type = ShuffledRDD[4] at reduceByKey at :29

3.3 初次觸發(fā)action操作并觀察結果

注意上面的操作并不會觸發(fā)Spark的計算操作,只有執(zhí)行action算子時才會觸發(fā),如下:

scala> retRDD.count()
res1: Long = 1388678

此時打開Spark UI,觀察執(zhí)行結果:

Jobs界面:
RDD持久化性能測試步驟

Stages界面:
RDD持久化性能測試步驟

Storage界面:
RDD持久化性能測試步驟

分析:顯然可以看到DAG圖中,reduceByKey中有個綠色的點,說明該RDD已經(jīng)被顯示地緩存下來,這樣在查看Storage界面時,也可以看到該緩存的RDD,另外需要說明的是,在執(zhí)行該次操作中,所有的步驟都是需要執(zhí)行的,然后產(chǎn)生了retRDD之后才將其緩存下來,這樣下一次,如果再需要使用到retRDD時,就可以不用執(zhí)行前面的操作了,可以節(jié)省很多時間,當然,不可否認地是,在本次操作中,緩存RDD時也是需要使用一定的時間的。

3.4 再次執(zhí)行action操作

scala> retRDD.count()
res1: Long = 1388678

Jobs界面:
RDD持久化性能測試步驟

Stages界面:
RDD持久化性能測試步驟

Storage界面:
RDD持久化性能測試步驟

分析,通過上面的觀察也可以知道,retRDD前面的操作全部都沒有執(zhí)行,它是直接利用緩存的RDD來執(zhí)行后面的action操作,所以時間上有大幅度地提升。

3.5 不執(zhí)行RDD緩存,多次執(zhí)行action操作(重要)

重新打開Spark-shell,執(zhí)行下面的操作:

scala> val linesRDD = sc.textFile("/Users/yeyonghao/wordcount_text.txt")
linesRDD: org.apache.spark.rdd.RDD[String] = /Users/yeyonghao/wordcount_text.txt MapPartitionsRDD[1] at textFile at :27

scala> val retRDD = linesRDD.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
retRDD: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at :29

scala> retRDD.count()
res0: Long = 1388678

scala> retRDD.count()
res1: Long = 1388678

scala> retRDD.count()
res2: Long = 1388678

Jos界面:
RDD持久化性能測試步驟

所有jobstages界面:
RDD持久化性能測試步驟

storage界面:
RDD持久化性能測試步驟

再查看后面兩個job其中一個的詳細stages界面:
RDD持久化性能測試步驟

可以看到這與前面執(zhí)行RDD緩存操作之后是一樣的,是因為在linestage中,最后一個RDD即便不顯示執(zhí)行RDD緩存的操作,那么它也會保存在內存當中,當然,比如這里的retRDD再執(zhí)行了一次transformation操作,那么當執(zhí)行action操作之后`retRDD就不會被緩存下來了,經(jīng)過迭代式計算之后,它轉化為下一個RDD;然而如果是顯式緩存了retRDD的操作,在storage界面可以看到它,不管它后面再執(zhí)行怎么樣的操作,retRDD還是會存在內存當中,這就是主動緩存RDD跟非主動緩存RDD的大區(qū)別。

4 說明

有很多細節(jié)的東西這里是沒有辦法展示的,這需要進一步去實踐操作,如果可以,閱讀源碼也是十分不錯的選擇,當然這里也提供了十分不錯的驗證方式,通過這樣一個操作的過程,相信會比在抽象概念上去理解RDD持久化會有更大的提升。

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


當前標題:RDD持久化性能測試步驟-創(chuàng)新互聯(lián)
URL標題:http://weahome.cn/article/ehooi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部