本篇介紹如何手動架設 RHadoop 計算伺服器,並使用 RHadoop 相關套件進行巨量資料分析。
RHadoop 是由 Revolution Analytics 所發展的 R 套件集,可讓 R 使用者更方便的使用 Hadoop 分析巨量資料,適用於 Cloudera、Hortonworks 等 Hadoop 發行版,以下是基本的 RHadoop 計算環境架設流程、MapReduce 用法與簡單的範例程式碼。
基本 Hadoop 環境架設
請參考 Ubuntu Linux 架設 Hadoop 單節點測試主機教學,將基本的 Hadoop 計算環境架設好。
使用前先測試一下 Hadoop 環境是否正常,先啟動 NameNode 與 DataNode daemon:
start-dfs.sh
檢查 daemon 是否有正常啟動:
jps
3370 Jps 3068 DataNode 3261 SecondaryNameNode
測試執行範例程式:
hadoop jar \ $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \ pi 10 100
[略] Job Finished in 5.478 seconds Estimated value of Pi is 3.14800000000000000000
測試完 Hadoop 環境之後,停止 NameNode 與 DataNode daemon:
stop-dfs.sh
安裝 R
在 Ubuntu Linux 中使用 apt 安裝 R 套件:
sudo apt install r-base-core
安裝 RHadoop
RHadoop 是一套 R 語言的工具組,可讓使用者結合 R 與 Hadoop 進行巨量資料的分析,其包含五個 R 套件。
套件 | 說明 |
---|---|
rhdfs |
提供 HDFS 檔案系統的存取功能,R 程式設計者可以透過此套件瀏覽、讀取、寫入或修改 HDFS 中的檔案。 |
rhbase |
提供 HBASE 資料庫的存取功能,R 程式設計者可以透過此套件瀏覽、讀取、寫入或修改 HBASE 中的資料表。 |
plyrmr |
提供類似 plyr 與 reshape2 的資料處理功能,使用 Hadoop 的 MapReduce 架構整理資料,但是在使用上比較類似 plyr ,沒有太多複雜的 MapReduce 細節。 |
rmr2 |
在 Hadoop 架構下,以 MapReduce 對巨量資料進行各種統計分析。 |
ravro |
提供本機與 HDFS 上 avro 檔案格式的存取功能。 |
安裝 rmr2
Hadoop 的每一個節點都要安裝 rmr2
,首先安裝必要的 R 套件:
install.packages(c("Rcpp", "RJSONIO", "digest", "functional", "reshape2", "stringr", "plyr", "caTools"))
從 GitHub 上下載 rmr2
套件檔,直接安裝:
install.packages("rmr2_3.3.1.tar.gz")
設定 rmr2
所需的 Linux shell 環境變數:
export HADOOP_CMD=$HADOOP_HOME/bin/hadoop export HADOOP_STREAMING=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar
安裝 plyrmr
Hadoop 的每一個節點都要安裝 plyrmr
,先裝一些必要的套件:
install.packages(c("dplyr", "reshape2", "plyr", "R.methodsS3", "Hmisc", "functional", "digest", "memoise", "lazyeval", "rjson"))
從 GitHub 上下載 plyrmr
套件檔,直接安裝:
install.packages("plyrmr_0.6.0.tar.gz")
設定 plyrmr
所需的 Linux shell 環境變數:
export HADOOP_CMD=$HADOOP_HOME/bin/hadoop export HADOOP_STREAMING=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar
安裝 rhdfs
安裝 rJava
:
install.packages("rJava")
從 GitHub 上下載 plyrmr
套件檔,直接安裝:
install.packages("rhdfs_1.0.8.tar.gz")
設定 rhdfs
所需的 Linux shell 環境變數:
export HADOOP_CMD=$HADOOP_HOME/bin/hadoop
安裝 rhbase
從 Apache Thrift 官方網站上下載原始碼,自行編譯安裝 Thrift。
從 GitHub 上下載 rhbase
套件檔,直接安裝:
install.packages("rhbase_1.2.1.tar.gz")
安裝 ravro
安裝必要的 R 套件:
install.packages(c("bit64", "rjson", "Rcpp"))
從 GitHub 上下載 ravro
套件檔,直接安裝:
install.packages("ravro_1.0.4.tar.gz")
測試 RHadoop
首先啟動 NameNode 與 DataNode daemon:
start-dfs.sh
進入 R 環境:
R
載入並測試 rmr2
套件:
library(rmr2) from.dfs(to.dfs(1:100)) from.dfs(mapreduce(to.dfs(1:100)))
載入並測試 rhdfs
套件:
library(rhdfs) hdfs.init() hdfs.ls("/")
載入並測試 rhbase
套件:
library(rhbase) hb.init() hb.list.tables()
問題與解決方法
我在測試 rhdfs
時,會出現這樣的問題:
17/04/24 14:37:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
StackOverflow 上有一些解決方法,我是在 .bashrc
中加入一行設定來解決:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
繼續閱讀: 12