久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

大數(shù)據(jù)測試

 福兮007 2023-09-25

一,、ETL測試流程 

1、分析業(yè)務(wù)需求 

2,、設(shè)計 測試用例并準備測試數(shù)據(jù) 

3,、審查靜態(tài)代碼 

4、執(zhí)行測試 

二,、 ETL測試方法 

1,、 功能性測試 

2、 非功能性測試 

三,、 ETL測試場景 

1,、 HiveSQL測試場景 

2、 源表到目標表的場景 

3,、 MapReduce測試場景 

一,、ETL測試流程

1、分析業(yè)務(wù)需求

測試前需要熟悉業(yè)務(wù)流程和業(yè)務(wù)規(guī)則,,根據(jù)業(yè)務(wù)需求分析源表和目標表的映射關(guān)系,。另外需求了解數(shù)據(jù)來源背景,、數(shù)據(jù)質(zhì)量現(xiàn)狀、表字段含義,、元數(shù)據(jù)信息,、解析數(shù)據(jù)流轉(zhuǎn)的“血緣關(guān)系”。

2,、設(shè)計 測試用例并準備測試數(shù)據(jù)

非數(shù)據(jù)類項目的驗證場景相對簡單,,但在大數(shù)據(jù)項目尤其是大數(shù)據(jù)類類項目中,數(shù)據(jù)流轉(zhuǎn)鏈路長,,經(jīng)手的開發(fā)人員多,,測試中如果發(fā)現(xiàn)邏輯問題或數(shù)據(jù)質(zhì)量問題,較難定位,,所以在測試數(shù)據(jù)類項目前,,測試人員需要與大數(shù)據(jù)開發(fā)人員深入溝通,了解數(shù)據(jù)處理的詳細步驟,,提前準備測試用例和測試數(shù)據(jù),,以此來保證用例準備充分,測試數(shù)據(jù)能最大限度覆蓋測試場景,。

3,、審查靜態(tài)代碼

與非數(shù)據(jù)類項目一樣,,審查靜態(tài)代碼的目的是盡早通過閱讀代碼發(fā)現(xiàn)顯而易見的缺陷或Bug,。對于數(shù)據(jù)類項目,代碼審查的通用檢查項如下:

    a,、名稱(表名,、字段名、主鍵名)是否正確,?

    b,、字段順序、數(shù)據(jù)類型是否合理,?

    c,、表中字段的業(yè)務(wù)含義是否與實際業(yè)務(wù)對應(yīng)?

    d,、是否存在數(shù)據(jù)計算異常的情況,,例如除數(shù)為0,NULL,、空字符串的情況,?

    e、是否對數(shù)據(jù)精度有要求,?

     f,、臟數(shù)據(jù)的處理是否合理,?業(yè)務(wù)上是否要求數(shù)據(jù)去重?

     g,、DML,、DDL語句的使用是否正確?

     h,、數(shù)據(jù)流轉(zhuǎn)邏輯是否與需求文檔相符,?

     j、編碼是否規(guī)范,?

為了提高代碼審查的交付質(zhì)量及效率,,除了手工方式,還可以通過靜態(tài)代碼掃描工具進行自動檢測,。目前了解到的SQL靜態(tài)檢測工具有阿里巴巴的SQLSCAN,、開源工具sqlint等。

4,、執(zhí)行測試

顧名思義,,執(zhí)行測試主要的工作是使用準備的測試數(shù)據(jù)按照測試用例執(zhí)行測試。但需要注意的是,,對于大數(shù)據(jù)類項目來說,,開發(fā)人員的代碼中使用的庫表名稱是實際的業(yè)務(wù)生產(chǎn)庫表,測試人員在測試時需要做到在不污染生產(chǎn)數(shù)據(jù)的前提下完成測試,,同時又能保證測試覆蓋的全面性,。

二、ETL測試方法

一般來說,,大數(shù)據(jù)ETL測試方法主要包括功能性測試和非功能性測試兩大部分,。

  1. 功能性測試

