自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淘寶主搜索離線集群完成Hadoop 2.0升級

系統(tǒng) Hadoop
淘寶搜索離線dump集群(hadoop&hbase)2013進行了幾次重大升級,本文中將這些升級的詳細過程、升級中所遇到的問題以及這些問題的解決方案分享給大家。至此,淘寶主搜索離線集群完全進入Hadoop 2.0時代。

搜索離線dump集群(hadoop&hbase)2013進行了幾次重大升級:

alt

2013-04

第一階段,主要是升級hdfs為2.0版本,mapreduce仍舊是1.0;同時hbase也進行了一次重大升級(0.94.5版本),hive升級到0.9.0;

2013-09,2013-12

第二階段,主要升級mapreduce到2.0版本即(YARN),hive升級到0.10.0,在13年年底的時候?qū)base進行了一次小版本升級;

至此,dump離線集群完全進入2.0時代:

alt

通過升級hdfs 2.0優(yōu)化shortcircuit read,使用domain socket通信等等提升了效率,加快了任務(wù)運行速度,同時支持成熟的NAMENODE HA,F(xiàn)ederation,解決了讓大家擔(dān)心的集群NN單點問題,集群容量和擴展性得到大大提升。

alt

通過升級yarn對集群資源進行更有效的管理,摒棄了slots的物理劃分,采用內(nèi)存資源控制使集群資源被更有效的利用,從而提高整個集群的吞吐,同時支持豐富的計算框架,為后續(xù)DUMP應(yīng)用架構(gòu)優(yōu)化調(diào)整提供了廣闊的舞臺。

當(dāng)然集群的升級過程也遇到了很多問題和困難

第一階段升級過程中遇到的主要問題:

1、hdfs升級為2.0后,需要同時升級下hive版本(hive-0.9.0-cdh4.1),之前使用老版本hive jar編譯的任務(wù)需要使用新版本jar包重新編譯

2、mr1任務(wù)要運行在hdfs 2.0上部分任務(wù)會運行失敗,主要是2.0中將原來的class換成了interface,需要重新編譯即可,少量代碼需要添加下throws IOException,依賴的hadoop-core jar包也被拆分成了幾個(common,hdfs,mr1等)

3、hdfs shell命令差異,主要是針對mkdir或者touchz等中間如果有不存在的路徑不會自動創(chuàng)建

4、從云梯distcp數(shù)據(jù)由于hdfs版本不兼容,必須使用hftp的方式,且因hftp不支持密碼訪問,后來patch解決

5、升級hdfs 2.0后集群整體讀I/O升高明顯,從而導(dǎo)致特別是I/O需求高的build任務(wù)延時

原因是2.0對dfs.client.read.shortcircuit的調(diào)整,在檢查是否有權(quán)限(dfs.block.local-path-access.user中配置的用戶名)進行shortcircuit讀取時如果沒有權(quán)限會將本地的datanode作為deadnode處理,然后數(shù)據(jù)通過遠程讀取。又因為hbase中dfs.client.read.shortcircuit.buffer.size設(shè)置的值不合適導(dǎo)致多讀了很多無謂的數(shù)據(jù),導(dǎo)致整個集群I/O升高。

解決方案:

設(shè)置dfs.client.read.shortcircuit.buffer.size=16K與hbase的block的大小相匹配。

詳細的分析過程見:

http://www.atatech.org/article/detail/2733/193

http://www.atatech.org/article/detail/7207/193

第二階段升級遇到的主要問題:

1、升級到y(tǒng)arn后,Capacity Schedule進行了更新,job提交只需要指定葉子queue名字即可,指定全路徑會報錯;

2、沒有了map/reduce slots的概念,集群只需配置可用的內(nèi)存大小,主要的參數(shù):

集群:

yarn.nodemanager.resource.memory-mb:                            一個nodemanager上可分配給container使用的物理內(nèi)存大小
yarn.scheduler.minimum-allocation-mb:                                  resource manage分配內(nèi)存的最小粒度,暫設(shè)成1024,job提交需要內(nèi)存必須為此參數(shù)的整數(shù)倍
yarn.scheduler.capacity.<queue>.maximum-am-resource-percent:   am所占資源比例,可按queue設(shè),暫設(shè)成0.3
yarn.scheduler.capacity.<queue>.user-limit-factor:            單個用戶提交job限制,可按queue設(shè),單用戶如要搶占最大資源,需要設(shè)大

應(yīng)用:

mapreduce.map.memory.mb,mapreduce.reduce.memory.mb:          map,reduce的內(nèi)存數(shù),默認是1024,2048,如需設(shè)大,必須是1024的整數(shù)倍,可以簡單理解為之前的slots數(shù)配置
mapreduce.map.java.opts,mapreduce.reduce.java.opts:           java child進程的jvm heap大小,比上面的值小些
mapreduce.job.reduce.slowstart.completedmaps:                      對于map數(shù)較多需要跑多輪,可以設(shè)大此值,延遲reduce啟動避免占用資源

