歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> sparklyr包--實現R與Spark接口

sparklyr包--實現R與Spark接口

日期:2017/3/6 9:27:39   编辑:學習Linux

sparklyr包--實現R與Spark接口


sparklyr包--實現R與Spark接口


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中可能會出現安裝不上的錯誤:

sparklyr包--實現R與Spark接口

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

$ sudo apt-get install libssl-dev

sparklyr包--實現R與Spark接口

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

sparklyr包--實現R與Spark接口

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")

sparklyr包--實現R與Spark接口  

此處默認的是使用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

sparklyr包--實現R與Spark接口

spark.sql.*

Spark SQL的任意配置屬性 (applied using SET)。Spark SQL Programming Guide的配置文檔可以查看可用的屬性。http://spark.apache.org/docs/latest/sql-programming-guide.html

sparklyr包--實現R與Spark接口

舉個例子:下面的配置文件為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。如下所示:

sparklyr包--實現R與Spark接口

sparklyr包--實現R與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數據源。
出現下面的問題:

sparklyr包--實現R與Spark接口

要求在Ubuntu中安裝Java:

方法一:

Windows中下載sparklyr包--實現R與Spark接口

從Windows中復制到Ubuntu中:

sparklyr包--實現R與Spark接口

打開新的控制台,創建目標文件夾:

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

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

http://xxxxxx/Linuxjc/1145136.html TechArticle

Copyright © Linux教程網 All Rights Reserved