首頁 > 軟體

sparklyr包--實現R與Spark介面

2020-06-16 17:37:05

1.sparklyr包簡介

  Rstudio公司發布的sparklyr包具有以下幾個功能:

  • 實現R與Spark的連線;
  • sparklyr包提供了一個完整的dplyr後端,可篩選並聚合Spark資料集,接著在R中實現分析與視覺化;
  • 利用Spark的MLlib機器學習庫在R中實現分散式機器學習演算法;
  • 可以建立一個擴充套件,用於呼叫Spark API,並為Spark的所有包集提供了一個介面。

2.RStudio Server安裝sparklyr包

  Linux版本:Ubuntu 16.04 LTS 64bit

  R版本:R3.3.1 64bit

  RStudio Server版本:rstudio-server-0.99.902 64bit

  通過devtools包實現sparklyr包的安裝:

install.packages("devtools")
devtools::install_github("rstudio/sparklyr")

注意:此處安裝devtools時Ubuntu中可能會出現安裝不上的錯誤:

看錯誤資訊可以知道找不到openssl,需要安裝libssl-dev(Ubuntu):

$ sudo apt-get install libssl-dev

然後安裝sparklyr因為網速等的原因可能需要進行多次安裝,多嘗試幾次就可以了。如果安裝中斷,很可能安裝包被lock,可以使用下面的方案解決(以reader包為例):

install.packages(“readr”,dependencies=TRUE,INSTALL_opts = c(‘—no-lock’))

3.在本地安裝Spark 1.6.1和Hadoop 2.6

library(sparklyr)
spark_install(version = "1.6.1")

  

此處預設的是使用Spark 1.6.1和Hadoop 2.6

如果用的是RStudio IDE,還需下載最新的預覽版IDE。它包含有實現與Spark互動的若干增強功能(詳情參考RStudio IDE)。

https://www.rstudio.com/products/rstudio/download/preview/

http://spark.rstudio.com/index.html#rstudio-ide

4.部署Spark

4.1本地部署

安裝好sparklyr包後,我們連線原生的Spark,也可以連線遠端的Spark叢集。這裡,使用spark_connect函數來連線原生的Spark:

library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "local")

返回的Spark連線(sc)為Spark叢集提供了一個遠端的dplyr資料來源。

4.2叢集部署

使用sparklyr連線遠端Spark叢集Cluster Deployment,需要直接將R session部署在叢集節點中的一個machine或者靠近叢集處(根據網路效能)。在此種情況下,R不是直接在叢集上執行,所以,必須要保證叢集中的每個machine都有一個spark version並且具有相同的設定。

在叢集節點中的一個machine或者靠近叢集處執行R最直截了當的方式可以通過遠端SSH對談或Rstudio server。在叢集節點中使用的spark version必須已經在節點中部署,並且spark的路徑需要新增到環境變數SPARK_HOME中,因此,在嘗試一個連線之前必須保證SPARK_HOME環境變數在server中正確定義。通常是在Renviron.site組態檔中完成的。範例:

SPARK_HOME=/opt/spark/spark-1.6.1-bin-hadoop2.6

然後,通過spark_connect函數和主節點的地址連線,例如:

library(sparklyr)
sc <- spark_connect(master = "spark://local:7077")

如果在EC2上使用Spark EC2部署指令碼,可以從/root/spark-ec2/cluster-url讀取master,例如:

library(sparklyr)
cluster_url <- system('cat /root/spark-ec2/cluster-url', intern=TRUE)
sc <- spark_connect(master = cluster_url)

連線工具

可以通過spark-web函數觀看Spark web UI,通過spark_log函數觀看Spark log(紀錄檔)

spark_web(sc)
spark_log(sc)

使用spark_disconnect函數斷開spark的連線:

spark_disconnect(sc)

5.設定configuration

本部分描述sparklyr包和潛在的spark叢集的行為的設定的各個選項。同時介紹建立多個組態檔(比如開發、測試、生產)。

5.1組態檔Config Files

通過spark_connect函數的config引數可以指定Spark連線的設定。通過使用config=spark_config()建立預設的設定。下面的程式碼代表了預設的行為:

spark_connect(master = "local", config = spark_config())

通過config=spark_config()函數可以從本地當前工作目錄(如果不是位於工作目在父目錄錄)的路徑中讀取組態檔config.yml中的資料。這個檔案不是必需的,只是用來提供重寫預設行為overriding default behavior。還可以指定另一個組態檔名稱 和/或 位置。config.yml檔案依次處理使用設定包(using the config package),設定包可以支援多命名組態檔。

5.2Package選項

有許多可用的選項設定sparklyr包的行為:

選項

描述

sparklyr.defaultPackages

自動包括在對談中的Spark packages (defaults to com.databricks:spark-csv_2.11:1.3.0” and “com.amazonaws:aws-java-sdk-pom:1.10.34”)

sparklyr.cores.local

當在本地執行時使用的核心數量 (defaults to parallel::detectCores)