功能性測試主要從數(shù)據(jù)完整性、數(shù)據(jù)一致性,、數(shù)據(jù)準確性,、數(shù)據(jù)及時性、數(shù)據(jù)約束檢查,、數(shù)據(jù)處理邏輯,、數(shù)據(jù)存儲檢查、HiveSQL語法檢查,、規(guī)范驗證,、加載規(guī)則、MapReduce及shell腳本測試,、調(diào)度任務(wù)驗證等方面進行測試,。實際上,數(shù)據(jù)完整性、數(shù)據(jù)一致性,、數(shù)據(jù)準確性,、數(shù)據(jù)及時性也屬于數(shù)據(jù)質(zhì)量評估的內(nèi)容。進行功能測試時,、除了關(guān)注代碼規(guī)范和邏輯,,往往還需要關(guān)注數(shù)據(jù)質(zhì)量問題,因此這里將他們拆分出來作為功能測試方法,。數(shù)據(jù)質(zhì)量問題繁雜,,人工檢測效率低且檢測不全面,通常會使用數(shù)據(jù)質(zhì)量監(jiān)控平臺來進行監(jiān)測,。

    1)數(shù)據(jù)完整性測試

相比源表,,比較和驗證目標表的數(shù)據(jù)量和數(shù)據(jù)值是否符合預期,數(shù)據(jù)的記錄和信息是否完整,,是否存在缺失的情況,。數(shù)據(jù)的缺失只要有記錄的缺失和記錄中某個字段信息的缺失。確保目標表中加載的記錄數(shù)和預期計數(shù)匹配,,確保加載到數(shù)據(jù)倉庫的數(shù)據(jù)不會丟失和截斷,。例如,若原始數(shù)據(jù)中存在2000個訂單ID,,ETL流程中未對訂單ID進行過濾處理,,則目標表中也應(yīng)存在2000個訂單ID

  2)數(shù)據(jù)一致性測試

數(shù)據(jù)的一致性主要包括數(shù)據(jù)記錄規(guī)范和數(shù)據(jù)邏輯的一致性,檢查數(shù)據(jù)是否與上下層及其他數(shù)據(jù)集合保持統(tǒng)一,。數(shù)據(jù)記錄的規(guī)范指的是數(shù)據(jù)編碼和格式的問題,,例如訂單ID,從業(yè)務(wù)來源表到數(shù)據(jù)倉庫的每一層表都應(yīng)該是同一種數(shù)類型,,且長度需要保持一致,。數(shù)據(jù)邏輯性主要是指多項數(shù)據(jù)間固定關(guān)系的一致性,,比如,,用戶當年累計繳納社保總額字段值大于當年中某一個月繳納社保額字段值等,。

   3)數(shù)據(jù)準確性測試

數(shù)據(jù)準確性加載并按與預期進行轉(zhuǎn)換,,數(shù)據(jù)庫字段和字段數(shù)據(jù)準確對應(yīng)。檢查數(shù)據(jù)中記錄的數(shù)據(jù)是否準確,,是否存在異?;蛘咤e誤的信息,如數(shù)字檢查,、日期(或日期格式)檢查,、精度檢查(小數(shù)點精度)等。檢查是否存在異常值,、空字符串,、NULL值等其他臟數(shù)據(jù),;根據(jù)業(yè)務(wù)模型檢查數(shù)據(jù)值域范圍,例如轉(zhuǎn)化率介于0~1,,年齡大于0的正數(shù),;檢查數(shù)據(jù)、字符串長度是否符合預期,、字符型數(shù)據(jù)有無亂碼現(xiàn)象,;檢查數(shù)據(jù)分布合理性,防止數(shù)據(jù)出現(xiàn)傾斜,。

   4)數(shù)據(jù)及時性測試

