成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spark優化之小文件是否需要合并?

大數據 Spark
我們知道,大部分Spark計算都是在內存中完成的,所以Spark的瓶頸一般來自于集群(standalone, yarn, mesos, k8s)的資源緊張,CPU,網絡帶寬,內存。Spark的性能,想要它快,就得充分利用好系統資源,尤其是內存和CPU。

我們知道,大部分Spark計算都是在內存中完成的,所以Spark的瓶頸一般來自于集群(standalone, yarn, mesos, k8s)的資源緊張,CPU,網絡帶寬,內存。Spark的性能,想要它快,就得充分利用好系統資源,尤其是內存和CPU。有時候我們也需要做一些優化調整來減少內存占用,例如將小文件進行合并的操作。

一、問題現象

我們有一個15萬條總數據量133MB的表,使用SELECT * FROM bi.dwd_tbl_conf_info全表查詢耗時3min,另外一個500萬條總數據量6.3G的表ods_tbl_conf_detail,查詢耗時23秒。兩張表均為列式存儲的表。

大表查詢快,而小表反而查詢慢了,為什么會產生如此奇怪的現象呢?

二、問題探詢

數據量6.3G的表查詢耗時23秒,反而數據量133MB的小表查詢耗時3min,這非常奇怪。我們收集了對應的建表語句,發現兩者沒有太大的差異,大部分為String,兩表的列數也相差不大。

  1. CREATE TABLE IF NOT EXISTS  `bi`.`dwd_tbl_conf_info`  ( 
  2.   `corp_id` STRING COMMENT ''
  3.   `dept_uuid` STRING COMMENT ''
  4.   `user_id` STRING COMMENT ''
  5.   `user_name` STRING COMMENT ''
  6.   `uuid` STRING COMMENT ''
  7.   `dtime` DATE COMMENT ''
  8.   `slice_number` INT COMMENT ''
  9.   `attendee_count` INT COMMENT ''
  10.   `mr_id` STRING COMMENT ''
  11.   `mr_pkg_id` STRING COMMENT ''
  12.   `mr_parties` INT COMMENT ''
  13.   `is_mr` TINYINT COMMENT 'R'
  14.   `is_live_conf` TINYINT COMMENT '' 

 

  1. CREATE TABLE IF NOT EXISTS `bi`.`ods_tbl_conf_detail` ( 
  2.     `id` string, 
  3.     `conf_uuid` string, 
  4.     `conf_id` string, 
  5.     `name` string, 
  6.     `number` string, 
  7.     `device_type` string, 
  8.     `j_time` bigint
  9.     `l_time` bigint
  10.     `media_type` string, 
  11.     `dept_name` string, 
  12.     `UPDATETIME` bigint
  13.     `CREATETIME` bigint
  14.     `user_id` string, 
  15.     `USERAGENT` string, 
  16.     `corp_id` string, 
  17.     `account` string 
  18.   ) 

因為兩張表均為很簡單的SELECT查詢操作,無任何復雜的聚合join操作,也無UDF相關的操作,所以基本確認查詢慢的應該發生的讀表的時候,我們將懷疑的點放到了讀表操作上。通過查詢兩個查詢語句的DAG和任務分布,我們發現了不一樣的地方。

查詢快的表,查詢時總共有68個任務,任務分配比如均勻,平均7~9s左右,而查詢慢的表,查詢時總共1160個任務,平均也是9s左右。如下圖所示:

至此,我們基本發現了貓膩所在。大表6.3G但文件個數小,只有68個,所以很快跑完了。而小表雖然只有133MB,但文件個數特別多,導致產生的任務特別多,而由于單個任務本身比較快,大部分時間花費在任務調度上,導致任務耗時較長。

那如何才能解決小表查詢慢的問題呢?

三、業務調優

那現在擺在我們面前就存在現在問題:

  • 為什么小表會產生這么小文件
  • 已經產生的這么小文件如何合并

帶著這兩個問題,我們和業務的開發人員聊了一個發現小表是業務開發人員從原始數據表中,按照不同的時間切片查詢并做數據清洗后插入到小表中的,而由于時間切片切的比較小,導致這樣的插入次數特別多,從而產生了大量的小文件。

那么我們需要解決的問題就是2個,如何才能把這些歷史的小文件進行合并以及如何才能保證后續的業務流程中不再產生小文件,我們指導業務開發人員做了以下優化:

  • 使用INSERT OVERWRITE bi.dwd_tbl_conf_info SELECT * FROM bi.dwd_tbl_conf_info合并下歷史的數據。由于DLI做了數據一致性保護,OVERWRITE期間不影響原有數據的讀取和查詢,OVERWRITE之后就會使用新的合并后的數據。合并后全表查詢由原來的3min縮短到9s內完成。
  • 原有表修改為分區表,插入時不同時間放入到不同分區,查詢時只查詢需要的時間段內的分區數據,進一步減小讀取數據量。

 

責任編輯:未麗燕 來源: segmentfault.com
相關推薦

2012-10-09 16:37:20

FastDFS

2013-03-11 14:42:08

Hadoop

2017-12-21 11:19:40

SparkHive表HadoopRDD

2022-12-08 08:27:18

HystrixQPS數據

2011-07-14 13:41:33

緩存小文件Redis

2016-12-14 19:04:16

Spark SQL優化

2023-01-31 10:22:00

HiveMapReduce文件合并

2009-01-03 15:32:26

SAN存儲區域網存儲設備

2022-04-21 09:26:41

FastDFS開源分布式文件系統

2013-05-07 09:58:20

RequireJS優化RequireJS項目

2017-10-12 11:30:34

Spark代碼PR

2011-06-22 17:11:18

SEO

2024-05-31 13:29:47

2023-06-08 07:34:19

HDFS小文件壓縮包

2015-10-21 11:39:41

Ceph小文件存儲海量數據存儲

2009-11-12 09:29:11

ChromeGoogleToolbar

2021-10-17 19:49:52

CPURedis緩存

2019-08-23 09:56:41

公共云云遣返多云

2010-12-28 13:32:07

.NET文件合并

2013-09-04 09:55:32

C++
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久这里有精品 | 精品国产一区一区二区三亚瑟 | 九九亚洲| 天天爽夜夜爽精品视频婷婷 | 欧美日韩视频网站 | 99热这里| 天天草草草 | 亚洲一区在线日韩在线深爱 | 9久久 | 国产视频二区 | 国内自拍视频在线观看 | 在线观看av网站永久 | 国产日批 | 99精品国产一区二区青青牛奶 | 国产精品久久久久久久久久久久久 | 春色av| 亚洲国产一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 久久国产精品首页 | 日韩毛片 | 亚洲三级免费看 | 天天干天天爱天天操 | 欧美精品久久久久久久久久 | 国产精品毛片一区二区三区 | 夜夜夜夜夜夜曰天天天 | 在线免费黄色 | 久久99精品久久久久久狂牛 | 国产美女视频一区 | 免费观看a级毛片在线播放 黄网站免费入口 | 九九久久免费视频 | 精品日韩一区二区三区 | 日本三级网址 | 亚洲国产一区二区视频 | 欧美成人一区二区三区 | 久久综合99 | 完全免费在线视频 | 91久久久久久久久久久久久 | 欧美精品在线免费观看 | 一级全黄少妇性色生活免费看 | 午夜精品一区二区三区免费视频 | 国产激情视频在线免费观看 |