sparklyr.shell.*

傳遞給spark-shell的命令列引數 (see the Spark documentation for details on supported options)

舉個例子:下面的組態檔設定了本地核心數為4並分配給Spark驅動2G記憶體:

default:
sparklyr.cores.local: 4
sparklyr.shell.driver-memory: 4GB

註:多檔案的default使用將在下面描述。

5.3Spark選項

可以使用config.yml指定任意的spark設定屬性:

選項

描述

spark.*

任意設定屬性 (通過建立一個SparkConf包含指定的屬性應用)。spark的設定文件可以檢視可用的屬性。http://spark.apache.org/docs/latest/configuration.html

 

spark.sql.*

Spark SQL的任意設定屬性 (applied using SET)。Spark SQL Programming Guide的設定文件可以檢視可用的屬性。http://spark.apache.org/docs/latest/sql-programming-guide.html

 

舉個例子:下面的組態檔為spark設定了一個當前的工作目錄,並指定當揉資料(joins or aggregations)時使用的分割區數量為100。

default:
spark.local.dir: /tmp/spark-scratch
spark.sql.shuffle.partitions: 100

5.4多檔案設定

config包允許為不同環境定義多命名組態檔(例如:default, test, production)。所有額環境預設繼承default環境,並且可以相互繼承。

舉個例子:您可能想使用一個不同的資料集來開發和測試或可能希望使用只適用於生產叢集上執行的自定義Spark設定屬性。config.yml表示如下

default:
dataset: "observations-dev.parquet"
sample-size: 10000

production:
spark.memory.fraction: 0.9
spark.rdd.compress: true
dataset: "observations.parquet"
sample-size: null

還可以使用這個特點來為不同的環境指定不同的Spark master:

default:
spark.master: "local"

production:
spark.master: "spark://local:7077"

使用上面的設定,可以在使用spark_connect()的時候徹底省略master引數:

sc <- spark_connect()

注意:當前活動設定通過R_CONFIG_ACTIVE環境變數的值決定,可以通過config package documentation詳細的了解。https://github.com/rstudio/config

6.預覽版RStudio Server

Rstudio server提供了一個基於web的IDE遠端的R對談介面,使其spark叢集可以供前端使用。本部分介紹一些對於RStudio Server非常有用的額外的設定選項。RStudio的最新預覽版整合支援Spark和sparklyr包。包含以下工具https://www.rstudio.com/products/rstudio/download/preview/:

  • 建立和管理Spark連線
  • 瀏覽表格資料和Spark DataFrames的所有列
  • 可以預覽Spark DataFrames的前1000行

6.1連線選項

一旦成功安裝完sparklyr包,我們可以在IDE中可以看到一個新的Spark視窗。該視窗包含一個New Connection對話方塊,用於連線本地或者遠端的Spark。如下所示:

 

可以使用rstudio.spark.connections選項設定哪一個連線,預設的可能是local和cluster連線,可以選擇其中之一作為提供的連線,或者使用一個特殊的Spark master URL。一些常用的連線組合的選擇包括:

Value

描述

c("local", "cluster")

Default 提供了本地和cluster spark instance的連線

"local"

提供了本地spark instance連線

"cluster"

提供了cluster spark instance連線

"spark://local:7077"

提供了特殊cluster的連線

c("spark://local:7077", "cluster")

提供了特殊cluster和其他cluster的連線

這些選項應該在Rprofile.site中設定,例如:

options(rstudio.spark.connections = "spark://local:7077")

6.2Spark安裝

如果是在本地模式(相對於叢集模式),需要預裝spark version(s)並共用給使用該伺服器的所有使用者。你可以安裝spark version(s)在一個共用的目錄中(e.g. /opt/spark),然後標明它作為spark安裝目錄。

options(spark.install.dir = "/opt/spark")

7.Sparklyr包的使用

7.1連線spark

安裝好sparklyr包之後,我們連線原生的Spark,也可以連線遠端的Spark叢集。這裡,我們使用spark_connect函數來連線原生的Spark:

library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "local")

返回的Spark連線(sc)為Spark叢集提供了一個遠端的dplyr資料來源。
出現下面的問題:

要求在Ubuntu中安裝Java:

方法一:

Windows中下載

從Windows中複製到Ubuntu中:

開啟新的控制台,建立目標資料夾:

root@love:/home/wangchao# cd /usr/lib
root@love:/usr/lib# sudo mkdir java

在原來的控制台中輸入如下命令,安裝JDK:

$ sudo tar zvxf jdk-7u67-linux-x64.gz -C /usr/lib/java
# 該命令的意思是解壓jdk-7u67-linux-x64.gz檔案,並把它安裝到/usr/lib/java目錄下,也就是前面建立的資料夾。注意命令中的-C是大寫的字母C。

開啟系統組態檔.bashrc

$ sudo gedit .bashrc

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2016-07/133583p2.htm


IT145.com E-mail:sddin#qq.com