3、yarn中不在兼容commons-cli-2.0-SNAPSHOT.jar,之前通過將該jar文件copy到hadoop classpath中使用的應(yīng)用需要部署到各自應(yīng)用的相關(guān)目錄下,并在提交任務(wù)的時候引用

4、一些使用0.19等老版本的hadoop-streaming.jar需要更換為新版本

5、container內(nèi)存超配被kill掉,考慮到j(luò)ob內(nèi)存的自然增長及一些使用共享內(nèi)存的任務(wù),所以設(shè)置yarn.nodemanager.vmem-pmem-ratio=false關(guān)閉物理內(nèi)存檢查

6、客戶端向AM獲取job status報錯:IOException

原因是AM內(nèi)存設(shè)置太小,頻繁GC導(dǎo)致,通過調(diào)大yarn.app.mapreduce.am.resource.mb解決

7、c2c_merge任務(wù)在yarn上運行緩慢

經(jīng)過排查分析是因使用的mmap文件在pagecache中頻繁換進換出導(dǎo)致,根本原因還是18與32內(nèi)核的差異,因為集群升級過程中也對內(nèi)核進行了升級,通過修改應(yīng)用代碼。

去除madvise設(shè)置的MADV_SEQUENTIA后問題解決,參考:

http://baike.corp.taobao.com/index.php/Kbuild在32內(nèi)核上性能退化問題

8、IPV4和IPV6差異引起的長短機器名問題及job data local比例低的問題

在yarn resource manager下顯示部分機器是長機器名,部分機器是短機器名。

hbase集群下顯示全是長機器名,原因是yarn與hbase獲取機器名調(diào)用的方法不一樣,得到的結(jié)果也不一樣,導(dǎo)致resourcemanager在分配container時進行優(yōu)先的host匹配是匹配不上,最后變成任意匹配導(dǎo)致。

獲取機器名差異的根本原因經(jīng)過分析是java處理ipv6有bug和yarn腳本bug共同導(dǎo)致。

http://bugs.sun.com/view_bug.do?bug_id=7166687

http://www.atatech.org/article/detail/10731/193

解決方案1:修改yarn腳本,并提交issue到社區(qū):https://issues.apache.org/jira/browse/YARN-1226

解決方案2:給集群配置上機架感知,且讓一個機器一個rack的虛擬機架配置,通過rack匹配繞開任意匹配,在http://www.atatech.org/article/detail/10731/193 中有詳細分析

9、由于我們當(dāng)時在方案1還未得出結(jié)論前臨時采用方案2快速解決線上data local低的問題后發(fā)現(xiàn)有部分任務(wù)提交失敗報錯: Max block location exceeded for split

原因是:配置了一個節(jié)點一個機架后CombineFileInputFormat獲取split的block localtion時會根據(jù)block分布在哪些rack上獲取locations信息,由于機架數(shù)等同于機器數(shù),獲取到的localtions數(shù)會超過集群的默認配置:

mapreduce.job.max.split.locations = 10,而yarn上修改了代碼會在超出這個配置值時拋出異常,所以任務(wù)提交失敗。

解決方案1:增大mapreduce.job.max.split.locations和集群節(jié)點數(shù)一致;

解決方案2:patch修改JobSplitWriter中超過配置值拋異常為打印警告日志,與升級前一致。

詳情見:http://www.atatech.org/article/detail/11707/193

10、gcih不能正常工作

GCIH:http://baike.corp.taobao.com/index.php/GCIH

不能正常工作的原因有兩個:

  • 集群升級到y(tǒng)arn后,nm管理job臨時目錄和distribute file的方式與tt不同,導(dǎo)致GCIH會生成多個mmap文件gcih.dat
  • 在修復(fù)上述問題的過程中,發(fā)現(xiàn)散列到不同磁盤上task,jvm classpath加載順序不一致,導(dǎo)致GCIH不能正常工作

解決方案:升級GCIH

將gcih.dat生成到gcih.jar軟連對應(yīng)的源目錄下,這樣一個job只會有一個,調(diào)整gcih.jar的加載順序,放到preload里。

11、集群資源使用100%,job一直hang住

當(dāng)集群root跑滿100%而下面的子queue未滿時(因為希望集群的資源共享競爭,queue的最大可用資源會進行適當(dāng)?shù)某?,不會觸發(fā)搶占reduce資源的過程。

解決方案:

  • 不同queue的大任務(wù)盡量避開運行
  • 后續(xù)patch修改在root滿時觸發(fā)搶占

詳細分析過程見:http://www.atatech.org/article/detail/10924/193

12、load任務(wù)寫hbase偶爾會卡住

