spark最近出了2.0版本,其安裝和使用也發生了些許的變化。筆者的環境為:centos7.
該文章主要是講述了在centos7上搭建spark2.0的具體操作和spark的簡單使用,希望可以給剛剛接觸spark的朋友一些幫助。
按照慣例,文章的最後列出了一些參考文獻,以示感謝。下面我們就來看一下spark的安裝。
spark的依賴環境比較多,需要Java JDK、hadoop的支援。我們就分步驟依次介紹各個依賴的安裝和配置。spark2.0運作在Java 7+, Python 2.6+/3.4+ , R3.1+平台下,如果是使用scala語言,需要 Scala2.11.x版本,hadoop最好安裝2.6以上版本。 由于spark本身是用scala實作的,是以建議使用scala,本文中的示例也大多是scala語言。當然spark也可以很好地支援java\python\R語言。
spark的使用有這麼幾類:spark shell互動,spark SQL和DataFrames,spark streaming, 獨立應用程式。
注意,spark的使用部分,不特殊說明,都是以hadoop使用者登入操作的。
1.安裝Java環境
我的centos7安裝系統的時候選擇了安裝openJDK的環境,是以可以直接使用。但這裡還是列出jdk的安裝步驟供大家參考。java環境可以使用Oracle的jdk或者openjdk. 下面的步驟是openjdk的安裝示範。
a.首先檢查是否安裝了jdk, 和版本是否符合要求。
java -version
若安裝了java環境,但是版本太低,則先解除安裝原版本,再安裝新版本。
解除安裝可參考以下步驟
yum -y remove java-1.7.0-openjdk*
yum -y remove tzdata-java.noarch
b.若未安裝或已解除安裝,安裝新版本
檢視可用版本
yum -y list java*
以安裝1.7版本為例
yum -y install java-1.7.0-openjdk*
c.配置環境變量
vi /etc/profile
在檔案的最後添加
JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
PATH=$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
其中JAVA_HOME是你的java安裝路徑。其中PATH這個參數是以冒号:來分割不同的項的,後面我們hadoop和spark的環境變量配置也要修改這個參數。
儲存退出後,還需要執行
source /etc/profile
該檔案才可以生效。檢查環境變量是否配置生效
echo $PATH
2.安裝hadoop
如果你安裝 CentOS 的時候不是用的 “hadoop” 使用者,那麼需要增加一個名為 hadoop 的使用者。
a.以root身份登入,添加”hadoop”使用者
useradd -m hadoop -s /bin/bash
密碼輸入兩次,筆者使用”hadoop”作為密碼,比較好記憶。這樣,一個使用者名為hadoop, 密碼也是hadoop的使用者就添加好了。
b.可為 hadoop 使用者增加管理者權限,友善部署,避免一些對新手來說比較棘手的權限問題
visudo
找到 root ALL=(ALL) ALL 這行(應該在第98行,可以先按一下鍵盤上的 ESC 鍵,然後輸入 :98 (按一下冒号,接着輸入98,再按Enter鍵),可以直接跳到第98行 ),然後在這行下面增加一行内容:hadoop ALL=(ALL) ALL (當中的間隔為tab),如下圖所示:
c.centos預設安裝ssh. 如果你的作業系統中沒有ssh, 可以自行安裝,最後的參考資料中有ssh的安裝和配置。
d.安裝hadoop
去官網下載下傳hadoop的安裝包,下載下傳時請下載下傳 hadoop-2.x.y.tar.gz 這個格式的檔案,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼,需要進行編譯才可使用。
下載下傳時強烈建議也下載下傳 hadoop-2.x.y.tar.gz.mds 這個檔案,該檔案包含了檢驗值可用于檢查 hadoop-2.x.y.tar.gz 的完整性,否則若檔案發生了損壞或下載下傳不完整,Hadoop 将無法正常運作。
校驗一下下載下傳檔案是否完整
cat hadoop-2.6.4.tar.gz.mds | grep 'MD5' # 列出md5檢驗值
md5sum hadoop-2.6.4.tar.gz | tr "a-z" "A-Z"
我們選擇将 Hadoop 安裝至 /usr/local/ 中:
sudo tar -zxf hadoop-2.6.4.tar.gz -C /usr/local # 解壓到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop # 将檔案夾名改為hadoop
sudo chown -R hadoop:hadoop ./hadoop
Hadoop 解壓後即可使用。輸入如下指令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本資訊:
cd /usr/local/hadoop
./bin/hadoop version
Hadoop 預設模式為非分布式模式,無需進行其他配置即可運作。非分布式即單 Java 程序,友善進行調試。
現在我們可以執行例子來感受下 Hadoop 的運作。Hadoop 附帶了豐富的例子(運作 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我們選擇運作 grep 例子,我們将 input 檔案夾中的所有檔案作為輸入,篩選當中符合正規表達式 dfs[a-z.]+ 的單詞并統計出現的次數,最後輸出結果到 output 檔案夾中
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
e.添加配置檔案
cd ~
cd sparkapp/
vi simple.bat
檔案添加下面内容
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0"
*注意,這裡的scalaVersion和spark-core後面的版本号都要換成你自己的。
這兩個版本号,在啟動spark的時候有顯示。如下圖*
至此為止,檢查一下工程目錄結構
cd ~
cd sparkapp
find .
f.使用sbt打包scala程式
cd ~
cd sparkapp/
sbt package
第一次打包時間很長,需要下載下傳各種依賴包,是以請耐心等待。生成的jar包位置在~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
g.送出編譯後的程式
cd ~
cd /usr/local/spark
./bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
輸出資訊較多,可使用grep過濾結果
.bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "Lines with a:"
1
到此為止,本文就結束了,關于文章中沒有介紹的spark SQL和DataFrames,大家有興趣的可以到下面列出的參考文獻中查找。
https://blog.csdn.net/ouyangyanlan/article/details/52355350