Cloudera Quickstart VM
題外話,中視《飢餓遊戲》好看! |
然後我選用Docker VM,因為設定超級無敵簡單的就一頁而已,指令也沒幾行,連我都搞得定簡直太棒!不過得先安裝Docker就是了。設定步驟很簡單,以下也不過是把網頁上的Instruction翻成中文而已就醬。
在安裝好Docker之後,就打開terminal,用docker pull指令開始下載Cloudera QuickstartVM。
$ docker pull cloudera/quickstart
整包東西大概4GB左右,要稍微等一下。
然後鍵入指令,裡就會發現有一個image叫做cloudera/quickstart耶!(訝異個屁)
$ docker images
EPOSITORY TAG IMAGE ID CREATED SIZE
cloudera/quickstart latest 4239cd2958c6 10 months ago 6.34 GB
記下對應的IMAGE ID,以上圖為例也就是4239cd2958c6,用來啟動Docker VM囉!
$ docker run \ --hostname=quickstart.cloudera \ --privileged=true \ -t -i -p 8888 \ [IMAGE ID] /usr/bin/docker-quickstart
然後那個[IMAGE ID]記得要換一下。然後基本上經過一段時間的等在就可以成功進入VM的根目錄了,我啟動的時候hue沒有成功,但是在Docker VM開始run之後重複幾次restart神奇的事情就發生了,像這樣:
[root@quickstart /]# service hue restart Shutting down hue: Starting hue: [ OK ]
但如果不是很在意hue的話也可以
看到Hue web UI就是心曠神怡而已 |
然後注意,如果這時候關掉terminal的話,所有資料都會消失,如果不想資料消失的話,請在剛剛的啟動加上-p選項或者用ctrl+p -> ctrl+q關掉terminal,這樣VM就會繼續運行。如果要重新接上,請用docker ps找到對應的conatiner id
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
56703ef28dc3 4239cd2958c6 "/usr/bin/docker-q..." 2 hours ago
然後docker attach
$ docker attach [CONTAINER ID]
$ sudo docker exec -i -t [CONTAINER ID] /bin/bash
千篇一律的Word count problem
$ docker cp word_count.txt [CONTAINER ID]:/word_count.txt
然後進入docker VM,把這個剛剛丟過來的檔案推到HDFS上。
[root@quickstart /]# hdfs dfs -mkdir temp
[root@quickstart /]# hdfs dfs -put word_count.txt temp/word_count.txt
[root@quickstart /]# spark-shell
之後就開始跑罐頭程式
scala> val file = sc.textFile("temp/word_count.txt")
file: org.apache.spark.rdd.RDD[String] = temp/word_count.txt MapPartitionsRDD[1] at textFile at :27
scala> val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at :29
scala> counts.collect().foreach(println)
(Groovy..,1)
(found,1)
(Check,1)...
scala> counts.saveAsTextFile("temp/output")
寫資料路徑的時候要稍微小心一點,其實不一定像網路上的demo一樣寫完整的路徑,像這樣。
scala> val file = sc.textFile("hdfs://quickstart.cloudera:8020/user/root/temp/word_count.txt")
然後看一下HDFS看看有沒有存成功
[root@quickstart /]# hdfs dfs -ls temp/output
Found 3 items
-rw-r--r-- 1 root supergroup 0 2017-02-25 19:56 temp/output/_SUCCESS
-rw-r--r-- 1 root supergroup 93 2017-02-25 19:56 temp/output/part-00000
-rw-r--r-- 1 root supergroup 127 2017-02-25 19:56 temp/output/part-00001