數(shù)據(jù)及時性是指數(shù)據(jù)產(chǎn)出時間是否符合要求,。通常數(shù)據(jù)產(chǎn)出時間需要控制在一定時間范圍內(nèi)或一定時間之前。有些大數(shù)據(jù)業(yè)務(wù)對及時性要求不高,,但是也需要滿足明確的指標,。例如,業(yè)務(wù)數(shù)據(jù)生產(chǎn)周期一般以天為單位,,如果數(shù)據(jù)從生產(chǎn)到可用時間已經(jīng)超過一天,,那這樣的數(shù)據(jù)就失去了時效性。有些實時分析頁面可能需要用到小時甚至分鐘級別的數(shù)據(jù),,這種場景下一般使用實時數(shù)據(jù),,對時效性要求極高。例如,,頁面以1分鐘間隔展示當前應(yīng)用在線人數(shù),,如果每次查詢需要2分鐘才能返回數(shù)據(jù),那返回的當前時刻的在線人數(shù)其實是不準的,,查詢返回時長通常需要控制在秒級別,,甚至毫秒級別才有意義。

     5)數(shù)據(jù)約束檢查

數(shù)據(jù)約束檢查包括檢查數(shù)據(jù)類型,、數(shù)據(jù)長度,、索引、主鍵等,,檢查目標表中的約束關(guān)系是否滿足期望設(shè)計,,主鍵唯一性檢查、非空檢查是否通過,。

     6)數(shù)據(jù)處理邏輯驗證

數(shù)據(jù)處理邏輯驗證的要求如下:

      a,、計算過程符合業(yè)務(wù)邏輯,運算符及函數(shù)使用正確,。

      b,、異常值、臟數(shù)據(jù)、極值以及特殊數(shù)據(jù)(零值,、負數(shù)等)的處理符合預期,。

      c、字段類型與實際數(shù)據(jù)一致,,主鍵構(gòu)成合理,。

      d、按照去重規(guī)則的記錄進行去重處理,。

       e,、數(shù)據(jù)輸入、輸出規(guī)定格式,。

      7)數(shù)據(jù)存儲檢查

數(shù)據(jù)存儲檢查的要求如下:

       a,、Hive表的類型合理(內(nèi)部表、外部表,、分區(qū)表,、分通表)。

      b,、數(shù)據(jù)文件的存儲格式合理,。文件存儲格式有行存儲格式(包括Textfile、SequenoeFile,、Mapfile,、Avro Datafile),以及列存儲格式(包括Parquent\RCFile\ORCFile),。

      c,、注意考慮數(shù)據(jù)文件是否需要進行壓縮。

      8)HiveSQL語法檢查

HiveSQL語法檢查的要求如下:

     a,、考慮不同情況下寫入表,,合理使用into或overwrite。

      b,、union和union all的使用是否正確

      c,、合理使用order by、distribute by,、sort by,、cluster by及group by,。

      d,、在編寫HiveSQL語句時,除了基本的語法Bug外,,還需要關(guān)注由于表本身數(shù)據(jù)帶來的問題,。如下SQL代碼在執(zhí)行時,由于沒有考慮到表a和表b的md列存在大量重復值,直接將兩表通過dt和etl_dt字段關(guān)聯(lián)進行外連接,,導致關(guān)聯(lián)后的大量數(shù)據(jù)寫入結(jié)果表c,,產(chǎn)生了數(shù)據(jù)膨脹問題。

  1. Insert overwrite tabe a parition(elt_dt)
  2. Select nvl()a.dt,b.dt) as dt,a.key as renc,b.key as hash,a.etl_dt
  3. From a
  4. Full outer join
  5. b
  6. On a.etl_dt=b.etl_dt and a.dt=b.dt;

測試之前,,需要考慮執(zhí)行的SQL語句是否合理,,提前查看數(shù)據(jù)量及數(shù)據(jù)情況并評估影響。對于SQL語句執(zhí)行時間過長的情況給與關(guān)注,,保持敏感性和警惕性,。

9)規(guī)范驗證