原因是當(dāng)集群中有節(jié)點掛掉或者網(wǎng)絡(luò)等出現(xiàn)異常可能會導(dǎo)致hbaseclient在select時無線等待,而鎖無法釋放

解決方案:在hbase client的代碼里設(shè)置超時時間。

具體原因分析見:http://www.atatech.org/article/detail/9061/193

13、集群有節(jié)點出現(xiàn)問題,上面的任務(wù)一直失敗,后續(xù)別的任務(wù)起來后還會將container分配到這個節(jié)點。原因是yarn和之前mr1黑名單機制發(fā)生了改變,mr1是全局的黑名單,一旦被加入黑名單后續(xù)任務(wù)不會再分配,yarn的黑名單是在AM上的,也就是任務(wù)級別的,被AM加入黑名單后可以保證當(dāng)前任務(wù)不會被分配上去,但是其他任務(wù)的AM中是沒有這個信息的,所以還是會分配任務(wù)上去。

解決方案:等待NM將節(jié)點健康信息匯報給RM,RM將節(jié)點從集群摘除

如果一直無法匯報,可以通過yarn支持的外圍用戶腳本來做健康檢查和匯報(需要在yarn配置中配置該腳本)

詳細分析見:http://www.atatech.org/article/detail/11266/193

hive相關(guān):

1、out join被拆成多個job

問題發(fā)現(xiàn):loader在做多表join的過程時原來的一個job被hive拆成了8個job,耗時由原來的3分鐘變成30分鐘。

通過patch解決,參考:

http://mail-archives.apache.org/mod_mbox/hive-user/201305.mbox/+r2mdv_tsofa@mail.gmail.com>

https://issues.apache.org/jira/browse/HIVE-4611

2、設(shè)置mapreduce.map.tasks不生效

分析是Hive的InputFormat的問題。

如InputFormat設(shè)置為org.apache.hadoop.hive.ql.io.CombineHiveInputFormat,需要設(shè)置mapreduce.input.fileinputformat.split.maxsize來控制map的個數(shù);

如InputFormat設(shè)置為org.apache.hadoop.hive.ql.io.HiveInputFormat,則此參數(shù)生效;

解決方案:將hive配置中默認的InputFormat配置成org.apache.hadoop.hive.ql.io.HiveInputFormat

3、寫redis的hive job拆成了兩個job

hive默認設(shè)置中,當(dāng)map輸出文件太小,會新起一個job合并小文件

解決方案:set hive.merge.mapfiles=false;

仍然存在待解決的問題:

1)有部分job會導(dǎo)致單disk io到100%,拖慢這個任務(wù);

2)機器出現(xiàn)異常問題,task全部都在localizing,job一直pending,只能kill掉重新提交;

3)job或者task被kill掉后,日志也被刪除,history中看不到該job的信息,排查問題困難;

集群HADOOP 2.0的升級,在更好的支持現(xiàn)有業(yè)務(wù):主搜,商城,店鋪內(nèi),PORA個性化,尼米茲平臺,中文站(offer,company,minisearch),國際站(ae,sc,p4p,aep4p,scp4p)的基礎(chǔ)上為后續(xù)離線dump平臺:ADUMP的建設(shè)夯實了基礎(chǔ)。

一個統(tǒng)一存儲,模塊插件化設(shè)計,減少各業(yè)務(wù)線之間數(shù)據(jù)冗余,避免重復(fù)開發(fā),同時支持快速響應(yīng)各條業(yè)務(wù)線新需求的全新平臺ADUMP將在3月底左右上線,緊跟集群升級的節(jié)奏,離線DUMP也將馬上進入2.0時代,敬請期待!

責(zé)任編輯:黃丹 來源: 淘寶搜索技術(shù)博客
相關(guān)推薦

2024-07-04 10:48:53

2012-09-10 15:18:11

云梯淘寶大數(shù)據(jù)

2009-06-19 13:12:05

Spring2.0Spring2.0.7

2016-10-24 15:45:19

2009-06-05 08:55:16

2009-06-23 08:35:12

微軟Windows 7操作系統(tǒng)

2009-09-17 08:39:52

Windows 7系統(tǒng)升級

2012-05-11 09:54:23

微軟Windows 8

2012-12-12 09:53:50

Windows 8

2010-05-06 09:57:45

RHEL 5.5升級

2009-08-16 09:25:55

Windows 7系統(tǒng)升級

2009-05-27 08:36:34

2020-05-21 09:17:51

Vue 3Vue代碼

2009-12-28 16:39:56

Fedora 9

2009-06-25 08:53:44

微軟Windows 7升級工具

2012-06-29 09:19:30

Windows 8微軟

2010-09-30 09:09:04

2010-04-07 09:21:42

Windows 7升級顧問

2009-04-30 08:47:37

iPhone蘋果移動OS

2023-09-27 19:20:52

JDK17內(nèi)存占用率
點贊
收藏

51CTO技術(shù)棧公眾號