安裝部署
- Hadoop三大核心組件
– HDFS已經部署完畢https://blog.csdn.net/LgMizar/article/details/103972345
– MapReduce
– Yarn - 系統規劃
主機 | 角色 | 軟件 |
---|---|---|
192.168.1.60 hadoop1 | NameNode和SecondaryNameNode和ResourceManager | HDFS和YARN |
192.168.1.61 node1 | DataNode和NodeManager | HDFS和YARN |
192.168.1.62 node2 | DataNode和NodeManager | HDFS和YARN |
192.168.1.63 node3 | DataNode和NodeManager | HDFS和YARN |
- hadoop1操作
配置mapred-site.xml分佈式計算框架
cd /usr/local/hadoop/etc/hadoop/
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> #資源管理類
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml資源管理
im yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name> #resourcemanager地址
<value>nn01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name> #使用哪個計算框架
<value>mapreduce_shuffle</value> #計算框架的名稱
</property>
</configuration>
同步配置
for i in {61..63}
do
rsync -aSHX --delete /usr/local/hadoop 192.168.1.$i:/usr/local/ &
done
驗證配置
cd /usr/local/hadoop
./sbin/start-dfs.sh
Starting namenodes on [nn01]
nn01: namenode running as process 23408. Stop it first.
node1: datanode running as process 22409. Stop it first.
node2: datanode running as process 22367. Stop it first.
node3: datanode running as process 22356. Stop it first.
Starting secondary namenodes [nn01]
nn01: secondarynamenode running as process 23591. Stop it first.
./sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-nn01.out
node2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node2.out
node3: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node3.out
node1: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node1.out
ansible all -m shell -a 'jps'
node3 | SUCCESS | rc=0 >>
1588 NodeManager
1930 Jps
1484 DataNode
node1 | SUCCESS | rc=0 >>
4707 DataNode
11987 Jps
4821 NodeManager
node2 | SUCCESS | rc=0 >>
1378 DataNode
1828 Jps
1482 NodeManager
web訪問hadoop
http://192.168.1.60:50070/ #--namenode web頁面(nn01)
http://192.168.1.60:50090/ #--secondory namenode web頁面(nn01)
http://192.168.1.61:50075/ #--datanode web頁面(node1,node2,node3)
http://192.168.1.60:8088/ #--resourcemanager web頁面(nn01)
http://192.168.1.61:8042/ #--nodemanager web頁面(node1,node2,node3)
Hadoop詞頻統計
./bin/hadoop fs -ls / #查看集羣文件系統的根,沒有內容
./bin/hadoop fs -mkdir /aaa #在集羣文件系統下創建aaa目錄
./bin/hadoop fs -ls / #再次查看,有剛創建的aaa目錄
Found 1 items
drwxr-xr-x - root supergroup 0 2018-09-10 09:56 /aaa
./bin/hadoop fs -touchz /fa #在集羣文件系統下創建fa文件
./bin/hadoop fs -put *.txt /aaa #上傳*.txt到集羣文件系統下的aaa目錄
./bin/hadoop fs -ls /aaa #查看
Found 3 items
-rw-r--r-- 2 root supergroup 86424 2018-09-10 09:58 /aaa/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2018-09-10 09:58 /aaa/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2018-09-10 09:58 /aaa/README.txt
./bin/hadoop fs -get /aaa #下載集羣文件系統的aaa目錄
./bin/hadoop jar \
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /aaa /bbb #hadoop集羣分析大數據,hadoop集羣/aaa裏的數據存到hadoop集羣/bbb下
./bin/hadoop fs -cat /bbb/* #查看集羣裏的數據
增加節點
- 增加一個新的節點node4步驟
– 啓動新系統,設置新節點的主機信息
– 在所有節點修改/etc/hosts,增加新節點的主機信息
– 安裝java運行環境(java-1.8.0.openjck-devel)
– 修改NameNode的salves文件增加該節點
– 拷貝NameNode的/usr/local/hadoop到本機
– 在該節點啓動DataNode
/usr/local/hadoop/sbin/hadoop-daemon.sh start datanode
- 查看狀態
jps
24439 Jps
24351 DataNode
- node4設置同步帶寬並同步數據
./bin/hdfs dfsadmin -setBalancerBandwidth 60000000
Balancer bandwidth is set to 60000000
./sbin/start-balancer.sh
./bin/hdfs dfsadmin -report #查看集羣狀態
修復節點
- HDFS修復節點
– 修復節點比較簡單,與增加節點基本一致
–注意:新節點的ip和主機名要與損壞節點一致
– 啓動服務
./sbin/hadoop-daemon.sh start datanode
– 數據恢復是自動的
– 上線以後會自動恢復數據,如果數據量非常巨大,可能需要一定的時間
刪除節點
– 修改修改NameNode的salves文件
#去掉之前添加的node4
node1
node2
node3
– 配置NameNode的hdfs-site.xml
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
#在此配置文件裏面加入下面四行
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value>
</property>
– 增加dfs.hosts.exclude配置文件,寫入要刪除的節點主機名
vim /usr/local/hadoop/etc/hadoop/exclude
node4
– 導出數據hadoop上:
./bin/hdfs dfsadmin -refreshNodes
Refresh nodes successful
./bin/hdfs dfsadmin -report #查看node4顯示Decommissioned
- Normal : 正常狀態
- Decommissioned in Program : 數據正在遷移
- Decommissioned : 數據遷移完成
- 注意 : 僅當狀態變成Decommissioned才能down機下線
newnode上:
./sbin/hadoop-daemon.sh stop datanode #停止datanode
stopping datanode
./sbin/yarn-daemon.sh start nodemanager #yarn 增加 nodemanager
./sbin/yarn-daemon.sh stop nodemanager #停止nodemanager
stopping nodemanager
./bin/yarn node -list
//yarn 查看節點狀態,還是有node4節點,要過一段時間纔會消失
Total Nodes:4
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node3:34628 RUNNING node3:8042 0
node2:36300 RUNNING node2:8042 0
newnode:42459 RUNNING node4:8042 0
node1:39196 RUNNING node1:8042 0
NFS網關
- NFS網關用途
– 用戶可以通過操作系統兼容的本地NFSv3
客戶端來瀏覽HDFS文件系統
– 用戶可以從HDFS文件系統下載文檔到本地文件系統
– 用戶可以通過掛載點直接流化數據,支持文件附加,但是不支持隨機寫(意思是可以順序寫,不能加鎖)
– NFS網關支持NFSv3和允許HDFS作爲客戶端文件系統的一部分被掛載 - 特性
– HDFS超級用戶是與NameNode進程本身具有相同標示的用戶,超級用戶可以執行任何操作,因爲權限檢查永遠不會認爲超級用戶失敗 - 注意事項
– 在非安全模式下,運行網關進程的用戶是代理用戶
– 在安全模式下,Kerberos keytab中的用戶是代理用戶 - 配置代理用戶
– 在NameNode和NFSGW上添加用戶
– 代理用戶的UID,GID,用戶名必須完全相同
– 如果因特殊原因客戶端的用戶和NFS網關的用戶UID不能保持一致,需要我們配置nfs.map的靜態映射關係
– nfs.map
uid 10 100 # Map the remore UID 10 the local UID 100
gid 11 101 # Map the remote GID 11 the local GID 101
基礎準備
創建代理用戶(hadoop01和nfsgw上面操作)
groupadd -g 800 nfsuser
useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
更改主機名,配置/etc/hosts(/etc/hosts在hadoop01和nfsgw上面配置)
vim /etc/hosts
192.168.1.60 nn01
192.168.1.61 node1
192.168.1.62 node2
192.168.1.63 node3
192.168.1.64 node4
192.168.1.65 nfsgw
配置core-site.xml
hadoop.proxyuser.{代理用戶}.groups
hadoop.proxyuser.{代理用戶}.hosts
在非安全模式下,運行網關的用戶爲代理用戶
groups爲掛載用戶所使用的組
hosts爲掛載點爲主機地址
./usr/local/hadoop/sbin/stop-all.sh #停止所有服務
> /usr/local/hadoop/etc/hadoop/exclude #清空之前的刪除節點
vim /usr/local/hadoop/etc/hadoop/core-site.xml # 添加下面
vim core-site.xml
<property>
<name>hadoop.proxyuser.nfsuser.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.nfsuser.hosts</name>
<value>*</value>
</property>
同步配置到node1,node2,node3
for i in {61..63}
do
rsync -aXSH --delete /usr/local/hadoop/ 192.168.1.$i:/usr/local/hadoop/ &
done
啓動集羣
/usr/local/hadoop/sbin/start-dfs.sh
/usr/local/hadoop/bin/hdfs dfsadmin -report #查看狀態
NFSGW配置
- 配置步驟
– 啓動一個新系統,卸載rpcbind、nfs-utils
– 配置/etc/hsots,添加所有NameNode和DataNode的主機名與Ip對應關係
– 安裝java運行環境(java-1.8.0-openjdk-devel)
–同步NameNode的/usr/local/hadoop到本機
– 配置hdfs-site.xml
– 啓動服務
安裝java-1.8.0-openjdk-devel和rsync
yum -y install java-1.8.0-openjdk-devel
rsync -avXSH --delete 192.168.1.60:/usr/local/hadoop /usr/local/
創建數據根目錄 /var/hadoop(在NFSGW主機上面操作)
mkdir /var/hadoop
創建轉儲目錄,並給用戶nfs 賦權
mkdir /var/nfstmp
chown nfsuser:nfsuser /var/nfstmp
給/usr/local/hadoop/logs賦權(在NFSGW主機上面操作)
setfacl -m user:nfsuser:rwx /usr/local/hadoop/logs
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<property>
<name>nfs.exports.allowed.hosts</name>
<value>* rw</value>
</property>
<property>
<name>nfs.dump.dir</name>
<value>/var/nfstmp</value>
</property>
啓動服務
/usr/local/hadoop/sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
#portmap服務只能用root用戶啓動
jps
23714 Jps
23670 Portmap
su - nfsuser
cd /usr/local/hadoop/
./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
#nfs3只能用代理用戶啓動
jps
1362 Jps
1309 Nfs3
exit
jps #root用戶執行可以看到portmap和nfs3
1216 Portmap
1309 Nfs3
1374 Jps
客戶端實現開機自動掛載
showmount -e 192.168.1.65
Export list for 192.168.1.65:
/ *
vim /etc/fstab #永久掛載
192.168.1.65:/ /mnt/ nfs vers=3,proto=tcp,nolock,noatime,sync,noacl,_netdev 0 0
#臨時掛載 mount -t nfs -o vers=3,proto=tcp,nolock,noatime,sync,noacl 192.168.1.65:/ /mnt/
mount -a
df -h
192.168.1.65:/ 120G 16G 105G 13% /mnt
rpcinfo -p 192.168.1.65
program vers proto port service
100005 3 udp 4242 mountd
100005 1 tcp 4242 mountd
100000 2 udp 111 portmapper
100000 2 tcp 111 portmapper
100005 3 tcp 4242 mountd
100005 2 tcp 4242 mountd
100003 3 tcp 2049 nfs
100005 2 udp 4242 mountd
100005 1 udp 4242 mountd