關(guān)鍵步驟及開始步驟是否有注釋,驗證表和字段注釋是否完全正確,。

驗證代碼格式是否對齊,。

驗證表的層次、命名是否規(guī)范,。

驗證字段命名是否合理,。

驗證名稱(表名、字段名,、主鍵名)正確性,。

10)加載規(guī)則測試

根據(jù)業(yè)務(wù)場場景需求,判斷加載規(guī)則是否合理,。加載規(guī)則分為全量加載和增量加載,。

11)MapReduce及Shell腳本測試

ETL測試過程中還會涉及測試MapReduce代碼及Shell腳本。通常數(shù)據(jù)加載進行HDFS后,,會使用MapReduce或其他計算框架對來自HDFS的數(shù)據(jù)進行處理,,這里先介紹使用MapReduce框架的測試情況。MapReduce階段會涉及操作一些Shell腳本文件及MapReduce文件,,常見測試點主要有驗證Shell腳本中的jar包,、MapReduce文件、Reduce文件,、MapReduce依賴文件,、MapReduce輸入/輸出文件引用路徑是否正確,驗證MapReduce的參數(shù)是否合理,,驗證MapReduce及Reducer的處理邏輯時都正確,,驗證MapReduce處理過程中輸出的日志是否符合預期

12)調(diào)度任務(wù)驗證

調(diào)度任務(wù)驗證包括以下方面:

驗證任務(wù)本身是否支持重運行、是否支持定時配置,、是否支持失敗告警,。

驗證依賴的父任務(wù)是否配置到位。

驗證任務(wù)依賴層次是否合理,。

驗證任務(wù)是否在規(guī)定時間點完成,。

2,、非功能性測試

因為大數(shù)據(jù)面向具體行業(yè)的應(yīng)用,所以除了功能測試外,,還需要在整個大數(shù)據(jù)處理中進行非功能測試,。這主要包括性能測試、安全測試,、易用性測試,、兼容性測試等,下面分別進行介紹,。

1)性能測試

性能測試是大數(shù)據(jù)測試過程中的一種重要手段,,它通常驗證在大數(shù)據(jù)量情況下的數(shù)據(jù)處理和響應(yīng)能力。通過性能測試能夠很好的檢測出大數(shù)據(jù)系統(tǒng)的業(yè)務(wù)處理瓶頸,、資源使用不足等問題,。常見的性能測試驗證參數(shù)除了內(nèi)存使用率、吞吐率,、任務(wù)完成時間外,,還有以下幾個方面。

      a,、數(shù)據(jù)存儲:驗證大數(shù)據(jù)量情況下數(shù)據(jù)如何存儲在不同的節(jié)點中,,是否有漏寫分區(qū)。

      b,、并發(fā)性:驗證高并發(fā)場景下的數(shù)據(jù)讀取,、寫入、計算等性能,,有多少個線程可以執(zhí)行寫入和讀取操作,。

      c、JVM參數(shù):驗證堆大小,,GC收集算法等,。

      d、緩存:調(diào)整緩存,,設(shè)置”行緩存“和“鍵緩存”,。

      e、超時:驗證鏈接超時值,、查詢超時值,、任務(wù)執(zhí)行超時等。

       f,、消息隊列:消息速率,、大小等。

2)安全測試

根據(jù)各公司或地區(qū)政策定義的數(shù)據(jù)保密項,,需要對特殊數(shù)據(jù)進行加密,;關(guān)于數(shù)據(jù)權(quán)限,,不僅需要從庫,、表和文件層面考慮安全性,,還需要從數(shù)據(jù)行、列等更細粒度考慮權(quán)限設(shè)置問題,;對數(shù)據(jù)實時讀取,、下載、管理權(quán)限控制,,保證數(shù)據(jù)不能處于安全范圍外,。

3)易用性測試

易用性測試是指測試數(shù)據(jù)能否較好的被用戶理解和使用。數(shù)據(jù)的易用性可以分為兩種——是否易于理解和使用,。

