spark笔记
傳遞第三方jars
當用spark-submit提交任務時,可以通過--jars選項傳遞第三方jars包,如果有多個jars,用逗號分開。
本地調試
用sbt打包好后,最好先在本地調試一下。可以把--master指定為local,然后把輸入輸出改為本地路徑即可。
使用scala執行class
這個跟spark關系不大,但是有時可能也用得著。如果你依賴多個jar包,需要通過-cp指定:
scala -cp "lib1.jar:lib2.jar:your_program.jar" -J-Xmx2g com.your.HelloWorld arg arg1 arg2com.your.HelloWorld就在 your_program.jar里面。注意這里jar是用冒號分開的。不是逗號
-J 可以輸入jvm參數,比如指定heap大小為2G,-Xmx2g。
使用jdbc連接oracle等sql數據庫
在spark2中,在調用spark-shell或者spark-submit的時候,先通過--jars指定依賴的jdbc jar包,比如oracle就是$ORACLE_HOME/lib/ojdbc6.jar, 然后在代碼中,使用函數
val df = spark.read.format("jdbc") .options(Map("url" -> url,"driver" -> "oracle.jdbc.driver.OracleDriver","dbtable" -> "DW_MP_API_NEW_DEVICE")).load()讀取表。
其中url的格式為:
jdbc:oracle:thin:username/passwd@ip_address:port:dbsid
thin之后的內容都是需要你來填寫的
driver則指定了驅動類型
map、flatMap、mapValues,mapPartitions的區別
map:把RDD的每個元素進行轉換,輸入、輸出數量不變,即一個輸入對應一個輸出,可能會改變key
flatMap:也是對RDD的每個元素進行轉換,但是輸出必須是TraversableOnce類型,即可遍歷的列表,可以輸出多個或者0個結果(即None)。這些結果會自動flatten,即拆分成很多單條記錄。也會改變key
mapValues: 和map類似,但它只是PairRDD的函數,僅僅對value進行變換,不會改變key。和flatMap類似,PairRDD也有flatMapValues函數,也是不會改變key的。
mapPartitions: 它是對RDD的一部分元素,即一個partition進行批量轉換,可以產生0或者多個結果,map在計算每個元素時都會啟動一個任務(setup work),而mapPartitions是給一批元素啟動一個任務,顯然mapPartitions更加高效一些。
最終這些結果會添加到新RDD中。它接受的輸入輸出都必須是Iterator類型。Iterator如果使用過,必須重置到開始位置,否則后面再使用,如map、foreach函數,就會丟失數據!這是我之前踩到的一個坑。
join、leftOuterJoin的區別
跟SQL類似,他們都是PairRDD的函數,假設有A、B兩個rdd,有同樣類型的key,A.join(B)的結果是A和B的交集,value是pair(valueOfA,valueOfB),即把A、B相同key的結果匯總到一個pair中。A.leftOuterJoin(B)的結果是(valueOfA,Option(valueOfB)),即A中存在的記錄都會輸出,對于A中存在,B中不存在的記錄,pair的第二個元素就是None。A中不存在的記錄則不會輸出。
spark出現OOM(OutOfMemery)該怎么辦
OOM錯誤或者exit 143都是內存溢出的結果。一般遇到這種情況,通過repartition增加part數,就可以解決。
或者增加spark.executor.memory的大小。注意的是,如果使用了動態內存分配,這個參數可能會無效。
spark出現time out,或者多次失敗退出該怎么辦
通過調節time out時長和增加重試次數解決,具體如下:
--conf spark.task.maxFailures=8 \--conf spark.akka.timeout=3600 \--conf spark.network.timeout=3600 \--conf spark.executor.heartbeatInterval=300 \--conf spark.yarn.max.executor.failures=50 \--conf spark.rpc.retry.wait=60在提交spark任務時,調整如上幾個參數,timeout單位是秒。
增加重試次數,也能提高一定的穩定性。
總結
- 上一篇: WindowsServer2012 R2
- 下一篇: 图最短路径