歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Spark1.4.1中sparkR的編譯使用全過程

本文針對那些和我一樣,對spark還挺熟悉但對R知之甚少甚至之前沒聽過的同學,在spark引入了sparkR後才開始零基礎地開始學習使用。如果你本身對R和sparkR已經很熟悉了,就不用看了。

本文主要包含的內容:

  •  spark1.4.1編譯
  •  sparkR使用環境配置
  •  sparkR的第一個例子

spark1.4.1編譯

首先從spark官網下載spark1.4.0或者1.4.1的源碼,並解壓。 要使用sparkR,必須要先用帶有sparkR的參數的編譯命令,把sparkR編譯到spark的tar包中。命令如下:

./make-distribution.sh --tgz -Pyarn -Phive -Psparkr -DskipTests -DHadoop.version=your version

比1.4版本前的編譯命令,多了個“-Psparkr”,表示要把sparkR編譯進去。(這裡注意大小寫)

 

sparkR使用環境配置

sparkR的運行需要依賴R語言環境。

如果通過某一台客戶端向spark提交sparkR作業以及各項操作,那麼只在本客戶端機器上安裝R環境後,可以並只可以通過yarn-client方式操作。 如果在整個spark的集群上都安裝了R環境,則可以用yarn-cluster或者yarn-client方式提交。其實很好理解,driver在哪裡啟動,就需要哪裡有R環境。yarn-client模式中,driver在客戶端本地啟動,所以只需要本地有R環境;要運行yarn-cluster模式,driver就需要在spark集群的某個節點啟動,該節點是不確定的,所以需要整個spark集群有R環境。(本段是我的個人理解,並不一定正確,歡迎指正。)

R環境的安裝配置,我是用rpm包安裝的。

1. 從http://mirror.utexas.edu/epel/6/x86_64/ 下載如下這些包:

libRmath-3.2.1-1.el6.x86_64.rpm

libRmath-devel-3.2.1-1.el6.x86_64.rpm

R-core-3.2.1-1.el6.x86_64.rpm

R-core-devel-3.2.1-1.el6.x86_64.rpm

R-java-3.2.1-1.el6.x86_64.rpm

R-java-devel-3.2.1-1.el6.x86_64.rpm

R-3.2.1-1.el6.x86_64.rpm

R-devel-3.2.1-1.el6.x86_64.rpm

2. 對上述8個rpm包,依次執行 yum install ..... 注意,因為有依賴關系,要按照我上面的這個順序依次安裝。例如:

yum install libRmath-3.2.1-1.el6.x86_64.rpm

sparkR的第一個例子

現在確保你的spark集群滿足這兩個條件

1. 使用的spark是已經把sparkR編譯進來了的版本;

2. 准備操作sparkR的這台機器上有R環境。

兩種運行sparkR的方法:

1. spark-shell方式:

sparkR --master yarn-client

2. 提交作業的方法

spark-submit --master yarn-client your-r-file.R

下面的一個R文件,是我從Github上抄過來的一個例子,可惜已經找不到github上的鏈接了,只能遙遙感謝這個example的作者了。用上面兩種運行方法,可以直接拷貝到一個R文件中,並spark-submit提交;也可以啟動一個sparkR的shell客戶端,然後逐行輸入。

# Download Spark 1.4 from http://spark.apache.org/downloads.html
#
# Download the nyc flights dataset as a CSV from https://s3-us-west-2.amazonaws.com/sparkr-data/nycflights13.csv

library(SparkR)

sc <- sparkR.init(appName="SparkR-DataFrame-example")
sqlContext <- sparkRSQL.init(sc)

# Launch SparkR using
# ./bin/sparkR --packages com.databricks:spark-csv_2.10:1.0.3

# The SparkSQL context should already be created for you as sqlContext
sqlContext
# Java ref type org.apache.spark.sql.SQLContext id 1

# Load the flights CSV file using `read.df`. Note that we use the CSV reader Spark package here.
flights <- read.df(sqlContext, "./nycflights13.csv", "com.databricks.spark.csv", header="true")

# Print the first few rows
head(flights)

# Run a query to print the top 5 most frequent destinations from JFK
jfk_flights <- filter(flights, flights$origin == "JFK")

# Group the flights by destination and aggregate by the number of flights
dest_flights <- agg(group_by(jfk_flights, jfk_flights$dest), count = n(jfk_flights$dest))

# Now sort by the `count` column and print the first few rows
head(arrange(dest_flights, desc(dest_flights$count)))

##  dest count
##1  LAX 11262
##2  SFO  8204
##3  BOS  5898

# Combine the whole query into two lines using magrittr
library(magrittr)
dest_flights <- filter(flights, flights$origin == "JFK") %>% group_by(flights$dest) %>% summarize(count = n(flights$dest))
arrange(dest_flights, desc(dest_flights$count)) %>% head

Copyright © Linux教程網 All Rights Reserved