Hadoop集群管理与NFS网关

目录

一.Hadoop集群管理

1.访问集群文件系统

2.重新初始化集群

3.增加新的节点

4.修复节点

5.删除节点

二.NFS网关

1.NFS网关概述

2.NFS网关架构图

3.HDFS用户授权

4.NFS网关服务搭建概述

5.配置NFS网关

6.mount验证


一.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地址配置
newnode192.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-128k516M516M
node-228k516.04M664.15 M
node-328k793.15M922.16 M
newnode24k277.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地址配置
nfsgw192.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:  异步写入

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值