1. 系統拓撲圖
在日常業務分析中,R是非常常用的分析工具,而當數據量較大時,用R語言需要需用更多的時間來完成訓練模型,spark作為大規模數據處理框架,采用內存計算,可以短時間內完成大量的數據的處理及計算模型,但缺點是不能圖形展示,R語言的sparkly則提供了R語言和Spark的接口,實現了在數據量大的情況下,應用Spark的快速數據分析和處理能力結合R語言的圖形化展示功能,方便業務分析,模型訓練。
但是要想使多人同時共享R和Spark,還需要其他的相關組件,下圖展示了所有相關的組件及應用:
2. 安裝方法
- 2.1 Rstudio-Server簡介及安裝方法
RStudio是R語言開發中的利器,是一個IDE集成環境。RStudio Server版本提供了web的功能,可以安裝遠程計算機,通過web進行訪問,支持多用戶.
安裝完成后,如果順利可登錄 http://ip地址:8787 訪問Rstudio Web客戶端界面,如果遇到問題,請查看博主下一篇關於常見問題的解決方案
- 2.2 sparklyr包的簡介及安裝方法
sparkly包是由Rstudio公司發布的,用於接口Spark大數據平台的,實現R與Spark的連接,sparklyr包提供了一個完整的dplyr后端,可篩選並聚合Spark數據集,接着在R中實現分析與可視化,利用Spark的MLlib機器學習庫在R中實現分布式機器學習算法,同時可以創建一個擴展,用於調用Spark API,並為Spark的所有包集提供了一個接口。
sparkyr的安裝方法
- 2.3 shiny Server簡介及安裝方法
在R界面安裝shiny包
install.packages('shiny', repos=‘https://cran.rstudio.com/')
wget https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.5.1.834-rh5-x86_64.rpm
sudo yum install --nogpgcheck shiny-server-1.5.1.834-rh5-x86_64.rpm
啟動與關閉 shiny-server
start shiny-server # 啟動
stop shiny-server # 停止
restart shiny-server # 重啟
status shiny-server #查看狀態
reload shiny-server #不中斷服務的前提下 更新加載配置項
登陸web界面查看運行情況
http://10.211.55.16:3838/ 默認端口時3838,可以在配置文件(/etc/shiny-server/shiny-server.conf)中修改
3. 使用說明
- 3.1 spark的連接方法
<本地模式>
如果只是在本機Rstudio使用,可以在本地下載spark,並調用本地local模式
library(sparklyr)
spark_install(version = "1.6.2")
sc <- spark_connect(master = “local”, version = ‘1.6.2’)
<yarn模式>
- 簡單的配置方法:
library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "spark://10.211.55.18:7077",spark_home = "/home/hive/spark/")
- 詳細的配置方法:
library(sparklyr)
Sys.setenv(SPARK_HOME = "/home/ctsats/spark-1.6.1-bin-hadoop2.6")
Sys.setenv(HADOOP_CONF_DIR = '/etc/hadoop/conf.cloudera.hdfs')
Sys.setenv(YARN_CONF_DIR = '/etc/hadoop/conf.cloudera.yarn')
config <- spark_config()
config$spark.executor.instances <- 4
config$spark.executor.cores <- 4
config$spark.executor.memory <- “4G"
sc <- spark_connect(master="yarn-client", config=config)
- spark連接方法與參數解析
spark_connect(master, spark_home = Sys.getenv("SPARK_HOME"),
method = c("shell", "livy", "test"), app_name = “sparklyr",
version = NULL, hadoop_version = NULL, config = spark_config(),
extensions = sparklyr::registered_extensions())
spark_connection_is_open(sc)
spark_disconnect(sc, ...)
spark_disconnect_all()
參數 |
參數說明 |
master |
連接Spark 集群使用 url作為參數 sc <- spark_connect(master = "spark://10.211.55.18:7077",spark_home = "/home/hive/spark/") 連接本地(使用spark_install)安裝spark使用 ”local”模式 sc <- spark_connect(master = “local”, version = ‘1.6.2’) |
spark_home |
設置spark的安裝路徑,這里如果指定安裝spark_home,就不要指定version這個參數,因為version參數指定,會使用本地通過spark_install安裝的spark路徑,造成錯誤 |
method |
這個參數用來設置連接spark的方法,目前只實現了shell模式 |
app_name |
應用的名字,用在Spark集群中顯示 |
hadoop_version |
只用於local模式 |
config |
連接Spark的通用設置,詳見spark_config參數 |
extensions |
可用於連接的擴展包,默認全部都可以( sparklyr::register_extension) |
sc |
一個spark鏈接 |
其他參數 |
這里暫時未用 |
spark_config(file = "config.yml", use_default = TRUE)
參數 |
參數說明 |
file |
配置文件的名字 |
use_default |
默認使用spark_home構建時默認參數 |
spark_install(version = NULL, hadoop_version = NULL, reset = TRUE,
logging = "INFO", verbose = interactive())
spark_uninstall(version, hadoop_version)
spark_install_dir()
spark_install_tar(tarfile)
spark_installed_versions()
spark_available_versions()
參數 |
參數說明 |
version |
安裝spark的版本,可以用 spark_available_versions 查看支持的版本 |
hadoop_version |
安裝hadoop的版本,可以用 spark_available_versions 查看支持的版本 |
reset |
嘗試恢復默認設置 |
logging |
設置日志等級,支持選項:"WARN", "INFO" |
tarfile |
安裝本地包 |
其他具體參考如下鏈接:
http://spark.rstudio.com/reference/index.html
sparkly主要實現dplyr,ML,Extensions三個接口,下面主要介紹各個接口的功能:
- 3.2 dply的使用說明
dplyr是一個R接口,用於處理R內部或外部數據,dplyr使R用戶操作數據更便捷,連續,高效。應用dplyr操作Spark DataFrames,你可以:
• 選擇,過濾,聚合數據(Select, filter, and aggregate)
• 使用窗口功能(Use window functions ),e.g. for sampling
• 表連接(Perform joins on DataFrames)
• 采集數據(Collect data from Spark into R)
在dplyr中,狀態可以通過管道被連接(定義方法%>%)
- 3.3 ML的使用說明
sparklyr提供了一個Spark機器學習(spark.ml package)接口,與dplyr接口一樣,你可以方便的在Spark創建和訓練機器學習模型,並在R中分析應用
sparklyr 提供了三個相似的函數,用於在Spark進行機器學習
機器學習算法: Machine learning algorithms for analyzing data (ml_*)
特征提取與轉換: Feature transformers for manipulating individual features (ft_*)
操作spark DataFrame: Functions for manipulating Spark DataFrames (sdf_*)
應用Sparklyr大致用如下流程組成:
通過sparklyr dplyr接口,執行SQL查詢接口
通過 sdf_* and ft_*函數生產新的的列或分區數據集
從 ml_*方法選擇合適的機器學習算法為數據建模
驗證模型的質量(准確度),並用它對新的數據進行預測
應用R進行可視化分析並進行深度分析
-
- 3.4 Extensions的使用說明
sparklyr提供了dplyr與spark DataFrames接口,同時提供了一個R語言與spark機器學習包的接口,然而,因為Spark是一個通用集群計算系統,其他接口可通過擴展工具創建自己的R接口。
舉例1:
library(sparklyr)
# 讀textfile RDD 這里的類型為list
rdd_collect <- function(sc, file) {
spark_context(sc) %>%
invoke("textFile", file, 1L) %>%
}
a <- rdd_collect(sc, “/Users/hduser/test.txt”)
# 查看a的數據類型,我們知道spark scala中該方法生成RDD類型,但是R語言中數據類型沒有Rdd,所以這里生成list類型
class(a)
[1] "list"
其他擴展方法待大家自己擴展挖掘,方法參見:
http://spark.rstudio.com/extensions.html#introduction