spark110編譯
⑴ spark thrift server 與 網易 kyuubi thrift server
thrift server可以實現通過jdbc, beeline等工具,實現連接到spark集群,並提交sql查詢的機制。
默認情況下,cdh安裝的spark沒有包含thrift server模塊,因此我們需要重新編譯spark。
另外,為了不影響cdh自帶的spark,而且spark目前都是基於yarn運行的,本身也沒有什麼獨立的服務部署(除了history sever)。
所以,在一個集群中,可以部署安裝多個版本的spark。
我們使用源碼編譯的spark 2.4.0(其中hive的版本是1.2.1)
cdh集成的spark版本和Hive版本如下:
使用jdk1.8
修改spark提供的mvn,使用自行安裝的maven 3.8.1
使用make-distribution.sh可以幫助與我們編譯之後打包成tgz文件
修改pom.xml文件的配置如下。
最後,執行編譯命令如下:
這樣打出的包,就含有thrift server的jar包了。
最終打包文件,根目錄下。
之後就是解壓到其他目錄下後即可。
將hive-site.xml的文件連接過來,這樣spark就可以讀取hive的表了。
為了確保spark提交到yarn上運行,需要配置
cp spark-defaults.conf.template spar-defaults.conf
另外,可以在spark-env.sh中設置環境變數。
HADOOP_CONF_DIR
環境變數,也可以在/etc/profile中設置
啟動日誌可以查看,注意下埠佔用問題,如下。
啟動時候,使用beeline工具連接上,主要這里不用使用cdh默認安裝hive提供的beeline工具,應為版本太高。
使用編譯後spark生成beeline工具
參考beeline使用教程。
https://github.com/apache/incubator-kyuubi
kyuubi是基於thrift sever二次開發,在系能和安全上優於thrift server。
鑒於目前hive的版本是2.1,而最新的kyuubi的hive是2.3,所以採用前天版本的kyuubi,採用0.7版本,保證hive的版本小於當前集群中的hive版本。
使用build目錄下的dist腳本進行編譯和打包。
編譯成功後,會在更目錄下出現tar.gz的壓縮文件,如上圖。
之後解壓到目錄下。
配置bin/kyuubi-env.sh腳本,設置spark路徑
執行bin/start-kyuubi.sh命令即可。
訪問的方式同樣採用beelin,注意使用上面章節的beeline工具。
訪問後,可以通過beeline訪問到hive的表(在spark中已經配置了hive-site.xml)
!connect jdbc: hive2://xxxx:10009 即可。
⑵ spark1.3編譯出錯,求解決方法
把 pom.xml文件中的scalastyle的相關改成false
<groupId>org.scalastyle</groupId>
<artifactId>scalastyle-maven-plugin</artifactId>
<version>0.4.0</version>
<configuration>
<verbose>false</verbose>
<failOnViolation>false</failOnViolation>
<includeTestSourceDirectory>false</includeTestSourceDirectory>
<failOnWarning>false</failOnWarning>
⑶ spark 2.0.0運行javaWordCount出現 java.lang.ExceptionInInitializerError,如何解決
com.hiaward.house.service.impl.HouseReleaseServiceImpl問題好像出在這個類實例化時,發生了IndexOutOfBoundsException,數組越界的錯誤,你看看是不是數組為[0],但是取值超過的[0]
⑷ spark編程 mysql得不到數據
「這里說明一點:本文提到的解決 Spark insertIntoJDBC找不到Mysql驅動的方法是針對單機模式(也就是local模式)。在集群環境下,下面的方法是不行的。
編程是編定程序的中文簡稱,就是讓計算機代碼解決某個問題,對某個計算體系規定一定的運算方式,使計算體系按照該計算方式運行,並最終得到相應結果的過程。
為了使計算機能夠理解人的意圖,人類就必須將需解決的問題的思路、方法和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算體系之間交流的過程就是編程。
在計算機系統中,一條機器指令規定了計算機系統的一個特定動作。
一個系列的計算機在硬體設計製造時就用了若干指令規定了該系列計算機能夠進行的基本操作,這些指令一起構成了該系列計算機的指令系統。在計算機應用的初期,程序員使用機器的指令系統來編寫計算機應用程序,這種程序稱為機器語言程序。
以上內容參考:網路-編程
⑸ 怎樣獲得在yarn框架上運行jar包的執行結果
配置方法
(1) 首先需要確保spark在1.1.0以上的版本。
(2) 在HDFS上建立一個公共lib庫,比如/system/spark-lib/,設置許可權為755。把spark-assembly-*.jar上傳到公共lib庫中。
(3) 在spark-env.sh中配置:
view plain to clipboardprint?
<span style="font-size:14px;">spark.yarn.jar hdfs://yarncluster/system/spark_lib/spark-assembly-1.1.0-hadoop2.3.0-cdh5.1.0.jarspark.yarn.preserve.staging.files false</span>
**spark.yarn.jar配置成HDFS上的公共lib庫中的jar包。這個配置項會使提交job時,不是從本地上傳spark-assembly*.jar包,而是從HDFS的一個目錄復制到另一個目錄(不確定HDFS上的復制是怎麼操作的),總的來說節省了一點時間。(網上有的文章里說,這里的配置,會節省掉上傳jar包的步驟,其實是不對的,只是把從本地上傳的步驟改成了在HDFS上的復制操作。)
**spark.yarn.preserve.staging.files: 這個配置項配置成false,表示在執行結束後,不保留staging files,也就是兩個jar包。然後HDFS上的.sparkStaging下的兩個jar包在作業執行完成後就會被刪除。如果配置成true,執行完後HDFS上的.sparkStaging下兩個jar包都會保存下來。
然後再運行,發現HDFS上.sparkStaging目錄下不會再保留jar包。
問題定位
按道理來說,因為spark.yarn.preserve.staging.files默認是false,所以HDFS上的jar包是不會被保留的。但是在spark1.0.2中,卻沒有刪除。我看了下1.0.2的代碼,刪除的機制是存在的:
//yarn/alpha/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMaster.scala
view plain to clipboardprint?
<span style="font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:12px;"> /** * Clean up the staging directory. */ private def cleanupStagingDir() { var stagingDirPath: Path = null try { val preserveFiles = sparkConf.get("spark.yarn.preserve.staging.files", "false").toBoolean if (!preserveFiles) { stagingDirPath = new Path(System.getenv("SPARK_YARN_STAGING_DIR")) if (stagingDirPath == null) { logError("Staging directory is null") return } logInfo("Deleting staging directory " + stagingDirPath) fs.delete(stagingDirPath, true) } } catch { case ioe: IOException => logError("Failed to cleanup staging dir " + stagingDirPath, ioe) } }</span></span>
按照這個邏輯,默認在AM關閉的時候,是會刪除HDFS上的jar包的。不過沒有正常刪除。推測這應該是一個1.0.2裡面的bug,而在1.1.0裡面已經修復。
nodemanager節點上的jar包緩存
升級到1.1.0版本後,HDFS上的jar包問題就解決了。但是nodemanager節點上的jar包還是會保留。這個問題的定位很糾結,不過結果卻出乎意料的簡單。不說了,上結果吧。
配置方法
(1) 配置yarn-site.xml:
<span style="font-family:Microsoft YaHei;font-size:12px;"> <property>
<name>yarn.nodemanager.local-dirs</name>
<value>local-dir1, local-dir2,local-dir3</value>
</property>
<property>
<name>yarn.nodemanager.localizer.cache.target-size-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.localizer.cache.cleanup.interval-ms</name>
<value>1800000</value>
</property></span>
**yarn.nodemanager.local-dirs: 這個目錄是nodemanager上的作業中間數據存放路徑。推薦配置多個盤上的多個路徑,從而分散作業執行中的磁碟IO壓力。
**yarn.nodemanager.localizer.cache.target-size-mb:配置nodemanager上的緩存目錄的最大限度。nodemanager上有一個deletion server服務,會定期檢測,如果yarn.nodemanager.local-dirs中配置的目錄大小(如果配置了多個,則計算多個目錄的總大小)是否超過了這里設置的最大限度值。如果超過了,就刪除一些已經執行完的container的緩存數據。
因為spark提交作業後遺留在nodemanager上的jar包就在yarn.nodemanager.local-dirs下面,所以只要這里配置合適的大小值。那麼nodemanager上的deletion server是會自動檢測並保證目錄總大小的。所以只要配置了這個量,我們就不需要再擔心nodemanager上的jar包緩存問題了,交給yarn就好了!很簡單啊有木有,可就這么個問題,居然花了我一個星期的時間去定位。
**yarn.nodemanager.localizer.cache.cleanup.interval-ms: deletion server多長時間做一次檢測,並且清除緩存目錄直到目錄大小低於target-size-mb的配置。
通過上面這三個量的配置,nodemanager會確保本地的緩存數據總量在target-size-mb之下,也就是超過了的話,之前的spark的jar包就會被刪除。所以我們就不需要再擔心nodemanager節點上的spark jar包緩存問題了。不過target-size-mb的默認值是10G,這個值當然可以根據你的實際情況進行調整。
⑹ 怎樣在spark單機上編寫運行scala程序
使用Scala寫一個測試代碼:
object Test {
def main(args: Array[String]): Unit = {
println("hello world")
}
}
就把這個Test視為類,項目組織結構如:
⑺ 虛擬機spark中怎樣導入數據,的代碼
具體操作步驟:
1、准備Spark程序目錄結構。
2、編輯build.sbt配置文件添加依賴。
3、創建WriteToCk.scala數據寫入程序文件。
4、編譯打包。
5、運行。
參數說明:your-user-name:目標ClickHouse集群中創建的資料庫賬號名。
your-pasword:資料庫賬號名對應的密碼。
your-url:目標ClickHouse集群地址。
/your/path/to/test/data/a.txt:要導入的數據文件的路徑,包含文件地址和文件名。說明文件中的數據及schema,需要與ClickHouse中目標表的結構保持一致。
your-table-name:ClickHouse集群中的目標表名稱。
⑻ spark在windows開發怎麼測試
1、windows下環境
在安裝開發軟體之前,首先需要安裝JAVA 和SCALA,並且配置好環境變數。
2、java開發spark程序
1) 下載eclise軟體,下載地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/mars2 盡量下載最新的,而且自帶maven的eclipse
2) 打開eclipse軟體,創建maven項目:
點 擊 file ->new ->others ->maven project 點 擊 next ,
選 擇maven-archetype-quickstart ,點擊 next,
group id 為 com.dt.spark,artifact id 為sparkApps,
然後點擊 finish。
3) 修改JDK和pom文件
創建 maven 項目後,默認的 jdk 是 1.5 要改成我們前面安裝好的 jdk1.8 。在項目上右擊 build path ->configure build path 。 在彈出頁面點擊 Libraries,選中 jre system library 。點擊 edit,在彈出框選擇 workspace default jre ,然後點擊 finish。然
後在點擊 ok。將 pom 文件修改為如下內容,然後等待 eclipse 下載好 maven 依賴的 jar 包, 並編譯工程。 編譯好工程後有個錯誤提示, 在此錯誤列上, 右擊選擇 quick fix ,在彈出頁面點擊 finish 即可。