Hadoop的部署见前文《初识大数据之Hadoop部署》
https://blog.csdn.net/weixin_43800781/article/details/86589182
HDFS的基本使用
这里的 "/"(根)是指 hfds://mynn01:9000/,见配置文件core-site.doc 默认为集群系统的"/"
[root@mynn01 hadoop]# ./bin/hadoop fs //查看可以支持那些那些命令,多数命令和shell一样
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
...
查看文件 | ./bin/hadoop fs -ls / | 对应shell ls / |
创建目录 | ./bin/hadoop fs -mkdir /abc | 对应shell mkdir /abc |
删除目录 | ./bin/hadoop fs -rmdir /abc |
对应shell rmdir /abc |
创建文件 | ./bin/hadoop fs -touchz /file1 | 对应shell touch /file1 |
查看文件 | ./bin/hadoop fs -cat /file1 | 对应shell cat /file1 |
删除文件 | ./bin/hadoop fs -rm /file1 | 对应shell rm /file1 |
上传文件 | ./bin/hadoop fs -put localfine /remotefine | |
下载文件 | ./bin/hadoop fs -get /remotefine |
[root@mynn01 hadoop]# ./bin/hadoop fs -mkdir /abc
[root@mynn01 hadoop]# ./bin/hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2019-01-23 10:38 /abc
[root@mynn01 hadoop]# ./bin/hadoop fs -rmdir /abc
[root@mynn01 hadoop]# ./bin/hadoop fs -ls /
在192.168.1.10:50070上点击Utilities---Browse the file system 可以看到创建的目录
[root@mynn01 hadoop]# ./bin/hadoop fs -touchz /file1
[root@mynn01 hadoop]# ./bin/hadoop fs -ls /
Found 1 items
-rw-r--r-- 2 root supergroup 0 2019-01-23 10:51 /file1
[root@mynn01 hadoop]# ./bin/hadoop fs -mkdir /aaa
[root@mynn01 hadoop]# ./bin/hadoop fs -put *.txt /aaa
[root@mynn01 hadoop]# ./bin/hadoop fs -ls /aaa
Found 3 items
-rw-r--r-- 2 root supergroup 86424 2019-01-23 11:29 /aaa/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2019-01-23 11:29 /aaa/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2019-01-23 11:29 /aaa/README.txt
节点管理
增加节点
环境同之前配置节点一样 192.168.1.14 node4,修改所有主机/etc/hosts,添加node4的解析
[root@node4 ~]# cat /etc/hosts
192.168.1.10 mynn01
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3
192.168.1.14 node4
设置ssh免密登录
[root@mynn01 .ssh]# ssh-copy-id node4
安装java运行环境
[root@node4 ~]# yum -y install java-1.8.0-openjdk-devel
修改NameNode的slaves文件,增加该节点
[root@mynn01 ~]# cat /usr/local/hadoop/etc/hadoop/slaves
node1
node2
node3
node4
拷贝NameNode的/usr/local/hadoop到本机
[root@node4 ~]# yum -y install rsync
[root@mynn01 hadoop]# rsync -aSH --delete /usr/local/hadoop/ 192.168.1.14:/usr/local/hadoop/
[root@node4 ~]# cd /usr/local/hadoop/
[root@node4 hadoop]# ls
bin in lib LICENSE.txt NOTICE.txt README.txt share
etc include libexec logs out sbin
[root@node4 hadoop]# rm -rf logs
[root@node4 hadoop]# mkdir /var/hadoop
[root@mynn01 hadoop]# for i in 192.168.1.{11,12,13}
> do
> scp etc/hadoop/slaves $i:/usr/local/hadoop/etc/hadoop/slaves
> done
slaves 100% 24 1.2KB/s 00:00
slaves 100% 24 2.5KB/s 00:00
slaves 100% 24 37.6KB/s 00:00
在本节点启动DataNode
[root@node4 hadoop]# ./sbin/hadoop-daemon.sh start datanode
[root@node4 hadoop]# jps
10480 Jps
10406 DataNode
设置同步带宽
[root@node4 hadoop]# ./bin/hdfs dfsadmin -setBalancerBandwidth 60000000
Balancer bandwidth is set to 60000000
[root@node4 hadoop]# ./sbin/start-balancer.sh
starting balancer, logging to /usr/local/hadoop/logs/hadoop-root-balancer-node4.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
查看集群状态
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin -report
...
-------------------------------------------------
Live datanodes (4):
上传数据
[root@mynn01 hadoop]# ./bin/hadoop fs -put /root/rhel-server-7.4-x86_64-dvd.iso /aaa
[root@mynn01 hadoop]# ./bin/hadoop fs -ls /aaa
Found 4 items
-rw-r--r-- 2 root supergroup 86424 2019-01-23 11:29 /aaa/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2019-01-23 11:29 /aaa/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2019-01-23 11:29 /aaa/README.txt
-rw-r--r-- 2 root supergroup 4059037696 2019-01-23 14:40 /aaa/rhel-server-7.4-x86_64-dvd.iso
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin -report
Hostname: node1
DFS Used: 1520803924 (1.42 GB)
Hostname: node2
DFS Used: 1893822464 (1.76 GB)
Hostname: node4
DFS Used: 2434879488 (2.27 GB)
Hostname: node3
DFS Used: 2332422270 (2.17 GB)
修复节点
与增加节点基本一致(注:新节点的ip和主机名要和损坏节点的一致)
启动节点 ./sbin/hadoop-daemon.sh start datanode
数据可以自动恢复
删除节点
从slaves中删除node4
[root@mynn01 hadoop]# cat etc/hadoop/slaves
node1
node2
node3
修改配置文件hdfs-site.xml
[root@mynn01 hadoop]# vim etc/hadoop/hdfs-site.xml
...
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value>
</property>
...
添加文件,写入删除的节点名
[root@mynn01 hadoop]# cat etc/hadoop/exclude
node4
数据迁移(仅有当状态变成Decommissioned才能down机下线)
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin -refreshNodes
Refresh nodes successful
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin -report
//查看状态 状态有三种 Normal 正常状态; Decommissioned in Program 数据在迁移; Decommissioned 数据迁移完成
...
Decommissioning datanodes (1):
Name: 192.168.1.14:50010 (node4)
Hostname: node4
Decommission Status : Decommission in progress //目前正在迁移中
Configured Capacity: 107362627584 (99.99 GB)
DFS Used: 2434879488 (2.27 GB)
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin -report //需要等一会才会完成
Name: 192.168.1.14:50010 (node4)
Hostname: node4
Decommission Status : Decommissioned
Hostname: node3
DFS Used: 3279392768 (3.05 GB)
Hostname: node2
DFS Used: 2434904064 (2.27 GB)
Hostname: node1
DFS Used: 2467749888 (2.30 GB)
注:目前3个节点的数据和等于之前四个节点的数据和
停止datanode
[root@node4 hadoop]# ./sbin/hadoop-daemon.sh stop datanode
stopping datanode
yarn节点管理
增加节点
[root@node4 hadoop]# ./sbin/yarn-daemon.sh start nodemanager
删除节点
[root@node4 hadoop]# ./sbin/yarn-daemon.sh stop nodemanager //停止nodemanager
查看节点(ResourceManager)
[root@node4 hadoop]# ./bin/yarn node -list //yarn 查看节点状态,还是有node4节点,要过一段时间才会消失
恢复初始状态
/usr/local/hadoop/sbin/stop-all.sh
所有节点 rm -rf /var/hadoop/*
同步配置文件 mynn01 给 node1,2,3
格式化 ./bin/hdfs/ namenode -format(如果程序没问题,不用格式化)
启动 ./sbin/start-dfs.sh
[root@mynn01 hadoop]# ./sbin/stop-all.sh
[root@mynn01 hadoop]# for i in 192.168.1.{11,12,13}
> do
> rsync -aSH --delete etc/hadoop/slaves $i:/usr/local/hadoop/etc/hadoop/slaves
> done
[root@mynn01 hadoop]# ./sbin/start-dfs.sh
...
-------------------------------------------------
Live datanodes (3):
NFS网关
数据同步 一般小型网络 流量在10G以下, 解决方案 rsync+inotify keepalived
中型网络 流量在100G左右,解决方案 DRBD+heartbeat+NFS
大型网络 解决档案为HDFS+NFS
用途:用户可以通过操作系统兼容的本地NFSv3客户端来浏览HDFS文件系统
用户可以从HDFS文件系统下载文档到本地文件系统
用户可以通过挂载点直接流化数据,支持文件附加,但是不支持随机写
NFS网关支持NFSv3和允许HDFS作为客户端文件系统的一部分被挂载
特性:HDFS超级用户是与NameNode进程本身具有相同标识的用户,超级用户可执行任何操作,因权限检查永远不会认为超级用户失败
注意事项:在非安全模式下,运行网关进程的用户是代理用户
在安全模式下,Kerberos keytab中的用户是代理用户
调试:在配置NFS网关过程中,如果出现错误,可以查看相关日志
日志排错:log4j.logger.org.apache.hadoop.hdfs.nfs=DEBUG
log4j.logger.org.apache.hadoop.oncrpc=DEBUG
部署NFS网关
环境准备:前面的Hadoop集群
192.168.1.14 nfsgw 192.168.1.20 localhost
配置nfsgw mynn01 /etc/hosts
[root@nfsgw ~]# cat /etc/hosts
192.168.1.10 mynn01
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3
192.168.1.14 nfsgw
创建代理用户(在nfsgw和mynn01上) 注:代理用户的UID,GID,用户名必须完全相同
[root@mynn01 hadoop]# groupadd -g 888 nfsuser[root@mynn01 hadoop]# useradd -u 888 -g 888 -r nfsuser
[root@mynn01 hadoop]# id nfsuser
uid=888(nfsuser) gid=888(nfsuser) 组=888(nfsuser)
HDFS集群授权,配置core-site.xml
[root@mynn01 hadoop]# ./sbin/stop-all.sh
[root@mynn01 hadoop]# vim etc/hadoop/core-site.xml
...
<property>
<name>hadoop.proxyuser.nfsuser.groups</name> //在主机真实运行的用户,groups挂载点使用的组
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.nfsuser.hosts</name> //hots挂载点主机地址
<value>*</value>
</property>
同步配置到所有主机
root@mynn01 hadoop]# for i in 192.168.1.{11,12,13}; do rsync -aSH --delete /usr/local/hadoop/etc/hadoop/core-site.xml $i:/usr/local/hadoop/etc/hadoop/core-site.xml; done
root@mynn01 hadoop]# for i in 192.168.1.{11,12,13}; do scp /etc/hosts $i:/etc/hosts; done
启动服务
[root@mynn01 hadoop]# ./sbin/start-dfs.sh
[root@mynn01 hadoop]# jps
7524 SecondaryNameNode
7639 Jps
7327 NameNode
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin -report
...
-------------------------------------------------
Live datanodes (3):
NFSGW配置
安装 java-1.8.0-openjdk-devel
[root@nfsgw ~]# yum -y install java-1.8.0-openjdk-devel
拷贝 mynn01:/usr/local/hadoop 到本机
[root@mynn01 hadoop]# scp -r /usr/local/hadoop [email protected]:/usr/local/hadoop
修改配置文件hdfs-site.xml 并创建nfstmp
[root@nfsgw hadoop]# vim 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>
[root@nfsgw hadoop]# mkdir /var/nfstmp
赋权
[root@nfsgw hadoop]# chown nfsuser:nfsuser /var/nfstmp/
[root@nfsgw hadoop]# setfacl -m user:nfsuser:rwx /usr/local/hadoop/logs //为代理用户赋予读写执行的权限
启动服务
[root@nfsgw hadoop]# rpm -qa |grep -P "rpcbind|nfs" //检查是否有这两个软件,如有,需卸载
[root@nfsgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap //先启动portmap 用户必须是root
[root@nfsgw ~]# su - nfsuser //启动nfs3需使用core-site设置的代理用户(如果portmap重启,则nfs3也需要重启)
-bash-4.2$ cd /usr/local/hadoop/
[root@nfsgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3 //再用代理用户启动nfs3 (如果之前误操作了用root启动的 根据提示 删除/tmp/.hdfs-nfs/)
starting nfs3, logging to /usr/local/hadoop/logs/hadoop-nfsuser-nfs3-nfsgw.out
-bash-4.2$ jps
11620 Nfs3
11673 Jps
-bash-4.2$ exit
logout
[root@nfsgw tmp]# jps
11344 Portmap
11620 Nfs3
11685 Jps
验证服务(在客户端192.168.1.20上验证)
挂载:目前nfs支持v3版本,仅使用TCP协议,不支持NLM(nolock),禁用access time时间更新(noatime)
建议使用选项sync,它可以最小化避免重排序写入造成不可预测的吞吐量,未指定同步可能会导致上传大文件时出现不可靠行为
[root@localhost ~]# yum -y install nfs-utils //客户端需要安装nfs-utils
[root@localhost ~]# mount -t nfs -o vers=3,proto=tcp,nolock,noatime,sync,noacl 192.168.1.14:/ /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
aaa system
[root@localhost mnt]# touch a
[root@localhost mnt]# ls
a aaa system
[root@localhost mnt]# rm -rf a
[root@localhost mnt]# ls
可以设置自动挂载
[root@localhost ~]# umount /mnt
[root@localhost mnt]# vim /etc/fstab
192.168.1.14:/ /mnt/ nfs vers=3,proto=tcp,nolock,noatime,sync,noacl,_netdev 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# df -H
文件系统 容量 已用 可用 已用% 挂载点
...
192.168.1.14:/ 323G 14G 309G 5% /mnt
[root@localhost ~]# rpcinfo -p 192.168.1.14
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