天天看點

2016中國spark技術峰會見聞摘要

hortonworks技術專家邵賽賽分享了spark如何更好地跑在yarn上,主要以下三點:

better use the resources

better run on cluster

easy to debug

使用資源講了計算記憶體和cpu,記憶體有幾個公式,要注意不要 将spark executor的記憶體總和配置設定的太接近容器内容,要給堆外記憶體留一些空間:

container memory = spark executor memory + overhead memory

yarn.scheduler.minimum-allocation-mb <= container memory <= yarn.nodemanager.resource.memory-mb

container memory will be round to yarn.scheduler.increment-allocation-mb

cpu有個公式是container cores <= nodemanger.resource.cpu-vcores,yarn可以用cgroup做實體隔離

hadoop 2.6支援給節點打标簽label,可以讓spark排程到你指定的節點上。

spark支援動态申請或釋放executor,對于長期運作的應用很有用。可以通過以下的配置打開動态 資源配置設定

要想保證叢集的高可用,應該配置關鍵節點自動重新開機,rm應該配置yarn.resourcemanager.ha.enabled,yarn.resourcemanager.recovery.enabled,nm應該配置yarn.nodemanager.recovery.enabled (hadoop 2.6)

${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}/container_${contid} 該目錄底下有詳情的運作參數資訊,可以用來友善的debug排查問題。

騰訊進階軟體工程師林立偉分享了spark streaming的實踐,主要是用好spark steaming的特性,以及如何在生産中做優化。

exactly-once

spark streaming支援exactly-once語義,一批資料要麼全部成功要麼全部失敗,不會重複,可以用來做實時準确資料轉義,確定最終輸出的數目和輸入是一緻的。還可以應用于反作弊+計費這種不能重複計算的業務。

可靠狀态

rdd天然支援中間 結果持久化,失敗重試這些面向狀态的可靠保證,可以用來做跨batch的聚合,做pv/uv計算,記錄去重,微量實時更新的業務。

快速batch排程

spark streaming是由driver/jobscheduler進行排程,跟mapreduce的排程相比,排程間隔更短,程序/線程常駐無啟動時間 ,可以用來做資料名額監控,未成功資料快速重試這種資料量小,排程速度要求快的業務。

•(1) 增加 memory back pressure

•(2) 為 spark spark 增加新特性(無需編譯 spark spark spark 優化)

•(3)sparksql api > rdd apiapi > rdd apiapi

•(4) async execution within a task

•(5) try-cacth

•(6) concurrentjobs開啟

•(7) spark 遠端調試

監控executor的記憶體使用,動态調整receiver接收速率,避免oom。

增加新功能可以u編譯spark工程,直接修改源檔案**scala,運作參數增加spark.driver/executor.userclasspathfirst=false; spark.driver/executor.extraclasspath=app.jar。

sqparksql運作更快,因為做了很多邏輯優化,記憶體占用更少,支援邏輯緩存,codegen執行優化。

1.x用dstream.foreachrdd{rdd => rdd.todf().select...},spark 2.x用spark. ... . stream. ... . startstream().

使用線程池加異步的方式,提高task 處理速度,可以同時批處理多個。

有些task的錯誤,比如could not compute split,在driver端catch,會提高系統健壯性

設定spark.streaming.concurrentjobs = n,同時執行n個output,一般1個batch對應1個output提高系統處理能力。

範文臣, databricks 軟體工程師。主要講了dataset的好處,更快,api更易用。

rdd通用性高,能支援各種特性,但不能檢查sql的文法格式,不能做到編譯時文法檢查。1.6開始支援的dataset,能夠在編譯時檢查文法和字段錯誤,可以做到類型安全檢查。

spark 2.0統一了dataset和dataframe,可以用 dataset[row] = dataframe轉換。

dataset和常見的java,kyro相比序列化快,dataset和rdd相比,記憶體占用更小,複雜sql運作更快 。但如果是簡單操作,rdd會更快,因為沒有優化空間,rdd不需要序列化節省了時間。

繼續閱讀