目录
一.Hadoop集群管理
集群架构图例
1.访问集群文件系统
web页面查看
-
能看,能读,不能写入
命令行
-
能看,能读,不能写入
~]# /usr/local/hadoop/bin/hadoop fs -命令 # 该命令与shell的命令类似 # 示例 ~]# cd /usr/local/hadoop ~]# /usr/local/hadoop/bin/hadoop fs -mkdir /input mkdir: Cannot create directory /input. Name node is in safe mode. # 手动命令来离开安全模式 ~]# ./bin/hadoop dfsadmin -safemode leave DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. Safe mode is OFF # 创建目录 ~]# ./bin/hadoop fs -mkdir /input ~]# ./bin/hadoop fs -mkdir /aaa ~]# ./bin/hadoop fs -ls / Found 2 items drwxr-xr-x - root supergroup 0 2022-03-12 15:39 /aaa drwxr-xr-x - root supergroup 0 2022-03-12 15:39 /input # 删除目录 ~]#./bin/hadoop fs -rmdir /aaa # 添加文件 ~]# ./bin/hadoop fs -touchz /ceishi.txt # 上传密码文件 ~]# ./bin/hadoop fs -put /etc/passwd /mima # 把文件系统上的input目录下载下来 ~]# ./bin/hadoop fs -get /input /root/input # 删除非空目录和文件(递归删除用-rm -r) ~]# ./bin/hadoop fs -rm -r /input
用集群分析数据
## 首先要把文件上传到hdfs # 创建文件夹 ~]# cd /usr/local/hadoop ~]# ./bin/hadoop fs -mkdir /input # 把要分析的文件上传至hdfs目录中 ~]# ./bin/hadoop fs -put *.txt /input/ ~]# ./bin/hadoop fs -ls /input Found 3 items -rw-r--r-- 2 root supergroup 86424 2022-03-12 16:17 /input/LICENSE.txt -rw-r--r-- 2 root supergroup 14978 2022-03-12 16:17 /input/NOTICE.txt -rw-r--r-- 2 root supergroup 1366 2022-03-12 16:17 /input/README.txt ## 然后分析的jar包程序,在每个节点上要有(这里用默认的,如果有其他的在每个节点上也要拷贝一份) ~]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output # /input是文件系统上的,/output是文件系统上的
web页面查看(不能直接查看,要下载下来)
2.重新初始化集群
警告:该方法会丢失所有数据
1、停止集群 /usr/local/hadoop/sbin/stop-all.sh
2、删除所有节点的 /var/hadoop/*
3、在 hadoop1 上重新格式化 /usr/local/hadoop/bin/hdfs namenode -format
4、启动集群 /usr/local/hadoop/sbin/start-all.sh
~]# /usr/local/hadoop/sbin/stop-all.sh ~]# for i in hadoop1 node-{0001..0003};do ssh ${i} 'rm -rf /var/hadoop/*'; done ~]# /usr/local/hadoop/bin/hdfs namenode -format ~]# /usr/local/hadoop/sbin/start-all.sh
3.增加新的节点
●HDFS 新增节点
-启动一个新的系统,设置SSH免密码登录
-在所有节点修改/etc/hosts, 增加新节点的主机信息
-安装java运行环境(java-1. 8.0-open jdk-deve 1)
-拷贝NamNode的/usr/ local/hadoop到新节点
-同步配置文件到所有机器
为防止当多个节点同时写入数据而导致新增节点死机,所以这边要设置一个带跨(防止ddos攻击)
●在新节点启动DataNode
~]# /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode
●设置带宽,平衡数据
~]# /usr/local/hadoop/bin/hdfs dfsadmin -setBalancerBandwidth500000000 # 500000000五百兆 ~]# /usr/local/hadoop/sbin/start-balancer.sh # 启动数据平衡,当数据丢失时,会自动从其他服务上找回
●查看状态
~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
由于nodemanager不负责保存数据,所以增加节点相对简单,环境配置与datanode-致
●增加节点(newnode)
~]# /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager
●查看节点(ResourceManager)
~]# /usr/local/hadoop/bin/yarn node -list
准备主机
主机 | IP地址 | 配置 |
---|---|---|
newnode | 192.168.1.54 | 最低配置2核2G |
新节点安装
在 hadoop1 上执行
~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.54 ~]# vim /etc/hosts 192.168.1.50 hadoop1 192.168.1.51 node-0001 192.168.1.52 node-0002 192.168.1.53 node-0003 192.168.1.54 newnode ~]# for i in node-{0001..0003} newnode;do rsync -av /etc/hosts ${i}:/etc/ done ~]# rsync -aXSH /usr/local/hadoop newnode:/usr/local/
在 newnode 节点执行
# 安装java的环境
~]# yum install -y java-1.8.0-openjdk-devel
# 删除日志,方便后期排错
~]# cd /usr/local/hadoop && rm -rf logs/*
# 启动数据节点
~]# /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode
# 设置同步带跨
~]# /usr/local/hadoop/bin/hdfs dfsadmin -setBalancerBandwidth 500000000
# 启动数据平衡
~]# /usr/local/hadoop/sbin/start-balancer.sh
# 设置master可以自动管理新增节点,不设置也可以手动管理(这里不设置自动管理,)
# nodemanager提供计算能力的,数据来源文件系统,利用cpu来计算,本身不存储如何数据的
~]# /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager
~]# jps
1186 DataNode
1431 NodeManager
1535 Jps
如果要设置自动管理则需要在这里HDFS添加slave管理主机
验证集群(hadoop1上执行)
~]# /usr/local/hadoop/bin/hdfs dfsadmin -report ... ... ------------------------------------------------- Live datanodes (4): ~]# /usr/local/hadoop/bin/yarn node -list ... ... Total Nodes:4
4.修复节点
●修复节点比较简单,步骤与增加节点一-致
-注意:新节点的ip和主机名要与损坏节点的一致
●如果旧节点数据丢失,新节点可以自动恢复数据
●上线以后会自动恢复数据,如果数据量非常巨大,需要一段时间
●修复节点的过程与新增节点一致
5.删除节点
为了测试删除节点数据,这边准备点数据,并上传文件系统
~]# cat hadoop-2.7.7.tar.gz >> mydata # 上传数据之前先查看数据占比 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report ~]# /usr/local/hadoop/bin/hadoop fs -put mydata / ~]# /usr/local/hadoop/bin/hadoop fs -ls / Found 2 items -rw-r--r-- 2 root supergroup 1093602605 2022-03-12 18:00 /mydata
配置数据迁移 hdfs-site.xml(hadoop1上做,不需要同步)
# 在文件中添加主机清单文件 ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml <property> <name>dfs.hosts.exclude</name> <value>/usr/local/hadoop/etc/hadoop/exclude</value> </property>
配置排除主机列表,并迁移数据(hadoop1上执行)
# 在删除配置文件中添加 newnode,默认文件不存在 ~]# echo newnode >/usr/local/hadoop/etc/hadoop/exclude # 迁移数据前查看 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report | grep Decommission Decommission Status : Normal Decommission Status : Normal Decommission Status : Normal Decommission Status : Normal # 迁移数据 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -refreshNodes # 查看状态,仅当节点状态为 Decommissioned 时候才可以下线 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
数据的三种状态
Normal:正常状态
Decommissioned in Progress:数据正在迁移
Decommissioned:数据迁移完成
注意:仅当状态变成Decommissioned 才能down机下线
下线节点(注:newnode执行)
~]# /usr/local/hadoop/sbin/hadoop-daemon.sh stop datanode
~]# /usr/local/hadoop/sbin/yarn-daemon.sh stop nodemanager
# 注:下线需要30~40分钟,需要这么久主要是因为迁移数据以及保持服务的稳定性
统计表
节点名 | 上传前 | 上传后 | 下线newnode后 |
---|---|---|---|
node-1 | 28k | 516M | 516M |
node-2 | 28k | 516.04M | 664.15 M |
node-3 | 28k | 793.15M | 922.16 M |
newnode | 24k | 277.13M |
下线之后还可以保存4~8小时
二.NFS网关
1.NFS网关概述
●NFS网关的用途
-用户可以通过操作系统兼容的本地NFSv3客户端来浏览HDFS文件系统
-用户可以通过挂载点直接流化数据
-允许HDFS作为客户端文件系统的一部分被挂载
-支持文件附加,但是不支持随机写(nolock)
- NFS网关目前只支持NFSv3和TCP协议(vers=3, proto=tcp)
可以把HDFS mount成一个文件夹
● 代理用户
-代理用户是NFS网关访问集群的授权用户
在NameNode和NFSGW上添加代理用户
代理用户的UID,GID, 用户名必须完全相同
-如果因特殊原因用户UID、GID、 用户名不能保持- -致,需要我们配置nfs. map的静态映射关系
-例如:
uid 10 100 # Map the remote UID 10 to the local UID 100 gid 11 101 # Map the remote GID 11 to the local GID 101
2.NFS网关架构图
首先客户端mount挂载NFS,当是读请求的时候HDFS直接到后台集群查找并返回值;当是写的时候会在nfs创建一个临时文件夹,在调用HDFS切块最后写入集群
准备主机
主机 IP地址 配置 nfsgw 192.168.1.55 最低配置1核1G
3.HDFS用户授权
hadoop1与nfsgw都要添加用户
## hadoop1机器 ~]# groupadd -g 800 nfsuser ~]# useradd -g 800 -u 800 -r -d /var/hadoop nfsuser ## nfsgw机器 ~]# groupadd -g 800 nfsuser ~]# useradd -g 800 -u 800 -r -d /var/hadoop nfsuser
HDFS集群授权
## hadoop1机器 # 文件全部内容,下面两配置是nfs的 ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/hadoop</value> </property> <property> <name>hadoop.proxyuser.nfsuser.groups</name> <value>*</value> # nfs所在组*全部授权 </property> <property> <name>hadoop.proxyuser.nfsuser.hosts</name> <value>*</value> # nfs所在组*全部授权 </property> </configuration> # 停止集群,同步数据,为了排错方便可以把日志清空 ~]# /usr/local/hadoop/sbin/stop-all.sh ~]# rm -rf /usr/local/hadoop/logs/* ~]# for i in node-{0001..0003};do rsync -avXSH /usr/local/hadoop/etc ${i}:/usr/local/hadoop/ done # 再次启动,nodeManager可以不启动,这边为了测试方便 ~]# /usr/local/hadoop/sbin/start-dfs.sh ~]# jps 5925 NameNode 6122 SecondaryNameNode 6237 Jps # 验证集群 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report ... ... ------------------------------------------------- Live datanodes (3):
4.NFS网关服务搭建概述
-
nfsgw网关服务
- portmap服务(与系统rpcbind冲突)- nfs3服务(与系统nfs冲突)
-卸载NFSGW的rpcbind与nfs-utils
yum remove y rpcbind nfs-utils
-
NFS网关具有双重角色,他既是一-个HDFS的客户端程序,又是一个NFS服务器,所以NFS网关必须能访问到集群中的所有节点,配置/etc/hosts
-
NFS网关配置
-NFS网关同样需要Hadoop的相关配置文件
-同步NameNode的hadoop安装目录到NFSGW
rsync -aXSH --delete hadoop1:/usr/local/hadoop /usr/local/
-安装JAVA运行环境(java-1.8.0-openjdk-devel)
yum install -y java-1.8.0-openjdk-devel
nfs. exports授权
-
nfs. exports. allowed. hosts
-默认情况下,export可 以被任何客户端挂载。为了更好的控制访问,可以设置属性。值和字符串对应机器名和访问策略,通过空格来分割。机器名的格式可以是单一的主机、Java的正则表达式或者IPv4地址
-使用rw或ro可以指定导出目录的读写或只读权限。
-默认设置为只读权限
-
nfs. dump临时目录配置
- nfs. dump. dir
-用户需要更新文件转储目录参数。NFS客 户端经常重新安排写操作,顺序的写操作会随机到达NFS网关。这个目录常用于临时存储无序的写操作。对于每个文件,无序的写操作会在他们积累在内存中超过一-定阈值(如,1M) 时被转储。需要确保有足够的空间的目录,先使用内存缓存,当内存不足时使用硬盘
- NFS网关在设置该属性后需要重启
5.配置NFS网关
~]# yum remove -y rpcbind nfs-utils ~]# vim /etc/hosts 192.168.1.50 hadoop1 192.168.1.51 node-0001 192.168.1.52 node-0002 192.168.1.53 node-0003 192.168.1.55 nfsgw ~]# yum install -y java-1.8.0-openjdk-devel # 这边因为集群以及搭建好了nfs默认安装的,这边直接拷贝 ~]# rsync -aXSH --delete hadoop1:/usr/local/hadoop /usr/local/ # 这边以及配好了三个参数(文件系统,指定副本数,删除节点文件) ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.namenode.http-address</name> <value>hadoop1:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop1:50090</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.hosts.exclude</name> <value>/usr/local/hadoop/etc/hadoop/exclude</value> </property> <property> <name>nfs.exports.allowed.hosts</name> <value>* rw</value> # 指定/目录挂载以读写来执行,类似于目录/etc/exports(/ *(rw)) </property> <property> <name>nfs.dump.dir</name> <value>/var/nfstmp</value> # 当内存不足时可以放到这个临时文件中 </property> </configuration> # 创建转储目录,并设置所有者,所有组 ~]# mkdir /var/nfstmp ~]# chown nfsuser.nfsuser /var/nfstmp # 由于 /usr/local/hadoop/logs也是root权限的,nfsuser用户不能把日志写进去,这里也要设置权限,这里由于rpcbind启动要root用户,就是把文件设置成nfsuser用户,当启动时也会自动改回来的 ~]# rm -rf /usr/local/hadoop/logs/* ~]# setfacl -m user:nfsuser:rwx /usr/local/hadoop/logs ~]# getfacl /usr/local/hadoop/logs
启动portmap
注意:
启动portmap需要使用root用户
启动nfs3需要使用core-site里面设置的代理用户
必须为代理用户授权
-/var/nfstmp不授权上传文件会出错 -/usr/local/hadoop/logs不授权看不到报错日志
必须先启动portmap之后再启动nfs3
如果portmap重启了,在重启之后nfs3也必须重启
启动NFS网关
# 在nfs机器上 ~]# cd /usr/local/hadoop/ # 启动portmap ~]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap ## 测试 # 监听端口111与进程 ~]# ss -nulpt | grep 111 ~]# jps 1376 Portmap 1416 Jps # 随便找一台同网段的主机 ~]# yum -y install rpcbind ~]# rpcinfo -p nfs的ip program vers proto port service 100000 2 udp 111 portmapper 100000 2 tcp 111 portmapper # 删除临时文件 ~]# rm -rf /tmp/.hdfs-nfs # 授权nfsuser用户启动 ~]# sudo -u nfsuser ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3 ~]# sudo -u nfsuser jps 1452 Nfs3 1502 Jps
6.mount验证
注:由于hadoop只能用版本4,但是这里用不了
目前NFS只能使用v3版本
-vers=3
仅使用TCP作为传输协议
-proto=tcp
不支持随机写NLM
-nolock禁用
access time的时间更新
-noatime(mtime(文件的内容不同才会变),ctime(当属性变化才会变的时间),atime(访问才会变的时间))
禁用acl扩展权限
-noacl
同步写入,避免重排序写入
-sync
## 到刚刚安装rpcbind的服务上 ~]# rpcinfo -p 192.168.1.55 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 ~]# yum install -y nfs-utils ~]# showmount -e 192.168.1.55 Export list for 192.168.1.55: / * ~]# mount -t nfs -o vers=3,proto=tcp,nolock,noacl,noatime,sync 192.168.1.55:/ /mnt/ ~]# df -h Filesystem Size Used Avail Use% Mounted on 192.168.1.55:/ 118G 15G 104G 13% /mnt # vers :指定版本 # proto: 指定协议 # nolock: 不支持锁(随机写) # noatime:把访问就改时间关闭 # noacl: 不支持acl权限 # sync: 异步写入