1. 程式人生 > >Spark歷險記之編譯和遠端任務提交

Spark歷險記之編譯和遠端任務提交

Spark簡介

Spark是加州大學伯克利分校AMP實驗室(Algorithms, Machines, and People Lab)開發通用記憶體平行計算框架。Spark在2013年6月進入Apache成為孵化專案,8個月後成為Apache頂級專案,速度之快足見過人之處,Spark以其先進的設計理念,迅速成為社群的熱門專案,圍繞著Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等元件,也就是BDAS(伯克利資料分析棧),這些元件逐漸形成大資料處理一站式解決平臺。從各方面報道來看Spark抱負並非池魚,而是希望替代Hadoop在大資料中的地位,成為大資料處理的主流標準,不過Spark還沒有太多大專案的檢驗,離這個目標還有很大路要走。

Spark使用Scala語言進行實現,它是一種面向物件、函數語言程式設計語言,能夠像操作本地集合物件一樣輕鬆地操作分散式資料集(Scala 提供一個稱為 Actor 的並行模型,其中Actor通過它的收件箱來發送和接收非同步資訊而不是共享資料,該方式被稱為:Shared Nothing 模型)。在Spark官網上介紹,它具有執行速度快、易用性好、通用性強和隨處執行等特點。



環境介紹

序號 應用 說明
1 CDH Hadoop2.6 如果想跑在hadoop上,則需要安裝
2 JDK7 底層依賴
3 Scala2.11.7 底層依賴
4 Maven3.3.3 構建編譯打包
5 Ant1.9.5 構建編譯打包
6 Spark1.4.0 主角
7 Intillj IDEA 開發IDE
8 SBT scala-spark專屬打包構建工具
9 Centos6或Centos7 叢集執行的Linux系統


這裡Hadoop已經安裝完畢,並且能正常工作,Spark可以執行在Standalone模式上,所以假如你沒有Hadoop環境,當然也是可以使用的。 

1,下載scala : 
wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz?_ga=1.103717955.215870088.1434449855 


2, 安裝scala , 解壓到某個目錄,並加入環境變數 
export SCALA_HOME=/ROOT/server/scala 
export PATH=$PATH:$SCALA_HOME/bin 

3,下載spark,這裡推薦下載spark原始碼,自己編譯所需對應的hadoop版本,雖然spark官網也提供了二進位制的包! 
http://spark.apache.org/downloads.html 

4,編譯spark 
這裡需要注意,預設的spark編譯,使用的是scala2.10的版本,一定要確保你所有使用的scala在大版本2.10.x範圍內一致,否則在某些情況下可能會出現莫名其妙的問題。 
我這裡用的是spark1.4.0的版本,所以只能用scala2.11.x的版本,這就需要重新編譯spark了,另一個原因也需要和對應的haodop版本編譯對應。 

編譯步驟 
(1)將下載好的spark原始碼解壓到某個目錄下 
(2)進入原始碼目錄,分別執行如下命令 

設定使用scala那個版本編譯 
dev/change-version-to-2.11.sh 
maven打包,指定hadoop版本和scala版本 
mvn -Pyarn -Phadoop-2.6 -Dscala-2.11 -DskipTests clean package 
大概半小時候可編譯成功 






5,安裝spark 
請參考散仙以前的文章:http://qindongliang.iteye.com/blog/2224797 

6,spark測試的幾個命令: 

Java程式碼

  1. standlone模式

  2. bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://Hadoop-1-231:7077 examples/target/spark-examples_2.11-1.4.0.jar 100

  3. yarn-cluster模式cluster

  4. bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster examples/target/spark-examples_2.11

    -1.4.0.jar 100

  5. yarn-client模式cluster

  6. bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client examples/target/spark-examples_2.11-1.4.0.jar 100



7,遠端任務提交

Spark叢集一般都會部署在Linux上,而我們開發一般都會在windows上,那麼我們想除錯Spark程式,應該怎麼做?

大多數的情況下,你都需要把你的程式打包成一個jar,然後上傳到Linux上,然後在執行測試,這樣非常麻煩,你頻繁改程式碼
就意味著,你得不斷的打包,上傳,打包,上傳,這跟hadoop的除錯是一樣的。

更簡潔的方式,就是直接在編譯器(這裡推薦Intellj IDEA)裡,開發,然後打包,直接在IDEA裡以程式設計方式提交spark任務,這樣在開發期間相對就比較很高效了。