易于理解是指對數(shù)據(jù)的定義是否被行業(yè)認可,,是否存在團隊與團隊之間、用戶與開發(fā)者之間理解的不一致,。

易于使用通常指數(shù)據(jù)村粗格式是否易于后續(xù)使用,。例如數(shù)據(jù)精度需要統(tǒng)一,不能出現(xiàn)諸如12.1234567890這類不易讀,、不易處理的數(shù)據(jù),;數(shù)據(jù)值太大時,考慮使用合適的單位換算后顯示,;字符串要求合理拼接,,不要出現(xiàn)大JSON類型,避免在后續(xù)使用帶來性能問題,。

4)兼容性測試

三,、ETL測試場景

下面列出3個ETL測試場景(HiveSQL測試場景、源表到目標表驗證場景,、MapReduce測試場景),,來說明如何將功能測試方法應(yīng)用到實際業(yè)務(wù)測試場景中。

1,、HiveSQL測試場景

以下是一段有問題的HiveSQL業(yè)務(wù)代碼,。

  1. Inser overerite table tmp.student
  2. Selec
  3. Unique_id --’唯一編號’
  4. ,studentNO --’學號
  5. ,courseNO --’課程名稱’
  6. ,term --’開學日期’
  7. ,score --’成績’
  8. ,credithour --’所得學分'
  9. ,start_dt --’開課時間’
  10. From dwm.student
  11. Where start_dt <= date_sub('${hivevar:etl_dt’,1})
  12. And end_dt > data_sub('${hivevar:etl_dt’,1})
  13. And studentNO is not null
  14. And studentNO != '’;

上述代碼的業(yè)務(wù)需求轉(zhuǎn)變后的代碼邏輯如下所示。

從dwm.student表中查詢出7個字段(Unique_id,、studentNO,、courseName、term,、score,、credithourstart_dt)的值并插入到tmp.student,。需要滿足where查詢條件:start_dt的值不大于給定的參數(shù)etl_dt-1,,end_dt的值不小于給定的參數(shù)etl_dt-1,,且需要去除studentNO為空的記錄。腳本需要支持重運行,,這里的重運行指的是重復運次那個SQL語句,,得到的結(jié)果與目標表一致。下面給出被測業(yè)務(wù)代碼與常見測試用例,。

a,、測試用例1:代碼及字段注釋檢查。

檢查發(fā)現(xiàn)代碼中所有字段都有注釋,;以上代碼非關(guān)鍵代碼,,可以不添加代碼描述注釋。檢查結(jié)果符合需求,,測試用例通過,。

b、測試用例2:表名正確性,。

檢查表名,,驗證源表和目標表的名稱是否符合需求。檢查結(jié)果符合需求,,測試用例通過,。

c、測試用例3:字段正確性,。

檢查查詢出的各個字段是否符合需求,。發(fā)現(xiàn)需要查詢的是”courseName“字段,但是查出來的是”courseNO“字段,。不符合需求,,測試用例不通過。

d,、測試用例4:數(shù)據(jù)過濾邏輯,。

檢查要求的where條件是否滿足需求。發(fā)現(xiàn)”end_dt>=“.不符合需求,,測試用例不通過,。

測試用例5:臟污數(shù)據(jù)處理。

檢查臟數(shù)據(jù)是否正確去除,。發(fā)現(xiàn)空值和NULL值已經(jīng)過濾,,符合需求,測試用例通過,。

e,、測試用例6:函數(shù)的使用。

代碼中使用的函數(shù)date_sub使用傳入的etl_dt值減去1,,與需求一致,。符合預期,,測試用例通過。

f,、測試用例7:數(shù)據(jù)寫入方式,。

代碼中使用的是insert overwtite,而不是insert into,。Insert into操作以追加的方式向Hive表尾部追加數(shù)據(jù),,二insert overwrite操作直接重寫數(shù)據(jù),,即先刪除Hive表的數(shù)據(jù),,再執(zhí)行寫入操作。因為要求腳本支持重運行,,所以需要使用insert overwrite來保證每次重運行的原數(shù)據(jù)被覆蓋,。符合需求,測試用例通過,。

2,、源表到目標表的場景

a、測試用例1:測試源表中數(shù)據(jù)是否正確映射到目標表,,判斷數(shù)據(jù)的信息和數(shù)據(jù)量是否正確,,主要驗證數(shù)據(jù)的完整性。

  1. Select * From (
  2. Select a.empno,upper(a.ename) as upper_ename,a.salary
  3. From default.ods a
  4. Where a.salary >= 5000
  5. ) b
  6. Left join default.dwd c
  7. On (b.empno = c.empno
  8. And b.upper_ename = c.ename
  9. And b.salary = c.salary)
  10. Where c.empno is null;
  11. 執(zhí)行上述SQL語句后,,期望得到的結(jié)果為0條,。

 b、測試用例2:主鍵唯一性檢查,。

  1. Select count(*)
  2. From (
  3. Select empno
  4. From dwd,、
  5. Group by empno
  6. Having count(*) > 1) a;
  7. 執(zhí)行上述SQL語句后,期望得到的結(jié)果為0條,。

 c,、測試用例2:主鍵唯一性檢查。

  1. Select cunt(*) from dwd wherer empno is null;
  2. 執(zhí)行上述SQL語句后,,期望得到的結(jié)果為0條,。

3、源表到目標表的場景

以下是一段與MapReduce任務(wù)相關(guān)的代碼,,實現(xiàn)的功能還輸入樣本數(shù)據(jù),,輸?shù)綐颖緦?yīng)的特征。其中,,輸入樣本以”\t“分隔,,包含name、id,、uniq_id,、data,、date共5列數(shù)據(jù),需要對每一列孫建軍使用特征計算模塊(feature_lib)進行計算,,并輸出計算后樣本和特征的合并結(jié)果,。需要輸出結(jié)果的順序為name、id,、uniq_id,、所有特征、date,,所有列數(shù)據(jù)=仍以”\t“分隔,。

