取消
顯示的結果
而不是尋找
你的意思是:

的幫助!將廣州JSON轉換為三角洲造成巨大的CPU峰值和ETL的天!

卡什
貢獻者三世

你好,

我想知道如果我能得到你的建議。

我們想創建一個青銅三角洲表使用廣州JSON數據存儲在S3中但每次我們嚐試讀和寫它集群CPU峰值100%。我們沒有做任何轉換,隻是閱讀從S3,創建一個列as_of_date和寫作在三角洲S3。

目前需要超過1小時讀和寫20 gb的廣州JSON S3使用服務器122 gb的內存和16個核心是無效的。

當我們做ETL數據也在小文件6.7 mb-10mb寫道。

我們已經試過的東西:

  1. 我最初認為這個問題是由於我們的廣州JSON數據,不是可剝離所以火花很難處理這個問題,但我們沒有與其他管道。(如果這是它還不清楚)
  2. 然後我認為這是一個傾斜的問題由於.withColumn (“as_of_date坳(metadata.timestamp) .cast(日期))但即使我刪除它的問題仍然持續。
  3. 我甚至嚐試添加一個鹽提示,但沒有運氣。
  4. 我們試圖定義JSON,因為它是嵌套的模式幫助它加載更快了,但是寫了同樣長的時間。(這是不理想的,因為我們的模式隨時間變化和定義在這裏使我們失去數據)
  5. 我們嚐試.repartition (1000)
  6. 我們也試圖讓數據磚動態選擇傾斜是什麼,然後,以編程方式設置為斜提示,但沒有運氣。
  7. 我們打開Autocompact,自動優化它寫大文件但沒有做到這一點,再一次寫較小的10 mb的文件。

source_path = (s3: / /測試數據/源/ 2022/06/03 / *’。形式at(year, month, day)) test_data = spark.read.json(source_path).withColumn("as_of_date", col('metadata.timestamp').cast('date')) test_data.createOrReplaceTempView('test_data') test_data.write.format('delta') \ .partitionBy('as_of_date') \ .option("mergeSchema", "true") \ .option("path",'s3://test-data-bronze/').mode("append") \ .saveAsTable('test_data.bronze')

19日回複19

杜利
價值貢獻

隻是一個快速檢查。你和dbfs試試這些路徑:/路徑而不是這些S3路徑?繼續上傳的方式之一,但試著改變這些的dbfs: /路徑。也許dbfs: /用戶/ your_user_email / ?

write_path = ' s3: / / test-data-bronze / not_optimized schema_location = ' s3: / / test-autoloader / not_optimized / checkpoint_path =“s3: / / test-autoloader / not_optimized /”

杜利
價值貢獻
upload_path =“/ mnt /測試數據/日曆”schema_location =“用戶/ your_email_address / project_directory_name / _checkpoints”checkpoint_path =“用戶/ your_email_address / project_directory_name / _checkpoints”#設置流開始讀取輸入文件從bronze_df = spark.readStream.format (cloudFiles) \ .option (“cloudFiles。schemaLocation ', schema_location) \ .option (“cloudFiles。maxFilesPerTrigger”, 16) \ .option (“cloudFiles。inferColumnTypes”、“真實”)\ .option (cloudFiles。格式,json) \ .option (cloudFiles。backfillInterval”,“一天”)\ .load (upload_path) #開始流。bronze_df。writeStream \ .format(“δ”).option (checkpointLocation, checkpoint_path) \ .table (“user_data_bronze_compact”)

這是我的想法。假設你安裝S3 bucket要加載,它將在dbfs文件係統下mnt正如你看到上麵這段代碼中。然後你保存數據和模式在dbfs文件係統——也許在用戶。

寫,我拿出所有的其他東西你在那裏我們將處理最低隻是把數據轉換成三角洲。然後你可以做鑄造的時間戳。我強烈建議你不要再分配以來在做這個過程將非常昂貴和不必要的如上解釋與autoOptimize optimizeWrite國旗被打開之前這段代碼& autoCompact之上。

同樣,首先回填將是昂貴的,因為它需要把所有的數據(大)為δ格式但在這一點上,任何新的文件隻會攝取的處理將會減少。然而,你將會有CPU過載問題如果你住節點的方式讀入數據。你需要做一個分布式集群讀入所以要與司機和工人2 - 8 &看你Ganglia指標(在集群信息與“標準”選項卡)幫助我們排除前進。一旦你更新集群,然後更新MaxFilesPerTrigger核心的總數在核心員工的總數。

讓我知道。

匿名
不適用

問題是,gzip不是可剝離。它是單線程的,因為它試圖解壓縮它。試著選擇:

.option(“壓縮”、“gzip”)

Kaniz
社區經理
社區經理

嗨@Avkash假名,我們一直沒有收到你最後的回應@Joseph Kambourakis @Sara杜利,我檢查看看他們的建議幫助你。否則,如果你有任何解決方案,請與社區分享,因為它可以幫助別人。否則,我們將與更多的細節和試圖幫助回應。

卡什
貢獻者三世

嗨Kaniz,

謝謝你的注意,謝謝大家的建議和幫助。@Joseph Kambourakis我的廣告你的建議我們的負載,但是我沒有看到任何改變在我們的數據加載或加載的時間數據。

我做了一些額外的研究和一個選擇那些有廣州的問題可以讀取數據文本文件使它快速閱讀,然後使用火花來推斷模式。

然而,最後我們決定使用自動裝卸機加載數據…但是我們還在等待幫助如何回填一年數據增量(每天)。

讓我知道如果你有任何建議,我增加了更多的康泰克斯上麵我的帖子來User16460565755155528764(磚)

謝謝,

K

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map