從這篇開始記錄一下集群遷移的事情

早先因為機房沒地方,就已經(jīng)開始規(guī)劃集群搬機房的事情,最近終于開始動手了,我會把這次不停機遷移的過程遇到的主要問題和矛盾以及各種解決方法記錄下來。
集群規(guī)模說大不大,幾百臺,總?cè)萘?0PB左右。Hadoop使用CDH 5.5.1加一些自定義patch的rpm打包編譯版本。
總的方案是集群不停機,在兩個機房之間架設專線,舊機房decommission,拉到新機房recommission。每天不能下線太多機器,要保證計算。
新機房提前架設90臺機器,測試帶寬。帶寬的測試方式是比較簡單粗暴的,就是在新機房拿幾十臺新機器搭一個集群,然后舊機房集群和新機房集群之間做distcp,帶寬能打滿即可。
新機房拆除小集群,合并到大集群里,機架感知按照 "/機房/機架" 這種方式劃分,然后提前做一段時間balancer。
當然在這里面會發(fā)現(xiàn)一些問題,我記錄在上一篇博客里了,這里再重復記錄一下。
萬兆網(wǎng)卡的mtu問題,新機房的新機器datanode報slow block receiver問題,調(diào)整網(wǎng)卡mtu從1500到9000,解決。
df 命令卡死,升級systemd并重啟解決
跑作業(yè)慢,打Centos 7 CPU補丁 重啟
廣播風暴問題,流量比較大,查看網(wǎng)口每機器每秒幾百條ARP通告,目前無解,后續(xù)運維VLAN解決。
詳情看 運維記錄系列二十三 https://blog.51cto.com/slaytanic/2141665
期間還遇到了decommission速度慢的問題,調(diào)整了一下dn參數(shù)dfs.datanode.max.transfer.threads到16384,然后調(diào)整NN參數(shù) dfs.namenode.replication.max-streams-hard-limit參數(shù)到8感覺也沒快多少,然后翻看源碼,在 src/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/UnderReplicatedBlocks.java 這個文件里面
public synchronized List<List<Block>> chooseUnderReplicatedBlocks(
int blocksToProcess) {
// initialize data structure for the return value
List<List<Block>> blocksToReplicate = new ArrayList<List<Block>>(LEVEL);
for (int i = 0; i < LEVEL; i++) {
blocksToReplicate.add(new ArrayList<Block>());
}
if (size() == 0) { // There are no blocks to collect.
return blocksToReplicate;
}
int blockCount = 0;
for (int priority = 0; priority < LEVEL; priority++) {
// Go through all blocks that need replications with current priority.
BlockIterator neededReplicationsIterator = iterator(priority);
Integer replIndex = priorityToReplIdx.get(priority);
// skip to the first unprocessed block, which is at replIndex
for (int i = 0; i < replIndex && neededReplicationsIterator.hasNext(); i++) {
neededReplicationsIterator.next();
}
blocksToProcess = Math.min(blocksToProcess, size());
if (blockCount == blocksToProcess) {
break; // break if already expected blocks are obtained
}
// Loop through all remaining blocks in the list.
while (blockCount < blocksToProcess
&& neededReplicationsIterator.hasNext()) {
Block block = neededReplicationsIterator.next();
blocksToReplicate.get(priority).add(block);
replIndex++;
blockCount++;
}
if (!neededReplicationsIterator.hasNext()
&& neededReplicationsIterator.getPriority() == LEVEL - 1) {
// reset all priorities replication index to 0 because there is no
// recently added blocks in any list.
for (int i = 0; i < LEVEL; i++) {
priorityToReplIdx.put(i, 0);
}
break;
}
priorityToReplIdx.put(priority, replIndex);
}
return blocksToReplicate;
}從這里獲取需要被復制的數(shù)據(jù)塊的索引,我們只需要將 Integer replIndex = proorityToReplIdx.get(priority);改為 Integer replIndex = 0;即可。
但是為了改一行代碼我還得重新編譯,就不劃算了。于是同事找了個工具叫byteman,jboss公司出品的內(nèi)存修改器,可以理解成針對Java進行內(nèi)存修改的金山游俠。
具體修改參考同事的github,我就不重復了。不過萬一內(nèi)存改崩潰了,本人不負任何責任。
https://github.com/whitelilis/whitelilis.github.io/issues/17
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁名稱:Hadoop運維記錄系列(二十四)-創(chuàng)新互聯(lián)
地址分享:http://chinadenli.net/article10/dgpcgo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、面包屑導航、網(wǎng)站制作、App設計、商城網(wǎng)站、網(wǎng)頁設計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容