基于原版Hadoop的YDB部署(转)
?
YDB依賴環(huán)境準(zhǔn)備
一、硬件環(huán)境
硬件如何搭配,能做到比較高的性價比,不存在短板。合理的硬件搭配,對系統(tǒng)的穩(wěn)定性也很關(guān)鍵。
1.CPU不是核數(shù)越高越好,性價比才是關(guān)鍵。
??????經(jīng)常遇到很多的企業(yè)級客戶,他們機器配置非常高,CPU有128 VCore,256G內(nèi)存,但是只掛載了1塊8T的SATA硬盤,千兆網(wǎng)卡。
??????這樣的機器配置比較適合計算密集型的業(yè)務(wù),但是如果是IO密集型的業(yè)務(wù)的話,就會發(fā)現(xiàn)磁盤成為瓶頸,會發(fā)現(xiàn)磁盤利用率100%,網(wǎng)絡(luò)利用率100%,但是CPU只用了不到5%。存在巨大的資源浪費。
??????這種問題在Hadoop系統(tǒng)中尤為突出,如果是這樣的配置的話,很可能一個MapReduce程序就會導(dǎo)致全部的磁盤與網(wǎng)絡(luò)都是使用率100%,這樣所有的心跳都發(fā)送不出來,而本身Hadoop又沒有很好的網(wǎng)絡(luò)限速機制,就會導(dǎo)致DataNode與TaskManager陸續(xù)的因為心跳超時而掛掉。
2.SAS、SATA與SSD 磁盤的選擇與對比
???????IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數(shù)),是衡量磁盤性能的主要指標(biāo)之一。IOPS是指單位時間內(nèi)系統(tǒng)能處理的I/O請求數(shù)量,I/O請求通常為讀或?qū)憯?shù)據(jù)操作請求。對于隨機讀寫頻繁的應(yīng)用,如OLTP(Online Transaction Processing),IOPS是關(guān)鍵衡量指標(biāo)。
???????吞吐量(Throughput),指單位時間內(nèi)可以成功傳輸?shù)臄?shù)據(jù)數(shù)量。對于大量順序讀寫的應(yīng)用,如VOD(Video On Demand),則更關(guān)注吞吐量指標(biāo)。
???????一般SSD的IOPS是普通磁盤的千倍以上,但是吞吐量只是普通磁盤的2倍左右。所以如果我們的業(yè)務(wù)是順序讀寫偏多的則建議選用普通SAS盤(如存儲形業(yè)務(wù),以及Hive的文本數(shù)據(jù)分析),但是如果我們的業(yè)務(wù)是隨機讀寫偏多,那么選擇SSD 更劃算(如采用列存儲的系統(tǒng),以及YDB的索引系統(tǒng))
???????如下圖所示,普通磁盤的IOPS與SSD磁盤的性能相差懸殊,特別是企業(yè)級SSD磁盤,能相差千倍以上。
?
?
???????吞吐量:連續(xù)讀寫速度,性能提升在2倍左右。
?
?
?
3.SSD的顆粒請不要選擇TLC
TLC的壽命太短,雖然便宜,但是用不了幾個月就基本報廢,一般個人電腦使用。不適合企業(yè)級使用,性價比較好的建議選用MLC顆粒。
?
SSD顆粒目前主要分三種:SLC、MLC和TLC
??????SLC=Single-LevelCell,即1bit/cell,速度快壽命長,價格超貴(約MLC3倍以上的價格),約10萬次擦寫壽命?
???????MLC=Multi-LevelCell,即2bit/cell,速度一般壽命一般,價格一般,約3000---10000次擦寫壽命?
???????TLC=Trinary-LevelCell,即3bit/cell,也有Flash廠家叫8LC,速度相對慢壽命相對短,價格便宜,約500次擦寫壽命,目前還沒有廠家能做到1000次擦寫。
??????簡單地說SLC的性能最優(yōu),價格超高。一般用作企業(yè)級或高端發(fā)燒友。MLC性能夠用,價格適中為消費級SSD應(yīng)用主流,TLC綜合性能最低,價格最便宜。但可以通過高性能主控、主控算法來彌補、提高TLC閃存的性能。
?
?
4.延云YDB建議的硬件配置
一、延云YDB最低配置
1.內(nèi)存:32G
2.磁盤:
?????????????離線模式:至少2塊獨立的物理硬盤分別用于HDFS數(shù)據(jù)盤、系統(tǒng)盤。
?????????????實時模式:至少3塊獨立的物理磁盤分別用于Kafka數(shù)據(jù)盤,、HDFS數(shù)據(jù)盤、系統(tǒng)盤
3.CPU:至少8線程(1顆,4核,8線程)
二、如下場景,延云將不再提供安裝技術(shù)支持
1.低于最低配置要求的用戶。
2.32位系統(tǒng)的用戶:這類系統(tǒng)最大只有4G內(nèi)存。
三、延云YDB高性能配置 (毫秒響應(yīng))
1.機器內(nèi)存:128G
2.磁盤:企業(yè)級SSD,600~800G*12個磁盤
3.CPU:32線程(2顆,16核,32線程)
4.萬兆網(wǎng)卡
三、延云YDB常規(guī)配置 (秒級響應(yīng))
1.機器內(nèi)存:128G
2.磁盤:2T*12的磁盤
3.CPU:24線程(2顆,12核,24線程)
4.千兆網(wǎng)卡
?
?
二、磁盤如何掛載?
????1.邏輯卷的問題
??????一般很多Linux的默認(rèn)安裝,會將磁盤直接以邏輯卷的方式掛載,邏輯卷的優(yōu)點是后期的擴容以及調(diào)整磁盤非常的方便,看著比RAID好用多了,但是默認(rèn)的邏輯卷配置方式是只有一塊盤在工作 ,其他幾塊盤都閑著,發(fā)揮不出來多塊盤的性能,也就是說如果在邏輯卷里面掛了10塊盤,那么默認(rèn)的邏輯卷的配置,只能發(fā)揮出一塊盤的性能。所以對于YDB系統(tǒng)來說,大家不要使用邏輯卷。
????2.關(guān)于RAID
??????有些客戶比較擔(dān)心數(shù)據(jù)丟失,將磁盤做了RAID10或者RAID5,其實這樣是沒有必要的,因為本身默認(rèn)配置Hadoop是有三份副本的,并不怕磁盤損壞。RAID10與RAID5會導(dǎo)致磁盤容量只有原先的一半,由于需要雙寫,磁盤整體吞吐量降低了一倍。而且RAID5一旦損壞了一塊磁盤,就需要通過奇偶校驗還原數(shù)據(jù),讀的吞吐量直接降低到原先了五分之一,而且更換新盤后,通過校驗要還原原先盤的數(shù)據(jù)的時候,經(jīng)常會發(fā)生雪崩現(xiàn)象,IO瞬間增大,導(dǎo)致其他盤陸續(xù)的跟著掛掉。所以對于YDB系統(tǒng)來說,不推薦使用RAID 10或RAID5.還有一些客戶,會將所有的盤都做成一個完整的RAID0,RAID0的缺點就是一塊盤損壞,整個系統(tǒng)就壞掉,但是RAID0確實會比單塊磁盤速度好,所以如果能做raid0我更推薦2個盤組成一起做一個RAID0,而不是整體所有磁盤都做成一個RAID0.
????3.關(guān)于系統(tǒng)盤與數(shù)據(jù)盤
??????好多客戶,在掛盤的時候,為了節(jié)省磁盤空間,更充分的利用資源,會將一個8T的物理磁盤劃分成兩個邏輯分區(qū),一個邏輯分區(qū)作為系統(tǒng)盤,另一個邏輯分區(qū)作為數(shù)據(jù)盤。但是數(shù)據(jù)盤一般會比較繁忙的,但是由于他們底層都共用的是同一塊物理磁盤,就會導(dǎo)致系統(tǒng)盤實際上也會特別繁忙,系統(tǒng)盤繁忙會導(dǎo)致整個系統(tǒng)會變的非常的慢,執(zhí)行任何Linux命令都很慢,Socket連接建立也緩慢,很多系統(tǒng)會因此而超時斷線,所以延云YDB建議操作系統(tǒng)要獨立一塊磁盤,數(shù)據(jù)盤不要與操作系統(tǒng)共用同一塊盤,否則數(shù)據(jù)盤很慢的時候,運行在操作系統(tǒng)上的軟件都跟著慢,ZooKeeper之類的服務(wù)也很容易掛掉。
??????另外還有一部分客戶,可能因某種習(xí)慣,默認(rèn)會給系統(tǒng)盤的跟目錄預(yù)留的存儲空間特別小,比如說只預(yù)留了10~30個G的空間,這樣其實對大數(shù)據(jù)系統(tǒng)來說風(fēng)險較大,以Ambari為例,他的log默認(rèn)是記錄在/var/log下的,這30G的空間會很快的被LOG記滿,大家都知道一旦操作系統(tǒng)根目錄滿了意味著什么? 將是所有服務(wù)不可用,這樣隱患太大了。所以延云建議系統(tǒng)跟目錄盡量留大一點的磁盤空間,如200G,默認(rèn)CentOS給分配50G空間也太小,如果Hadoop等日志沒有及時清理掉,將來隱患較大
?
?
????4.關(guān)于磁盤陣列與云
??????有相當(dāng)一部分的客戶使用云服務(wù)器,將機器虛擬化后確實節(jié)省了很多的資源,提高了硬件的利用率。目前的云服務(wù)器有相當(dāng)一部分的解決方案是采用外掛存儲的方式將磁盤統(tǒng)一的掛載到遠(yuǎn)程的一個磁盤陣列上去。這個時候磁盤陣列是單點,一旦發(fā)生斷電或者磁盤陣列出現(xiàn)問題,因為Hadoop的三分副本都存儲在這一個磁盤陣列上,一但丟失就會導(dǎo)致整個Hadoop集群不可用。如果有條件,我更建議做多個磁盤陣列而不是一個磁盤陣列單點,這樣通過Hadoop的機架策略,可以將 Hadoop 的三份副本分別存儲在不同的磁盤陣列上,NameNode以及SNameNode也分別存儲在不同的磁盤陣列上,這樣即使其中一個磁盤陣列出現(xiàn)了故障,我們的Hadoop也能夠恢復(fù)服務(wù),而且不丟數(shù)據(jù)。
??????另外由于虛擬化以后,一個真實的物理機上面可能會開多個虛擬機,如果這個物理機硬件發(fā)生損壞,這個物理機上的虛擬機也有異常,三個副本都存儲在這臺機器上的文件的數(shù)據(jù)會丟失,延云建議虛擬機廠商與Hadoop廠商協(xié)同,采用Hadoop機架技術(shù),將位于同一物理機上的虛擬機標(biāo)記在同一個機架上,以免造成數(shù)據(jù)丟失。
??????虛擬化后也存在系統(tǒng)盤與數(shù)據(jù)盤的問題,雖然在虛擬機里看到了系統(tǒng)盤與數(shù)據(jù)盤確實分離了,但是在物理機上有可能是在虛擬機A里面的系統(tǒng)盤,又作為了虛擬機B的數(shù)據(jù)盤,這樣當(dāng)虛擬機B的數(shù)據(jù)盤特別繁忙的時候,會造成虛擬機A的響應(yīng)非常慢。針對這種情況延云YDB建議,將物理機的磁盤分類,一些磁盤專門用于掛系統(tǒng)盤,一些磁盤專門用于掛數(shù)據(jù)盤,不允許交叉使用,即不允許一個物理盤即掛數(shù)據(jù)盤又被掛成系統(tǒng)盤
????5.將大磁盤空間的硬盤與小磁盤空間的硬盤混合掛載
??????可能是處于歷史原因,部分客戶的系統(tǒng)上出現(xiàn)了大小盤混合掛載的情況,比如說10塊磁盤,有的是300G,有的是8T的磁盤,他們混搭在一起。但是目前的hadoop對這樣的盤支持的并不友好,會出現(xiàn)300G的硬盤已經(jīng)滿了,8T的硬盤還沒使用到原先的十分之一的情況,針對這種情況,延云建議數(shù)據(jù)盤盡量大小一樣,別出現(xiàn)有的盤很大,有的盤很小的情況。那種300G的磁盤還是留作操作系統(tǒng)盤為好。
?
?
三、操作系統(tǒng)如何選擇
1.延云推薦使用CentOS 6.6,6.5的系統(tǒng)(請不要使用CentOS7)
2.盡量選擇安裝英文語言環(huán)境,中文版Ambari有時會有問題,。
3.安裝桌面版,請別安裝最簡版。
4.配置系統(tǒng)的yum源,如果部署Ambari會用到。
?
??????開源世界確實好,選擇很多,但是意味著也坑很多。
??????對于YDB來說,是不挑操作系統(tǒng)版本的,只要您的系統(tǒng)能安裝上Hadoop,那么YDB一般都能運行起來。甚至有些同學(xué)還在MAC上調(diào)試YDB。但是如果您是要運行在生產(chǎn)系統(tǒng)上,操作系統(tǒng)的選擇就尤為重要了。
??????CentOS7筆者在其中一個客戶下踩了一個巨坑,一個內(nèi)核的BUG導(dǎo)致系統(tǒng)不斷重啟,所以對比較新的內(nèi)核版本還是比較畏懼,所以筆者不是特別推薦大家使用比較新的系統(tǒng),建議大家選用經(jīng)過較多生產(chǎn)系統(tǒng)上驗證過的穩(wěn)定版本。如果非要推薦一個版本,那么延云推薦使用Centos 6.6的系統(tǒng),因為延云的日常開發(fā)與測試均在這個版本上進(jìn)行。
??????CentOS7我們當(dāng)時踩的坑叫Transparent Huge Pages (THP)的BUG,在負(fù)載高的時候會造成機器的反復(fù)重啟,并且從HDP官方也證實了這個BUG,http://www.cloudera.com/documentation/enterprise/latest/topics/cdh_admin_performance.html,但是我們按照上面的方法進(jìn)行設(shè)置后,機器不重啟了,但是依然發(fā)生偶爾斷網(wǎng)的情況。
?
四、操作系統(tǒng)設(shè)置
1.Ulimit配置
??????操作系統(tǒng)默認(rèn)只能打開1024個文件,打開的文件超過這個數(shù)發(fā)現(xiàn)程序會有“too many open files”的錯誤,1024對于大數(shù)據(jù)系統(tǒng)來說顯然是不夠的,如果不設(shè)置,基本上整個大數(shù)據(jù)系統(tǒng)是“不可用的”,根本不能用于生產(chǎn)環(huán)境。
??????配置方法如下:
echo?"*??soft????nofile??128000" >> /etc/security/limits.conf
echo?"*??hard????nofile??128000" >> /etc/security/limits.conf
echo?"*??soft????nproc??128000" >> /etc/security/limits.conf
echo?"*??hard????nproc??128000" >> /etc/security/limits.conf
cat /etc/security/limits.conf
sed -i 's/1024/unlimited/' /etc/security/limits.d/90-nproc.conf
cat/etc/security/limits.d/90-nproc.conf
ulimit -SHn128000
ulimit -SHu 128000
2.Swap的問題
??????在10~20年前一臺服務(wù)器的內(nèi)存非常有限,64m~128m,所以通過swap可以將磁盤的一部分空間用于內(nèi)存。但是現(xiàn)今我們的服務(wù)器內(nèi)存普遍達(dá)到了64G以上,內(nèi)存已經(jīng)不再那么稀缺,但是內(nèi)存的讀取速度與磁盤的讀取相差倍數(shù)太大,如果我們某段程序使用的內(nèi)存映射到了磁盤上,將會對程序的性能照成非常嚴(yán)重的影響,甚至導(dǎo)致整個服務(wù)的癱瘓。對于YDB系統(tǒng)來說,要求一定要禁止使用Swap.
??????禁用方法如下,讓操作系統(tǒng)盡量不使用Swap:
echo?"vm.swappiness=1" >> /etc/sysctl.conf
sysctl -p
sysctl -a|grep swappiness
?
3.網(wǎng)絡(luò)配置優(yōu)化
echo?"?net.core.somaxconn = 32768?" >> /etc/sysctl.conf
sysctl -p
sysctl -a|grepsomaxconn
?
4.SSH無密碼登錄
安裝 Hadoop與Ambari均需要無密碼登錄
設(shè)置方法請參考如下命令
ssh-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
?
ssh-copy-id root@ydbslave01
ssh-copy-id root@ydbslave02
…..
5.關(guān)閉防火墻
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
chkconfig iptables off
/etc/init.d/iptables stop
service iptables stop
iptables -F
?
6.配置機器名,以及hosts域名解析
hostname ydbmaster
vi /etc/sysconfig/network
vi /etc/hosts
?
切記 hosts文件中 不要將localhost給注釋掉,并且配置完畢后,執(zhí)行下 hostname -f 看下 是否能識別出域名
?
7.setenforce與Umask配置
?setenforce
setenforce 0
sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/refresh-packagekit.conf
cat /etc/yum/pluginconf.d/refresh-packagekit.conf
?Umask
umask 0022
echo umask 0022 >> /etc/profile
8.檢查/proc/sys/vm/overcommit_memory的配置值
???如果為2,建議修改為0,否則有可能會出現(xiàn),明明機器可用物理內(nèi)存很多,但JVM確申請不了內(nèi)存的情況。
9.語言環(huán)境配置
先修改機器的語言環(huán)境
#vi /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
然后配置環(huán)境變量為utf8
echo "export LANG=en_US.UTF-8 " >> ~/.bashrc
source ~/.bashrc
export|grep LANG
?
10.配置時間同步
??????Hadoop,YDB等均要求機器時鐘同步,否則機器時間相差較大,整個集群服務(wù)就會不正常,所以一定要配置。建議配置NTP服務(wù)。
集群時間必須同步,不然會有嚴(yán)重問題
參考資料如下:http://www.linuxidc.com/Linux/2009-02/18313.htm
?
11.JDK安裝部署
??????YDB支持JDK1.7,JDK1.8,為了便于管理和使用,建議使用YDB隨機提供的JDK1.8
建議統(tǒng)一安裝到/opt/ydbsoftware路徑下。
?
12.環(huán)境變量
請大家千萬不要在公共的環(huán)境變量配置HIVE、Spark、LUCENE、HADOOP等環(huán)境變量,以免相互沖突。
13.請檢查盤符,不要含有中文
??????尤其是Ambari,有些時候,使用U盤或移動硬盤復(fù)制軟件,如果這個移動硬盤掛載點是中文路徑,這時在安裝Ambari的時候會出現(xiàn)問題,一定要注意這個問題。
?
14.檢查磁盤空間,使用率不得超過90%
??????默認(rèn)Yarn會為每臺機器保留10%的空間,如果剩余空間較少,Yarn就會停掉這些機器上的進(jìn)程,并出現(xiàn)Container?released on a *lost* node錯誤。
?
15.關(guān)鍵日志,定時清理,以免時間久了磁盤滿了
如可以編輯crontab -e 每小時,清理一次日志,尤其是hadoop日志,特別占磁盤空間
?
0 */1 * * * find?/var/log/hadoop/hdfs??-type f -mmin +1440 |grep -E "\.log\." |xargs rm -rf
?
?
?
?
?
?
?
第五章非HDP版Hadoop基礎(chǔ)服務(wù)配置要點
一、Hadoop服務(wù)-注意事項
1)NameNode:是HDFS的主節(jié)點,是Hadoop最至關(guān)重要的服務(wù),一旦出問題,整個集群都不可用,NameNode的editlog與image目錄,一定要配置多盤,設(shè)置冗余,如果有必要,配置RAID 10。
2)SNameNode:是Namenode的備份節(jié)點,一旦NameNode機器損壞,可以通過SNameNode恢復(fù)數(shù)據(jù),故YDB要求一定要啟動SNameNode服務(wù),并且SNameNode不可與NameNode位于同一個物理機上?。
3)雙NameNode HA:為了高可用,有些客戶會啟用HA,延云不建議啟用HA,如果必須啟用一定要確保首節(jié)點為Active狀態(tài),而不是Stand by狀態(tài),否則整個集群的NameNode響應(yīng)會比較慢,從而影響整個集群的響應(yīng)速度。
4)一定要確保dfs.datanode.data.dir與yarn.nodemanager.local-dirs的目錄配置的是所有的數(shù)據(jù)盤,而不是配給了系統(tǒng)盤,特別多的用戶在初次安裝Hadoop的時候忘記配置這個,導(dǎo)致默認(rèn)將數(shù)據(jù)都存儲在了/tmp目錄。另外系統(tǒng)盤一定要與數(shù)據(jù)盤分離,否則磁盤特別繁忙的時候會造成操作系統(tǒng)很繁忙,ZooKeeper之類的容易掛掉。
5)規(guī)劃好Hadoop的logs目錄,盡量分給一個大點磁盤存儲空間的目錄,否則經(jīng)常會出現(xiàn)導(dǎo)入幾十億數(shù)據(jù)后,logs目錄將系統(tǒng)/var/log給撐滿,占用率100%
6)確保將來準(zhǔn)備分配給YDB的HDFS目錄有讀寫權(quán)限,建議第一次新手安裝,取消HDFS的權(quán)限驗證,配置dfs.permissions.enabled?為false,并重啟集群。
7)Hadoop的logs目錄要配置上定期清理,以免時間久了,硬盤被撐爆。
8)確保HDFS安裝成功,一定要手工通過hadoop??-put命令,上傳一個文件試一試。
9)打開8088,檢查Yarn是否啟動成功, VCores Total \Memory Total 分配的是否正確。經(jīng)常有朋友忘記更改Yarn的默認(rèn)配置導(dǎo)致一臺128G內(nèi)存的機器最多只能啟動2個進(jìn)程,只能使用8G內(nèi)存。
10)yarn.nodemanager.resource.memory-mb用于配置Yarn當(dāng)前機器的可用內(nèi)存,通常配置當(dāng)前機器剩余可用內(nèi)存的80%.
11)yarn.scheduler.minimum-allocation-mb為一個Yarn?Container申請內(nèi)存的最小計費單位,建議調(diào)小一些,如128,讓計費更精準(zhǔn).
12)yarn.scheduler.maximum-allocation-mb為一個Yarn container可以申請最大的內(nèi)存,建議調(diào)整為32768 (不一定真用到這些)
13)不建議啟用CGROUPS,進(jìn)行CPU隔離,對于即席系統(tǒng)來說,盡量充分利用資源。
14)yarn.nodemanager.resource.cpu-vcores 當(dāng)前機器可以啟動的Yarn container的數(shù)量,建議配置為當(dāng)前機器的cpu的線程數(shù)的80%。
15)yarn.scheduler.maximum-allocation-vcores配置的稍微大一些,以便單個container能夠多啟動一些線程。
16)yarn.nodemanager.pmem-check-enabled與yarn.nodemanager.vmem-check-enabled一定要都配置成false,因為1.6版本的Spark有BUG,會使用較多的堆外內(nèi)存,Yarn會kill掉相關(guān)container,造成服務(wù)的不穩(wěn)定。
17)檢查mapreduce.application.classpath 里面的值是否有配置的jar包并不存在,典型的情況下是找不到lzo的包(許多廠商的安裝部署會配置該參數(shù))。如果有的jar包找不到,建議注釋掉相關(guān)依賴,否則可能會造成YDB啟動失敗,如默認(rèn)的HDP集群就要將其中的lzo的配置給注釋掉/usr/hdp/${hdp.version}/hadoop/lib/hadoop-lzo-0.6.0.${hdp.version}.jar;如果是紅象云騰Power版本在最后加上這個 /usr/crh/4.1.5/hadoop/share/hadoop/tools/lib/*
18)為了便于查找問題,我們一般保留7天的Hadoop日志,可以配置Yarn日志清理yarn.nodemanager.delete.debug-delay-sec?????為??604800 (7天)
19)調(diào)整dfs.datanode.max.transfer.threads的值,默認(rèn)4096太小,建議調(diào)整為10240
20)調(diào)整ipc.server.listen.queue.size為32768
21)調(diào)整yarn.resourcemanager.am.max-attempts的值為10000000,默認(rèn)的2次太小,客戶測試過程反復(fù)的kill就會導(dǎo)致整個任務(wù)失敗。
二、Spark 需要使用延云提供的spark版本
1)無需配置,只需要解壓開放到指定目錄即可,我們一般解壓到/opt/ydbsoftware/spark
2)請大家不要啟動spark服務(wù),YDB本身會自己調(diào)用Spark啟動服務(wù),無須我們額外為Spark啟動服務(wù)。
三、ZooKeeper服務(wù)注意事項
第一:要探測ZooKeeper的2181端口是否啟動 可以通過netstat –npl|grep 2181來查看
第二:ZooKeeper的數(shù)據(jù)目錄別與HDFS的數(shù)據(jù)盤放在一起,盡量獨立一個磁盤,或者放在系統(tǒng)盤,否則數(shù)據(jù)盤特別繁忙的時候ZooKeeper本身非常容易掛掉。如果機器富余,建議將ZK單獨部署一個集群,不要混搭,如果因機制資源有限,必須混搭,請將zookeeper部署在通常來說負(fù)載不很很高的Master節(jié)點。
第三:ZooKeeper的日志清理要打開,否則會出現(xiàn)系統(tǒng)運行幾個月后,ZooKeeper所在的磁盤硬盤變滿的情況,將zoo.cfg里的這兩個配置項注釋開即可:
autopurge.purgeInterval=24
autopurge.snapRetainCount=30
第四:YDB使用的ZK的版本一定要與ZK的版本一致,如果不一致請更換ya100/lib下的zookeeper相關(guān)jar包。
?
?
四、Kafka注意事項
如果kafka配置的不好, 會發(fā)生比較嚴(yán)重的數(shù)據(jù)傾斜,而且在壓力較大的情況會導(dǎo)致數(shù)據(jù)丟失。所以跟Kafka有關(guān)的如下配置,請一定要認(rèn)真閱讀
注意kafka server 的num.partitions一定要大于總分片數(shù)的兩倍,否則有的進(jìn)程消費不到數(shù)據(jù),導(dǎo)致數(shù)據(jù)傾斜。YDB的總分片數(shù)為YA100_EXECUTORS*(spark.executor.max.usedcores);
注:spark.executor.max.usedcores默認(rèn)(沒有配置)為2個,表示每個進(jìn)程會啟動2個分片。
l數(shù)據(jù)丟失根本問題在于磁盤與網(wǎng)絡(luò)是否繁忙!!!!!!
如果磁盤長時間使用率100%,必出現(xiàn)丟數(shù)據(jù),會出現(xiàn)如下異常,配置的kafka retry機制無效
l如果我們先前采用的send方法沒使用callback,一旦消息發(fā)送失敗,我們沒有處理異常的話,這個消息就丟了。
這個問題如何解決?
1)如果有條件,Kafka盡量獨立集群,最低要求也一定要獨立磁盤,并且寫入限速
獨立磁盤是解決問題的根本,磁盤很繁忙的情況下,broker出錯的概率很大。
2)send 里面的callback,如果是異常一定要自己做容錯處理
發(fā)現(xiàn)send函數(shù)里的callback,一定要對Exception exception不是null的情況做重試處理,一定要處理,根據(jù)判斷重試幾次。
3)調(diào)整kafka的參數(shù)
a)建議在Producter端增加如下參數(shù)
????????props.put("compression.type", "gzip");
????????props.put("linger.ms", "50");
????????props.put("acks", "all");
????????props.put("retries ", 30);
????????props.put("reconnect.backoff.ms ", 20000);
????????props.put("retry.backoff.ms", 20000);
b)在Server端的broker增加如下配置
| ? |
| ? |
| ? |
?
?
?
?
第六章非HDP版本的YDB部署
一、安裝前的準(zhǔn)備
請參考第三章基本環(huán)境注意事項,第四章的依賴的服務(wù)注意事項,準(zhǔn)備基礎(chǔ)環(huán)境,這個很重要。
二、YDB軟件下載
從http://url.cn/42R4CG8獲取延云軟件
1)下載延云YDB
2)延云YDB提供的Spark
注意一定要使用延云提供的Spark,不能從其他地方下載
該Spark延云修正了一些BUG,以及在SQL解析上做了處理
3)JDK1.8
?
?
?
三、特殊版本的Spark的編譯
???????如果我們的Hadoop版本比較特殊,大家可以從延云下載Spark源碼執(zhí)行進(jìn)行編譯。
編譯示例如下:
修改源碼包里面的ydb.combile.sh,將里面的hadoop改成我們對應(yīng)的版本。
?
然后直接運行 sh ./ydb.compile.sh 即可,編譯時間取決于我們的網(wǎng)絡(luò),首次編譯時間估計會非常長,可以先下載延云提供的repository.tar.gz,以減少訪問國外網(wǎng)絡(luò)的下載時間。
四、軟件解壓
解壓到/opt/ydbsoftware目錄下,最后可以看到目錄結(jié)構(gòu)是這樣的
conf目錄是YDB的所有配置文件,bin目錄是YDB的執(zhí)行文件
?
?
五、配置conf目錄下的ya100_env.sh環(huán)境變量
1.基本環(huán)境配置
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HADOOP_HOME=/usr/hdp/current/hadoop-client
export JAVA_HOME=/usr/jdk64/jdk1.8.0_60
export SPARK_HOME=/root/software/spark-1.6.1
注意:配置過后大家一定要手工驗證下,相關(guān)目錄的配置文件是否真的存在
2.配置內(nèi)存與啟動的并發(fā)數(shù)
#為啟動的進(jìn)程數(shù)量,切記不要超過Yarn總的VCores的數(shù)量-1
#建議每臺機器配置CPU線程數(shù)的一半,如12個;
#如果有3臺機器,每臺機器配置12個的話那么下面這項的值要寫36,不要只寫12
export YA100_EXECUTORS=12
?
#啟動的進(jìn)程,每個給分配多少內(nèi)存
#YA100_EXECUTORS*YA100_MEMORY的大小建議為yarn總內(nèi)存的3/5(剩下的留給操作系統(tǒng))
#關(guān)于內(nèi)存控制參數(shù)的詳細(xì)說明,請閱讀example下的《3.大家需要了解的幾個內(nèi)存控制的參數(shù).txt》說明
#常規(guī)128G內(nèi)存的機器,建議配置為6000m~7000m
export YA100_MEMORY=6000m
?
#每個進(jìn)程內(nèi)啟動的線程數(shù),一般不需要修改
#配置值不可超過Yarn的yarn.scheduler.maximum-allocation-vcores的值
#建議默認(rèn)配置為5~9
export YA100_CORES=5
#ydb 的JDBC接口程序分配的內(nèi)存,建議6000m以上
export YA100_DRIVER_MEMORY=6000m
?
?
六、配置conf目錄下的ydb_site.yaml環(huán)境變量
該文件的配置非常容易出錯,要注意如下幾點:
1.文件格式必須為UTF8格式,切記切記
2.每個配置項的開頭必須有個空格,而不TAB
3.配置文件中別出現(xiàn)TAB
4.注意每個KEY : VALUE 之間是有一個空格的,如果value是字符串類型,要用雙引號括起來
配置項說明如下:
1.配置 YDB的存儲路徑的配置 ydb.hdfs.path
注意YDB的存儲路徑與ya100的存儲路徑不是一個,要分別配置成不同的路徑,不能重復(fù)
ya100的默認(rèn)存儲路徑在conf目錄下的hive-site.xml中的hive.metastore.warehouse.dir
Ya100的每張表的存儲路徑也可以再創(chuàng)建表的時候由location來指定。
2.配置Ydb在實時導(dǎo)入過程中,所使用的臨時目錄ydb.reader.rawdata.hdfs.path
3.配置ydb http ui服務(wù)的端口 ydb.httpserver.port 默認(rèn)為1210
4.配置ydb依賴的zookeeper:storm.zookeeper.servers 與 storm.zookeeper.root
?
?
七、其他ya100/conf目錄下的配置文件的說明
hive-site.xml hive表的配置,如果想要更改Hive的一些配置,如將Hive的元數(shù)據(jù)寫入到數(shù)據(jù)庫里,可修改此文件。
spark-defaults.conf 用于配置Spark,如果需要修改Spark的默認(rèn)調(diào)度規(guī)則,可以修改此配置。
init.sql 為ya100啟動時候的初始化方法,如果我們的業(yè)務(wù)需要自定義UDF,可以考慮將自定義UDF語句放到這里,通過init.sh來執(zhí)行
driver.log.properties為接口程序的log4j的配置,默認(rèn)日志記錄在logs目錄下
worker.log.properties為ya100的工作進(jìn)程的log4j的配置,默認(rèn)記錄在每臺機器的Yarn的工作目錄下。如果不想Yarn清理掉,可以通過改文件改變?nèi)罩镜拇鎯Φ穆窂?#xff0c;為了日常運維調(diào)試的方便,我們都建議修改,但一定要注意每臺機器目錄的權(quán)限。
八、開始部署延云YDB-服務(wù)的啟動與檢查
進(jìn)入bin目錄,執(zhí)行chmod a+x *.sh
第一:ydb
./restart-all.sh 或 ./start-all.sh
第二:spark 服務(wù)檢查:
1.tail??-f ../logs/ya100.log 看是否有報錯,當(dāng)出現(xiàn)如下的日志,表示啟動成功
2.打開yarn的8088頁面,看啟動的container數(shù)量以及內(nèi)存的時候是否正確
3.看下面是否有ya100 on spark的任務(wù),點擊對應(yīng)的Application Master看是否能打開Spark的UI頁面
?
?
?
第三:YDB服務(wù)檢查
1.通過瀏覽器打開:1210頁面,看是否能打開
2.點開“work工作進(jìn)程列表”看啟動的worker數(shù)量是否與在ya100_env.sh里配置的YA100_EXECUTORS數(shù)量一致
第四:服務(wù)的停止
./stop-all.sh
轉(zhuǎn)載于:https://www.cnblogs.com/hd-zg/p/7115102.html
總結(jié)
以上是生活随笔為你收集整理的基于原版Hadoop的YDB部署(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: for循环与闭包
- 下一篇: 在Windows 7上安装Team Fo