Site icon Soul & Shell Blog

Apache Spark 教學 - 用 Machine Learning 辨識鳶尾花

spark-hadoop2受到大數據的加持,最近 Machine Learning 非常火熱,著名的開源專案 Apache Hadoop 火紅了好幾年,最近倒是殺出了 Spark 這個大數據運算框架,效能上號稱可以輕鬆幹掉 Hadoop,個人沒有深入研究,所以也無法深入分析。

Apache Spark 最吸引人的地方就是內建了許多 Machine Learning Library (MLlib),一些基本的演算法與分類器可以不用自己寫囉。要進入 Machine Learning 算是降低了很多門檻,另外一個好處就是免費,不然 Matlab 也是貴鬆鬆。

安裝 Spark

今天要介紹的內容很簡單,就是只是把玩一下 Spark Machine Learning(或者被玩!)。首先我們先安裝 Spark,可以到官方網站下載最新的檔案,Package Type 可以選 Pre-built 的版本,這樣就不需要自行編譯了,安裝起來會省下不少時間。

今天測試的環境是 Ubuntu,Spark 下載後可以直接解壓縮,如下:

wget http://ftp.tc.edu.tw/pub/Apache/spark/spark-1.4.0/spark-1.4.0-bin-hadoop2.6.tgz

tar -zxvf spark-1.4.0-bin-hadoop2.6.tgz

接著把解壓縮後的檔案複製到 /usr/lib,如下:

mv spark-1.4.0-bin-hadoop2.6 /usr/lib

設定一下 PATH 環境變數,這樣才可以直接使用 Spark 指令,如下:

echo "export PATH=$PATH:/usr/lib/spark-1.4.0-bin-hadoop2.6/bin" >> /etc/bash.bashrc

安裝 Java Runtime Environment

由於 Spark 需要透過 Java 來執行,理所當然我們也應該安裝 JRE 環境,並且確認 JAVA_HOME 環境變數已經正確設定。Ubuntu 透過  apt 裝起來的 Java 是 OpenJDK,安裝 Java 我還是比較習慣安裝 Sun-JRE (現在是 Oracle),大部份的套件跑起來會比較沒有問題。Java 可以到這裡下載,下載後一樣解壓縮移動到 /usr/lib 即可。

tar -zxvf jre1.8.0_45.gz

mv jre1.8.0_45 /usr/lib

設定一下 PATH 與 JAVA_HOME 環境變數

echo "export JAVA_HOME=/usr/lib/jre1.8.0_45" >> /etc/bash.bashrc

echo "export PATH=$PATH:/usr/lib/jre1.8.0_45/bin" >> /etc/bash.bashrc

設定好之後記得重新登入好載入新的環境變數。可以執行 spark-shell 看看能不能正確啟動,如下:

Spark Machine Learning

Spark 已經內建了許多 Machine Learning 函式庫 (稱為 MLlib),像是一些分群演算法與分類器。接下來要測試的實驗為辨識「鳶尾花」,學界有一組鳶尾花 (學名 Iris) CSV 樣本資料,常用來作為演算法的訓練與辨識,其實我不知道「鳶尾花」是什麼鬼?只知道這組資料描述花的四組特徵,可以用來進行演算法的訓練與預測。開始之前,我們要先安裝 Python Num 函式庫,如下:

sudo apt install python-numpy

將運算搬到資料端,比起將資料搬過來算來得有效率,這也是雲端運算的基本概念。Spark MLlib 在計算時當然也可以透過 HDFS, HBase 來抓取資料,很容易實現分散式運算。很不幸我們今天只有一個運算單位,資料就直接放在檔案系統即可,先下載 iris.csv 檔案儲存到磁碟中。訓練與預測的程式在 GitHub 這裡可以下載,用 Python 寫的,本人第一次寫 Python,寫得很爛自己都看不懂,所以就不介紹程式碼囉,下載 iris.py 後透過以下命令來執行:

spark-submit iris.py

執行畫面如下,程式會隨機抽選十組資料進行預測,跑了幾次正確率都在 50% 以上,整個過程蠻容易的,先介紹到這裡,下次再見。

Exit mobile version