Mapper.py的內(nèi)容如下。

  1. # -*-coding:utf-8-*-
  2. # 描述:輸入樣本數(shù)據(jù),,輸出特征
  3. import sys
  4. import os
  5. import json
  6. import time
  7. import traceback
  8. sys.path.append("./")
  9. import feature_lib.basic.v01 as fpy
  10. if __name__ == "__main__":
  11. for line in sys.stdin:
  12. ln = line.strip().split('t')
  13. if len(ln) != 5:
  14. continue
  15. # 樣本數(shù)據(jù)包含name,、id、uniq_id,、data,、date,且每列以'\t'分隔
  16. name, id, uniq_id, data, date = ln
  17. trans_data = json.load(data)
  18. try:
  19. feature_list, status = fpy.main(trans_data, date)
  20. if status == 1:
  21. continue
  22. for index in range(len(feature_list)):
  23. feature_list[index] = str(feature_list[index])
  24. if feature_list is None:
  25. continue
  26. else:
  27. # 輸出樣本及特征
  28. print(name + '\t' + id + '\t' + uniq_id + '\t' + '\t'.join(feature_list) + '\t' + date)
  29. except Exception as e:
  30. sys.stderr.write('import info error %s %S' % (traceback.format_exc()))
  1. Shell.sh的內(nèi)容如下,。
  2. #!/bin/bash
  3. #加載配置
  4. source ~/.bash_profile
  5. if [ "${base_home}" = "" ]; then
  6. base_home=~/feature_platfrom
  7. fi
  8. echo ${base_home}
  9. #commoncfg中配置了需要的特征計算包feature_lib的壓縮包路徑
  10. commoncfg = $base_home/config/common.cfg
  11. echo ${commoncfg}
  12. eval $(cat ${commoncfg})
  13. echo ${hadoop_jar}
  14. echo ${feature_lib}
  15. arg_num = ${#}
  16. if [ $arg_num == 1]; then
  17. task_id = $1
  18. else
  19. echo "task_id missing failed"
  20. exit 1
  21. fi
  22. module="basic"
  23. sub_module="all_v01"
  24. #樣本輸入路徑
  25. input_path="/user/hive/warehouse/tmp.db/${module}_$_{sub_module}_sample_${task_id}"
  26. #結(jié)果輸出路徑
  27. output_path="/user/hive/warehouse/tmp.db/${module}_$_{sub_module}_feature_${task_id}"
  28. hadoop fs -rm -r -f ${output_path}
  29. hadoop_jar /opt/CDH/lib/hadoop-mapreduce/hadoop-stremaming.hadoop.jar \
  30. -libjars /opt/CDH/lib/hive/lib/hive-exec-1.1.0-cdh5.11.0.jar \
  31. -jobconf mapred.job.name="get_feature_${module}_${sub_module}" \
  32. -jobconf mapreduce.reduce.shuffile.memory.limit.percent=0.1 \
  33. -jobconf mapreduce.reduce.shuffile.input.buffer.percent=0.3 \
  34. -jobconf mapreduce.map.memory.mb=2048 \
  35. -jobconf mapred.map.tasks=500 \
  36. -jobconf mapred.map.capacoty=100 \
  37. -jobconf mapred.reduce.tasks=100 \
  38. -jobconf mapred.job.priority=VERY_HIGH \
  39. -file mapper.py \
  40. -output $output_path \
  41. -partitioner org.apache.hadoop.mapred.lib.keyFieldBasedpartitioner \
  42. -cacheArchive ${feature_lib}

 a,、測試用例2:主鍵唯一性檢查。

檢查mapper代碼時需要注意輸入的樣本數(shù)據(jù)中的分隔符是否正確,,分隔后的列是否與實際對應(yīng),,輸出結(jié)果是夠滿足拼接條件,輸出順序是否正確等,。

 b,、測試用例2:主鍵唯一性檢查。

上述MapReduce任務(wù)執(zhí)行時會實時輸出執(zhí)行日志,,可以在shell.sh腳本中輸出關(guān)鍵內(nèi)容,,查看輸出內(nèi)容是否符合預期,例如,,通過代碼中的echo ${hadoop_jar}和echo ${feature_lib}等,。

另外,MapRedue框架自帶的日志內(nèi)容會輸出映射過程中的輸入文件記錄數(shù)及輸出文件記錄數(shù),。輸出文件記錄數(shù)理論上應(yīng)該與input_path對應(yīng)文件記錄數(shù)一致,。在maooer文件特恒計算都正常的情況下,即status=1,、feature_list is not None且計算沒有Exception的情況下,,速出文件記錄數(shù)應(yīng)該與輸入文件記錄數(shù)一致。如果兩者不一致,則說明一定存在計算錯誤的情況,,需要排查代碼及日志來定位問題,。

c、測試用例3:檢查shell腳本,。

shell腳本的測試點包括jar包的路徑,,MapReduce中相關(guān)文件的名稱及導入方式,mapper與reducer文件的名稱及運行方式,,MapReduce運行配置參數(shù)的正確性,,MapReduce輸入/輸出文件的路徑等。

例如,,shell.sh文件中引入了兩個jar包(hadop-streaming.jar,、hive-exec-1.1.0-cdh5.11.0.jar),因此需要驗證這些jar包的導入路徑是否正確,。另外,,還需要檢查MapReduce使用的輸入/輸出文件路徑,,檢查路徑是否存在且正確,。事實上,shell腳本運行時,,路徑導入類問題很容易暴露出來,,比較難衡量的是MaspRduce的運行配置參數(shù)(即通過-jobconf設(shè)置的參數(shù))是否合理。合理的參數(shù)配飾會使任務(wù)更優(yōu)化,,減少資源和時間消耗,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多