https://blog.csdn.net/uq_jin/article/details/51513307html
http://www.javashuo.com/article/p-mhorzntg-hk.htmljava
https://www.cnblogs.com/liugh/p/6624923.htmlpython
a.下載:http://spark.apache.org/downloads.htmlshell
b.安裝sparkapache
上傳文件:把下載下來的spark-2.2.3-bin-hadoop2.7.tgz上傳到/home/hadoop目錄下編程
cd /home/hadoopvim
sudo tar -zxvf spark-2.2.3-bin-hadoop2.7.tgz -C /app/centos
cd /app/spark-2.2.3-bin-hadoop2.7/安全
sudo chown -R hadoop:hadoop . # 此處的 hadoop爲用戶名網絡
c. 配置環境變量
sudo vim /etc/profile
SPARK_HOME=/app/spark-2.2.3-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
source /etc/profile
echo $PATH
/app/jdk1.8.0_121/bin:/app/jdk1.8.0_121/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/app/hadoop-2.7.2/bin:/home/hadoop/bin:/app/hadoop-2.7.2/bin:/app/spark-2.2.3-bin-hadoop2.7/bin
d. 配置spark
安裝後,須要在 ./conf/spark-env.sh 中修改 Spark 的 Classpath,執行以下命令拷貝一個配置文件:
cd /app/spark-2.2.3-bin-hadoop2.7
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
編輯 ./conf/spark-env.sh(vim ./conf/spark-env.sh) ,在最後面加上以下一行:
export SPARK_DIST_CLASSPATH=$(/app/hadoop-2.7.2/bin/hadoop classpath)
保存後,Spark 就能夠啓動了。
cp ./conf/slaves.template ./conf/slaves
編輯slaves文件,裏面的內容爲:
localhost
關閉防火牆,啓動,外網就能夠訪問
$HADOOP_HOME/sbin/start-all.sh
spark訪問網址:http://192.168.198.111:8080
在 ./examples/src/main 目錄下有一些 Spark 的示例程序,有 Scala、Java、Python、R 等語言的版本。咱們能夠先運行一個示例程序 SparkPi(即計算 π 的近似值),執行以下命令:
cd /app/spark-2.2.3-bin-hadoop2.7
./bin/run-example SparkPi
執行時會輸出很是多的運行信息,輸出結果不容易找到,能夠經過 grep 命令進行過濾(命令中的 2>&1 能夠將全部的信息都輸出到 stdout 中,不然因爲輸出日誌的性質,仍是會輸出到屏幕中):
cd /app/spark-2.2.3-bin-hadoop2.7
./bin/run-example SparkPi 2>&1 | grep "Pi is roughly"
過濾後的運行結果以下圖所示,能夠獲得 π 的 近似值 :
若是是Python 版本的 SparkPi, 則須要經過 spark-submit 運行:
./bin/spark-submit examples/src/main/python/pi.py
a.啓動spark shell
Spark shell 提供了簡單的方式來學習 API,也提供了交互的方式來分析數據。Spark Shell 支持 Scala 和 Python,本文中選擇使用 Scala 來進行介紹。
Scala 是一門現代的多範式編程語言,志在以簡練、優雅及類型安全的方式來表達經常使用編程模式。它平滑地集成了面向對象和函數語言的特性。Scala 運行於 Java 平臺(JVM,Java 虛擬機),併兼容現有的 Java 程序。
Scala 是 Spark 的主要編程語言,若是僅僅是寫 Spark 應用,並不是必定要用 Scala,用 Java、Python 都是能夠的。使用 Scala 的優點是開發效率更高,代碼更精簡,而且能夠經過 Spark Shell 進行交互式實時查詢,方便排查問題。
cd /app/spark-2.2.3-bin-hadoop2.7
./bin/spark-shell
b.spark shell使用小例子
Spark 的主要抽象是分佈式的元素集合(distributed collection of items),稱爲RDD(Resilient Distributed Dataset,彈性分佈式數據集),它可被分發到集羣各個節點上,進行並行操做。RDDs 能夠經過 Hadoop InputFormats 建立(如 HDFS),或者從其餘 RDDs 轉化而來。
咱們從 ./README 文件新建一個 RDD,代碼以下(本文出現的 Spark 交互式命令代碼中,與位於同一行的註釋內容爲該命令的說明,命令以後的註釋內容表示交互式輸出結果):
val textFile = sc.textFile("file:///app/spark-2.2.3-bin-hadoop2.7/README.md")
代碼中經過 「file://」 前綴指定讀取本地文件。Spark shell 默認是讀取 HDFS 中的文件,須要先上傳文件到 HDFS 中,不然會報錯。
RDDs 支持兩種類型的操做
transformations: 轉換, 從現有數據集建立一個新的數據集
actions: 在數據集上運行計算後返回值
下面咱們先來演示 count() 和 first() 操做(actions):
textFile.count() // RDD 中的 item 數量,對於文本文件,就是總行數
textFile.first() //RDD 中的第一個 item,對於文本文件,就是第一行內容
接着演示 transformation,經過 filter transformation 來返回一個新的 RDD,代碼以下:
val linesWithSpark = textFile.filter(line => line.contains("Spark")) // 篩選出包含 Spark 的行
linesWithSpark.count() // 統計行數
transformation 和action能夠用鏈式操做的方式結合使用,使代碼更爲簡潔:
textFile.filter(line => line.contains("Spark")).count() // 統計包含 Spark 的行數
a.配置spark和hadoop環境變量
cd ~
sudo vim /etc/profile
找到PATH參數,在最後添加spark和hadoop的環境變量,具體到bin便可。注意每條之間使用冒號隔開。以下圖
修改完成,保存退出,執行
source /ect/profile
文件生效。一樣可使用echo $PATH 來查看環境變量是否添加成功。
b.安裝sbt
SBT(Simple Build Tool)即簡單構造工具,它是用scala寫的,具備強大的依賴管理功能,全部任務的建立都支持Scala,可連續執行命令。能夠在工程的上下文裏啓動REPL。
通常來講,使用 Scala 編寫的程序須要使用 sbt 進行編譯打包,相應的,Java 程序使用 Maven 編譯打包,而 Python 程序經過 spark-submit 直接提交。可是scala也可使用maven來打包,不過配置起來較爲複雜。這裏就再也不贅述了。
到官網下載安裝包(http://www.scala-sbt.org/)。安裝到/usr/local/sbt文件夾中
sudo mkdir /usr/local/sbt
sudo chown -R hadoop /usr/local/sbt # 此處的 hadoop 爲你的用戶名
cd /usr/local/sbt
接着在 /usr/local/sbt 中建立 sbt 腳本(vim ./sbt),添加以下內容:
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
注意這裏的最後一行的 dirname 0,它是被倒引號括起來的,不是單引號。被倒引號括起來的東西表示要執行的命令。dirname0,它是被倒引號括起來的,不是單引號。被倒引號括起來的東西表示要執行的命令。dirname0 只能用在腳本中,在命令行中是無效的,它的意思是去當前腳本所在位置的路徑。
這裏寫圖片描述
很明顯。這裏你要檢查/usr/local/sbt 夾下sbt-launch.jar這個文件是否存在。由於筆者和網上衆多教程都提到了,由於網絡的緣由,sbt下載的時候,這個依賴包有可能缺失。若是沒有,請自行下載(http://pan.baidu.com/s/1gfHO7Ub)
這裏寫圖片描述
c.構建scala工程目錄
sbt打包scala是有固定工程目錄結構的。
cd ~
mkdir ./sparkapp # 建立應用程序根目錄
mkdir -p ./sparkapp/src/main/scala # 建立所需的文件夾結構
d.編寫獨立程序
這裏咱們借用官網上的一個小的demo.
cd ~
cd sparkapp/src/main/scala
vi SimpleApp.scala
文件內容爲程序主體
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
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://www.cnblogs.com/dion-90/articles/9058500.html
1.http://spark.apache.org/docs/latest/building-spark.html
2.http://spark.apache.org/docs/latest/quick-start.html
3.http://spark.apache.org/docs/latest/programming-guide.html
4.http://www.importnew.com/4311.html
5.http://www.scala-sbt.org/
6.http://blog.csdn.net/czmchen/article/details/41047187
7.http://blog.csdn.net/zwhfyy/article/details/8349788
8.http://jingyan.baidu.com/article/948f59242c231fd80ff5f9ec.html
9.http://dblab.xmu.edu.cn/blog/install-hadoop/
10.http://dblab.xmu.edu.cn/blog/spark-quick-start-guide/
11.http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/
https://blog.csdn.net/ouyangyanlan/article/details/52355350
關閉防火牆
臨時關閉:sudo service iptables stop
永久關閉:sudo chkconfig iptables off
Ssh
ssh-keygen –t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 authorized_keys
ssh localhost
啓動hdfs:
$HADOOP_HOME/sbin/start-all.sh
Hadoop訪問網址:http://192.168.198.111:50070
$HADOOP_HOME/sbin/start-all.sh
spark訪問網址:http://192.168.198.111:8080
中止:
$HADOOP_HOME/sbin/stop-all.sh
$SPARK_HOME/sbin/stop-all.sh