如何打包構建一個spark應用的程式 ?
(1)安裝使用maven 下載地址 https://maven.apache.org/
(2)安裝使用sbt 下載地址 http://www.scala-sbt.org/

這裡推薦用sbt,專門針對scala專案的進行構建打包的

好吧,也許你需要一個demo來幫助你理解?

在IDEA中,建立一個Scala的SBT專案:

然後在build.sbt檔案中,加入如下依賴:

Java程式碼

  1. name := "spark2117"

  2. version := "1.0"

  3. scalaVersion := "2.11.7"

  4. libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.6.0"

  5. libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.4.0"

  6. libraryDependencies += "javax.servlet" % "javax.servlet-api" % "3.0.1"


一段簡單的程式碼:




然後直接執行就能直接在windows上提交任務到Linux上的spark叢集了

IDEA的控制檯裡會列印計算結果:




在Spark的8080監控頁面顯示如下:






8,遇到的問題:
IDEA裡警告日誌顯示:

Java程式碼

  1. 15/08/04 19:33:09 WARN ReliableDeliverySupervisor: Association with remote system [akka.tcp://[email protected]:7077] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].



Spark叢集的Master機器的master的log日誌顯示:

Java程式碼

  1. java.io.InvalidClassException: scala.reflect.ClassTag$$anon$1;

  2. local class incompatible: stream classdesc serialVersionUID = -4937928798201944954,

  3. local class serialVersionUID = -8102093212602380348



伺服器上log是準確的,它告訴我們有客戶端和服務端的序列化版本不一致,意思就是說,你的scala或者是hadoop的版本等跟伺服器上的可能不一致,所以安裝時務必要確定所有的軟體版本號一致。

這個問題,我在stackoverflow上提問了2天,都沒人知道,最後各種瘋狂的找資料才發現就是軟體版本不一致導致的,真是大意失荊州了,解鈴還須繫鈴人!



最後歡迎大家掃碼關注微信公眾號:我是攻城師(woshigcs),我們一起學習,進步和交流!(woshigcs) 
本公眾號的內容是有關搜尋和大資料技術和網際網路等方面內容的分享,也是一個溫馨的技術互動交流的小家園,有什麼問題隨時都可以留言,歡迎大家來訪! 

相關推薦

Spark歷險記編譯遠端任務提交

Spark簡介 Spark是加州大學伯克利分校AMP實驗室(Algorithms, Machines, and People Lab)開發通用記憶體平行計算框架。Spark在2013年6月進入Apache成為孵化專案,8個月後成為Apache頂級專案,速度之快足見過人之處,Spark以其先進的設計理念,

openjdk7編譯debug

編譯編譯下載源代碼openjdk的源碼可以通過hg方式下載。  也可以從此處下載:openjdk源碼安裝引導JDK因為JDK中有很多代碼是Java自身實現的,所以還需要一個已經安裝在本機上可用的JDK,叫做“Bootstrap JDK”。我所選用的Bootstarp JDK是JDK1.6.0_45。  jav

C編譯鏈接(十八)

C語言 編譯 靜態鏈接 動態鏈接 我們平時所做的編譯工作其實是由編譯器來完成的,那麽編譯器都是由哪幾部分構成的呢?包括四大部分:預處理器、編譯器、匯編器以及鏈接器組成。我們來看看一個由 file.c 文件是怎樣得到 file.o 文件的,如下 a> 預編譯:

Spark MLlib aggregatetreeAggregate從原理到應用

數據量 hash oom 向上 gre require 圖片 iterator reac 在閱讀spark mllib源碼的時候,發現一個出鏡率很高的函數——aggregate和treeAggregate,比如matrix.columnSimilarities()中。為了

基於Spark2.0搭建Hive on Spark環境(Mysql本地遠端兩種情況)

Hive的出現可以讓那些精通SQL技能、但是不熟悉MapReduce 、程式設計能力較弱與不擅長Java語言的使用者能夠在HDFS大規模資料集上很方便地利用SQL 語言查詢、彙總、分析資料,畢竟精通SQL語言的人要比精通Java語言的多得多。Hive適合處理離線非實時資料。h

Spark-MLlib分類迴歸演算法

分類 邏輯迴歸 邏輯迴歸是預測分類響應的常用方法。廣義線性模型的一個特例是預測結果的概率。在spark.ml邏輯迴歸中,可以使用二項Logistic迴歸來預測二元結果,或者可以使用多項Logistic迴歸來預測多類結果。使用該family 引數在這兩種演算法之間進行選擇,

《深入理解SparkRDDDataFrame的相互轉換

package com.lyzx.day18 import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.s

深入理解預編譯編譯,彙編,連結的過程——編譯使用(連結)庫——物件靜態庫

當你完成了程式碼開發,想把這個程式碼給別人用,但是又不希望別人看到原始碼,就要給別人一個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。 或者過程相反,你從別人那裡拿到一個庫和標頭檔案來使用。 那麼如何編譯生成一個庫給他人,如何使用從他人那裡拿到的庫呢? 範例1:我們想把Li

spark基礎基於yarn兩種提交模式分析

一 介紹 基於YARN的提交模式,總共有2種:一種是基於YARN的yarn-cluster模式;一種是基於YARN的yarn-client模式。 需要將提交應用程式的spark-submit的指令碼

Spark Core】TaskScheduler原始碼與任務提交原理淺析2

引言 上一節《TaskScheduler原始碼與任務提交原理淺析1》介紹了TaskScheduler的建立過程,在這一節中,我將承接《Stage生成和Stage原始碼淺析》中的submitMissingTasks函式繼續介紹task的建立和分發工作。 DAG

spark mllib分類迴歸

Problem Type Supported Methods 二分類: 線性SVM(inear SVMs,), 羅輯迴歸(logistic regression), 決策樹(decision trees),隨機森林(random forests),

spark基礎RDDDataFrame的轉換方式

一 通過定義Case Class,使用反射推斷Schema 定義Case Class,在RDD的轉換過程中使用Case Class可以隱式轉換成SchemaRDD,然後再註冊成表,然後就可以利用sql

Spark 系列(八)—— Spark SQL DataFrame Dataset

## 一、Spark SQL簡介 Spark SQL 是 Spark 中的一個子模組,主要用於操作結構化資料。它具有以下特點: + 能夠將 SQL 查詢與 Spark 程式無縫混合,允許您使用 SQL 或 DataFrame API 對結構化資料進行查詢; + 支援多種開發語言; + 支援

Spark學習第一個程序打包、提交任務到集群

4.4.2 2.6.0 reat apach import chmod 程序 rsa cas 1、免秘鑰登錄配置: ssh-keygen cd .ssh touch authorized_keys cat id_rsa.pub > authorized_keys ch

Spark(六)Spark任務提交方式執行流程

sla handles 解析 nod 就會 clust 它的 管理機 nag 一、Spark中的基本概念 (1)Application:表示你的應用程序 (2)Driver:表示main()函數,創建SparkContext。由SparkContext負責與Cluste

大資料基礎Spark(1)Spark Submit即Spark任務提交過程

Spark版本2.1.1 一 Spark Submit本地解析 1.1 現象 提交命令: spark-submit --master local[10] --driver-memory 30g --class app.package.AppClass app-1

spark任務提交流程與管依賴窄依賴

spark核心執行流程圖 代表4個階段 1構建RDD,進行join,groupBy,filter操作,形成DAG有向無環圖(有方向,沒有閉環),在最後一個action時完成DAG圖,代表著資料流向 2提交DAG為DAGScheduler,DAG排程器,主要是將

Spark專案 sparkDemo 八 SparkDemo打包並且Spark任務提交

程式碼我們已經寫好了,接下來我們就是打包,然後再環境上去執行了,打包方式如下:   在伺服器的home目錄下建立一個資料夾sparkSubmit 然後將打包的jar包上傳sparkSubmit,然後再寫一個啟動指令碼 任務提交方式和引數請參考官方文件:

Spark任務提交 yarn-cluster模式 解決jvm記憶體溢位問題 以及簡單概述jdk7方法區jdk8元空間

yarn-cluster 提價任務流程 1、提交方式 ./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../lib/spark-exampl

Spark-core學習六】 Spark資源調度任務調度

重新 缺點 mage 註意 負責 如果 blog 高層 www 環境  虛擬機:VMware 10   Linux版本:CentOS-6.5-x86_64   客戶端:Xshell4  FTP:Xftp4  jdk1.8  scala-2.10.4(依賴jdk1.8)  s