HDFS進(jìn)階應(yīng)用 配置NFS 網(wǎng)關(guān)
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的上思網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
? NFS 網(wǎng)關(guān)用途
– 1.用戶可以通過操作系統(tǒng)兼容的本地NFSv3客戶端來閱覽HDFS文件系統(tǒng)
– 2.用戶可以從HDFS文件系統(tǒng)下載文檔到本地文件系統(tǒng)
– 3.用戶可以通過掛載點(diǎn)直接流化數(shù)據(jù)。支持文件附加,但是不支持隨機(jī)寫
– NFS 網(wǎng)關(guān)支持NFSv3和允許HDFS 作為客戶端文件系統(tǒng)的一部分被掛載
? 特性與注意事項(xiàng)
– 不支持隨機(jī)寫
– 在非安全模式,運(yùn)行網(wǎng)關(guān)的用戶是代理用戶
– 在安全模式時(shí),Kerberos keytab中的用戶是代理用戶
– AIX NFS有一些知道的問題,不能讓默認(rèn)的HDFS NFS網(wǎng)關(guān)正常工作,如果想在 AIX 訪問 NFS 網(wǎng)關(guān)需要配置下面的參數(shù)
? 特性與注意事項(xiàng)
– HDFS超級(jí)用戶是與NameNode進(jìn)程本身具有相同標(biāo)識(shí)的用戶,超級(jí)用戶可以執(zhí)行任何操作,因?yàn)闄?quán)限檢查永遠(yuǎn)不會(huì)為超級(jí)用戶失敗。
– 如果客戶端安裝允許訪問時(shí)間更新,在某些Unix系統(tǒng)上,用戶可以通過使用“noatime”安裝來禁用訪問時(shí)間更新
– nfs.dump.dir
– 用戶需要更新文件轉(zhuǎn)儲(chǔ)目錄參數(shù)。NFS客戶端經(jīng)常重新安排寫操作,順序的寫操作會(huì)以隨機(jī)到達(dá)NFS網(wǎng)關(guān)。這個(gè)目錄常用于臨時(shí)存儲(chǔ)無序的寫操作。對(duì)于每個(gè)文件,無序的寫操作會(huì)在他們積累在內(nèi)存中超過一定閾值(如。1 mb)被轉(zhuǎn)儲(chǔ)。需要確保有足夠的空間的目錄。例如,如果應(yīng)用上傳10個(gè)100M,那么這個(gè)轉(zhuǎn)儲(chǔ)目錄推薦有1GB左右的空間,以便每個(gè)文件都發(fā)生最壞的情況。只有NFS網(wǎng)關(guān)需要在設(shè)置該屬性后重啟。
– nfs.exports.allowed.hosts
– 默認(rèn)情況下,export可以被任何客戶端掛載。為了更好的控制訪問,可以設(shè)置屬性。值字符串為機(jī)器名和訪問策略,通過空格來分割。機(jī)器名的格式可以是單一的主機(jī),Java的正則表達(dá)式或者IPv4地址。訪問權(quán)限使用rw或ro來指定導(dǎo)出目錄的讀/寫或機(jī)器只讀訪問。如果訪問策略沒被提供,默認(rèn)為只讀的。每個(gè)條目使用“;”來分割。
? 調(diào)試與日志排錯(cuò)
– 在配置 NFS 網(wǎng)關(guān)過程中經(jīng)常會(huì)碰到各種各樣的錯(cuò)誤,如果出現(xiàn)了錯(cuò)誤,打開調(diào)試日志是一個(gè)不錯(cuò)的選擇
? log4j.property
– log4j.logger.org.apache.hadoop.hdfs.nfs=DEBUG
– log4j.logger.org.apache.hadoop.oncrpc=DEBUG
? core-site.xml
– hadoop.proxyuser.{nfsuser}.groups
– hadoop.proxyuser.{nfsuser}.hosts
– 這里的 nfsuser 是你機(jī)器上真實(shí)運(yùn)行 nfsgw 的用戶
– 在非安全模式,運(yùn)行nfs網(wǎng)關(guān)的用戶為代理用戶
– groups 為掛載點(diǎn)用戶所使用的組
– hosts 為掛載點(diǎn)主機(jī)地址
? hdfs-site.xml
– nfs.exports.allowed.hosts
– 設(shè)置允許訪問 NFS 主機(jī)列與權(quán)限,默認(rèn) “ro”
– dfs.namenode.accesstime.precision
– 關(guān)閉 access time
– nfs.dump.dir
– 設(shè)置轉(zhuǎn)儲(chǔ)目錄
– nfs.rtmax & nfs.wtmax
– 用戶可以像訪問本地文件系統(tǒng)的一部分一樣訪問HDFS,但硬鏈接和隨機(jī)寫還不支持。對(duì)于大文件I/O的優(yōu)化,可以在mount的時(shí)候增加NFS傳輸?shù)拇笮?rsize和wsize)。在默認(rèn)情況下,NFS網(wǎng)關(guān)支持1MB作為最大的傳輸大小。更大的數(shù)據(jù)傳輸大小,需要在hdfs-site.xml中設(shè)置“nfs.rtmax” 和“nfs.wtmax”
– nfs.rtmax & nfs.wtmax
– nfs.port.monitoring.disabled
– 允許從沒有權(quán)限的客戶端掛載 nfs
? nfs.map
– 系統(tǒng)管理員必須確保在NFS客戶端的用戶和在HDFS網(wǎng)關(guān)主機(jī)上的用戶有相同的名稱和UID。不同主機(jī)上創(chuàng)建的用戶需要修改UID(例如使用“usermod -u 123myusername”),在NFS客戶端或者NFS網(wǎng)關(guān)主機(jī)來進(jìn)行。如果客戶端的用戶和NFS網(wǎng)關(guān)的用戶 uid 不能保持一致需要我們配置 nfs.map 的靜態(tài)映射關(guān)系
實(shí)驗(yàn)環(huán)境準(zhǔn)備參考 https://blog.51cto.com/13558754/2066708
配置 NFS 網(wǎng)關(guān)
# cd /usr/local/hadoop/
# ./sbin/stop-all.sh
# jps
6598 Jps
# vim /etc/hosts
192.168.4.1 master
192.168.4.2 node1
192.168.4.3 node2
192.168.4.4 node3
192.168.4.5 nfsgw //添加新的主機(jī)
# for i in {1..5}
> do
> rsync -a /etc/hosts 192.168.4.${i}:/etc/hosts
> done
# scp /etc/yum.repos.d/yum.repo nfsgw:/etc/yum.repos.d/
yum.repo 100% 61 0.1KB/s 00:00
# ssh nfsgw
Last login: Wed Jan 31 08:20:55 2018 from master
# sed -ri "s/^(SELINUX=).*/\1disabled/" /etc/selinux/config ; yum -y remove firewalld
# reboot
// 添加用戶
[root@nfsgw ~]# adduser -g 10 -u 1001 nfsuser
[root@nfsgw ~]# id nfsuser
uid=1001(nfsuser) gid=10(wheel) 組=10(wheel)
[root@master ~]# adduser -g 10 -u 1001 nfsuser
[root@master ~]# id nfsuser
[root@master ~]# cd /usr/local/hadoop/
[root@master hadoop]# cd etc/hadoop/
[root@master hadoop]# vim core-site.xml
[root@master hadoop]# for i in node{1..3}
> do
> rsync -a /usr/local/hadoop/etc/hadoop/ ${i}:/usr/local/hadoop/etc/hadoop/ -e "ssh"
> done
[root@master ~]# ssh nfsgw
[root@nfsgw ~]# yum -y install java-1.8.0-openjdk-devel.x86_64
[root@nfsgw ~]# cd /usr/local/
[root@nfsgw ~]# rsync -azSH --delete master:/usr/local/hadoop ./ -e "ssh" //同步hadoop
[root@nfsgw ~]# yum -y remove rpcbind nfs-util
[root@master ~]# cd /usr/local/hadoop/
[root@master hadoop]# ./sbin/start-dfs.sh //啟動(dòng)集群
[root@master hadoop]# jps
6755 NameNode
7062 Jps
6953 SecondaryNameNode
[root@master hadoop]# ./bin/hdfs dfsadmin -report //檢查節(jié)點(diǎn)
[root@master hadoop]# ssh nfsgw
Last login: Wed Jan 31 08:26:48 2018 from master
[root@nfsgw ~]# cd /usr/local/hadoop/
[root@nfsgw hadoop]# cd etc/hadoop/
[root@nfsgw hadoop]# vim hdfs-site.xml
...
...
[root@nfsgw ~]# mkdir /var/nfstemp
[root@nfsgw ~]# chown 1001.10 /var/nfstemp/
[root@nfsgw ~]# setfacl -m u:nfsuser:rwx /usr/local/hadoop/logs/
[root@nfsgw ~]# cd /usr/local/hadoop/
– 啟動(dòng) portmap 服務(wù)
[root@nfsgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
starting portmap, logging to /usr/local/hadoop/logs/hadoop-root-portmap-nfsgw.out
[root@nfsgw hadoop]# su nfsuser
– 啟動(dòng) nfs3
[nfsuser@nfsgw hadoop]$ ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
starting nfs3, logging to /usr/local/hadoop/logs/hadoop-nfsuser-nfs3-nfsgw.out
[nfsuser@nfsgw hadoop]$ jps
2728 Jps
2671 Nfs3
[nfsuser@nfsgw hadoop]$ exit
exit
[root@nfsgw hadoop]# jps
2738 Jps
2588 Portmap
2671 -- process information unavailable
– 這里要特別注意:
– 啟動(dòng) portmap 需要使用 root 用戶
– 啟動(dòng) nfs3 需要使用 core-site 里面設(shè)置的用戶
掛載 nfs
– 目前NFS v3僅使用TCP作為傳輸協(xié)議。 不支持NLM,因此需要安裝選項(xiàng)“nolock”。 強(qiáng)烈建議使用安裝選項(xiàng)“sync”,因?yàn)樗梢宰钚』虮苊庵匦屡判驅(qū)懭?這將導(dǎo)致更可預(yù)測(cè)的吞吐量。 未指定同步選項(xiàng)可能會(huì)導(dǎo)致上傳大文件時(shí)出現(xiàn)不可靠的行為
– 如果必須使用軟安裝,用戶應(yīng)該給它一個(gè)相對(duì)較長(zhǎng)的超時(shí)(至少不小于主機(jī)上的默認(rèn)超時(shí))
# mount -t nfs -o vers=3,proto=tcp,nolock,sync,noatime,noacl 192.168.4.5:/ /mnt/
# ls /mnt/
input output tmp