Hadoop是什么
Hadoop特点
高可靠性、高扩展性、高效性、高容错性、低成本
hadoop官方文档: hadoop.apache.org/docs/
1、安装配置Java环境及jps工具
[root@hadoop1 ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
2、查看java环境的版本,由java-1.8.0-openjdk提供
[root@hadoop1 ~]# java -version
3、上传hadoop源码包并解压(hadoop下载官网:http://hadoop.apache.org);
[root@hadoop1 ~]# tar -xf hadoop-2.7.7.tar.gz -C /root/ // 解压软件包
4、移动并重命名hadoop
[root@hadoop1 ~]# mv /root/hadoop-2.7.7 /usr/local/hadoop
5、修改hadoop目录下的所有文件的所有者和所属组为root,查看验证
[root@hadoop1 ~]# chown -R root:root /usr/local/hadoop/
**※、配置环境变量**
- hadoop 使用 java 执行,必须要配置 java 安装路径
- hadoop 的配置文件在 /usr/local/hadoop/etc/hadoop
- hadoop-env.sh 是启动 hadoop 的默认环境变量配置文件
JAVA_HOME="JAVA安装路径"
HADOOP_CONF_DIR="hadoop 配置文件路径"
验证: /usr/local/hadoop/bin/hadoop version
6、 rpm -ql 查看安装的软件包下的所有文件
#获取java的安装公共目录: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/
[root@hadoop1 ~]# rpm -ql java-1.8.0-openjdk
7、修改配置文件,在linux上启动hadoop命令的脚本配置文件
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre" # 修改环境变量
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" # 指定hadoop配置文件所在的路径
8、查看hadoop版本
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop version
# 在hadoop目录下,创建一个目录input,用于存放要分析的数据
[root@hadoop1 ~]# mkdir /usr/local/hadoop/input
# 拷贝要分析的数据文件到input目录下
[root@hadoop1 ~]# cp /usr/local/hadoop/*.txt /usr/local/hadoop/input/
# 查看input目录下的数据
[root@hadoop1 ~]# ls /usr/local/hadoop/input/
# 配置hadoop的主机名解析
[root@hadoop1 ~]# vim /etc/hosts
192.168.1.128 hadoop1
**分析**
# 进入到hadoop目录下
[root@hadoop1 hadoop]# cd /usr/local/hadoop/
# 查看hadoop命令的帮助信息,这里调用jar文件进行统计分析
[root@hadoop1 hadoop]# ./bin/hadoop
# jar文件为使用java开发处理的功能包
[root@hadoop1 hadoop]# ls share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar
# 查看官方jar文件都有哪些统计方法;**wordcout** 统计单词的数量
[root@hadoop1 hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar
# 查看wordcount的使用格式, 要处理的数据; 处理后数据存放的路径
[root@hadoop1 hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount
**执行hadoop的脚本命令,分析数据; 【INFO】 为正常处理输出信息;input 为要处理数据的目录路;ouput 处理后数据存放的目录**
[root@hadoop1 hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input ouput
# 在output目录下查看数据分析结果,第一列为单词;第二列为单词出现的次数
[root@hadoop1 hadoop]# cat ouput/*
1》 将数据切分,每份数据都存放到128M的空间中;
2》 与NameNode交互,获取每份数据存储的位置信息;
3》 与DataNode交互,写入或读取数据;
1》 管理节点;
2》 当Client存储数据时,计算出数据的存储位置,告诉Client,并记录下数据的存储位置【由fsimage记录】;
3》 当Client读取数据时,NameNode告诉Client数据的存储位置;
4》 配置副本数量,当用户要把一份数据存储多份【备份】,由NameNode来向Client返回多个存储位置,Client将同一份数据存储多份在不同的数据节点上;
1》 数据的存储节点,存储实际的数据;
2》 当Client存储数据时,NameNode告诉给Client数据的存储位置;
3》 当Client将数据真实存入DataNode节点以后,DataNode向NameNode发送数据存储成功的信息;
4》 NameNode接收到DataNode发送的数据存储成功的汇报后,才会由【fsimage】记录数据的存储位置;
1》 fsimage记录数据存储的位置;
2》 fsedits数据变更日志;
3》 hadoop修改数据时,将数据的修改信息记录在数据变更日志中;当用户下次读取数据时,先从fsimage读取数据存储位置,再读取fsedits中的数据;如果存在数据的修改信息,则覆盖fsimage中的数据,从而完成hadoop中数据的修改;
4》 由于会频繁数据,fsedits中的数据会不断变大,占用资源,不方便管理;
5》 Secondary NameNode会定期合并fsimage和fsedits,推送给NameNode;而fseditsw文件大小就会清零,重新开始记录数据变化;
接收客户端的任务请求,并将任务分解成多个子任务,将子任务派发给多个TaskTracker;
TaskTracker作用
运行Map Task和Reduce Task,最终执行任务的组件
JobTracker
Mater节点只有一个;管理所有作业/任务的监控、错误处理等;将任务分解成一系列任务,并分派给TaskTracker
TaskTracker
Slave节点,一般是多台;运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态
Map Task
解析每条数据记录,传递给用户编写的map()并执行;将输出结果写入本地磁盘,如果为map-only作业,直接写入HDFS
Reducer Task
从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行
1》Resourcemanager处理客户端请求, 将任务分发给NodeManager;
2》NodeManager调用Container和ApplicationMaster;
Resourcemanager作用
1》处理客户端请求,资源分配与调度;
2》启动/监控 ApplicationMaster;
3》监控 NodeManager;
NodeManager作用
1》单个节点上的资源管理;
2》处理来自 ResourceManager 的命令;
3》处理来自 ApplicationMaster 的命令;
Container作用
1》对任务运行环境的抽象,封装了CPU、内存等;
2》启动命令等任务运行相关的信息资源分配与调度;
ApplicationMaster
1》数据切分;
2》为应用程序申请资源,并分配给内部任务;
3》任务监控与容错;
环境配置文件:hadoop-env.sh
核心配置文件:core-site.xml
HDFS配置文件:hdfs-site.xml
节点配置文件:slaves
slaves是datanode节点的配置文件,声明的主机都会运行datanode守护进程
slaves格式:每行一个主机名(必须能ping通)
>
>关键字 >
>变量值 >
>描述 > >
存入数据时需要和namenode进行交互,获取数据存放地址;这里声明namenode服务的地址
>fs.defaultFS >
>hdfs://hadoop1:9000 >
>hadoop.tmp.dir >
>/var/hadoop >
配置示例:
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
<description>hdfs file system</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
</configuration>
>dfs.namenode.http-address >
>hadoop1:50070 >
>dfs.namenode.secondary.http-address >
>hadoop1:50090 >
>dfs.replication >
>2 >
配置示例:
dfs.namenode.http-address 声明在哪台机器上启动namenode
dfs.namenode.secondary.http-address 声明在哪台机器上启动secondarynamenode
dfs.replication 副本的数量,2 则代表和原数据加起来一共存储两份
[root@hadoop1 ~]# 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>
</configuration>
- 创建数据目录,只在 namenode 上创建即可,其他 datanodde 主机可自动创建
mkdir /var/hadoop
- 格式化 hdfs,所有的提示必须都是INFO的
/usr/local/hadoop/bin/hdfs namenode -format
- 启动集群
/usr/local/hadoop/sbin/start-dfs.sh
查看hdfs集群启动后的日志目录,logs目录在集群启动后会生成
日志格式:
第一段: hadoop # 为服务名
第二段:root # 为启动该进程的用户名
第三段:namenode # 启动的角色名
第四段:hadoop1 # 角色所在的主机名
.out 为标准输出;.log 为系统日志
[root@hadoop1 ~]# ls /usr/local/hadoop/logs/
-report 显示集群的报告信息
Live datanodes (3): 显示集群datanode服务正常的数量
如果某个节点没有启动,查看对应节点的日志信息 /usr/local/hadoop/log
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
web 页面验证
http://hadoop1:50070 ——》 namenode服务
http://hadoop1:50090 ——》 secondarynamenode服务
http://node1:50075 ——》 datanode服务
/usr/local/hadoop/logs 文件夹在系统启动时会被自动创建
日志名称
服务名-用户名-角色名-主机名.out 标准输出
服务名-用户名-角色名-主机名.log 日志信息
web页面: 能查看,能读取,不能写入
命令行: 能查看,能读取,能写入;/usr/local/hadoop/bin/hadoop fs -命令
# 查看hadoop命令的帮助信息, fs 会运行一个操作hdfs的客户端
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop
# 查看fs客户端的使用方法
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs
# 查看hdfs文件系统的数据:/ 是hdfs文件系统的根目录
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /
# 在hdfs的根目录下,创建目录input
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -mkdir /input
# 查看结果
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls
# 将当前目录下以.txt结尾的文件,上传到hdfs中/input目录下
[root@hadoop1 hadoop]# ./bin/hadoop fs -put *.txt /input
# 查看hdfs文件系统中/input下的数据,上传成功
[root@hadoop1 hadoop]# ./bin/hadoop fs -ls /input
多个软件要同时部署在同一台机器上,要考虑软件占用的资源是否会冲突
DataNode: 存储节点,主要消耗系统的I/O(读写);
NodeManager: # 计算节点,主要消耗的系统资源为CPU和内存
# 进入到hadoop的安装目录下
[root@hadoop1 ~]# cd /usr/local/hadoop/etc/hadoop/
# 拷贝模板文件
[root@hadoop1 hadoop]# cp mapred-site.xml.template mapred-site.xml
>mapreduce.framework.name >
>yarn >
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
>
>
>mapreduce.framework.name >
>yarn >
>
>
>yarn.resourcemanager.hostname >
>nn01 >
- yarn.nodemanager.aux-services 计算框架
>yarn.nodemanager.aux-services >
>mapreduce_shuffle >
配置示例:
yarn.nodemanager.aux-services 指定要使用的分布式计算框架,可以使用开发人员写的计算框架,这里采用的是官方提供的模板计算框架;
yarn.resourcemanager.hostname 指定resourcemanager的管理主机,为hadoop1
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
>
>
>yarn.nodemanager.aux-services >
>mapreduce_shuffle >
>
<!-- Site specific YARN configuration properties -->
>
>yarn.resourcemanager.hostname >
>hadoop1 >
>
>
同步配置到所有主机
scp -r /usr/local/hadoop/etc node1:/usr/local/hadoop
scp -r /usr/local/hadoop/etc node2:/usr/local/hadoop
scp -r /usr/local/hadoop/etc node3:/usr/local/hadoop
启动服务
# 使用脚本启动resourcemanager的服务
[root@hadoop1 ~]# /usr/local/hadoop/sbin/start-yarn.sh
# 启动hdfs分布式文件系统的服务,没有开机自启动,需要重启
[root@hadoop1 ~]# /usr/local/hadoop/sbin/start-dfs.sh
# 查看resourcemanager下可管理的计算节点
[root@hadoop1 ~]# /usr/local/hadoop/bin/yarn node -list
在上一个实验中,我们已经创建了目录,并上传了文件
/usr/local/hadoop/bin/hadoop fs -mkdir /input
/usr/local/hadoop/bin/hadoop fs -put *.txt /input/
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls / # 查看hdfs根目录下的数据
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /input # 查看hdfs文件系统/input下的数据,用于数据分析
**分析数据**
调用jar包中的wordcount方法,统计/input目录中的数据,单词出现的次数/input和/output 均为hdfs分布式文件系统中的数据
[root@hadoop1 hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
**调用集群分析数据,查看结果**(在hdfs分布式文件系统中查看分析结果)
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -cat /output/*
# 启动单个节点的nodemanager服务
[root@yarnnode ~]# /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager
# 查看角色,NodeManager角色启动
[root@yarnnode ~]# jps
# 查看ResourceManager下的节点信息
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/yarn node -list
# 删除nodemanager服务节点
[root@yarnnode ~]# /usr/local/hadoop/sbin/yarn-daemon.sh stop nodemanager
删除后节点不会马上消失,需要等待一段时间后才会消失
# 查看ResourceManager下的节点信息
# yarnnode已经被删除了,这里依然显示,重启以后才会消失
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/yarn node -list
# 停止resourcemanager服务
[root@hadoop1 ~]# /usr/local/hadoop/sbin/yarn-daemon.sh stop resourcemanager
# 启动resourcemanager服务
[root@hadoop1 ~]# /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager
resourcemanager重启以后,会有个重新注册的过程,需要等待 1 ~ 2分钟;yarnnode信息消失
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/yarn node --list
#安装 java-1.8.0-openjdk-devel; java-1.8.0-openjdk会作为依赖包被安装
[root@hadoop1 ~]# yum -y install java-1.8.0-openjdk-devel
[root@hadoop1 ~]# rsync -aXSH --delete /usr/local/hadoop newnode:/usr/local/
# 启动单个节点的DataNode服务
[root@newnode ~]# /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode
-report 显示集群的报告信息;Live datanodes
(4): 显示集群datanode服务正常的数量;如果某个节点没有启动,查看对应节点的日志信息 /usr/local/hadoop/log**
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
新节点上没有数据,需要从其他节点上拷贝数据,用于平衡数据;其他三个节点node1,node2,ndoe3,每个节点迁移一部分数据到newnode上
设置带宽,为了防止雪崩效应(即:当新节点创建后,其他机器都会想新节点拷贝数据,会导致新节点运行缓慢);设置迁移数据时的带宽,按字节进行计算,1Mb==8bytes
平时的网络带宽也是按字节计算的,千兆网,除以8,实际带宽为100多兆;一般机房的带宽为1000M,设置平衡数据的带宽为500M即可,为500000000
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -setBalancerBandwidth 500000000
# 开始平衡迁移数据,会在后台进行
[root@hadoop1 ~]# /usr/local/hadoop/sbin/start-balancer.sh
修复node节点
修复节点比较简单,步骤与增加节点一致
注意: 新节点的ip和主机名要与损坏节点的一致
如果旧节点数据丢失,新节点可以自动恢复数据
上线以后会自动恢复数据,如果数据量非常巨大,需要一段时间
hdfs节点上会存储数据,直接删除节点会造成数据的丢失;
hdfs节点被删除前,要先进行数据的迁移;
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls -h / # 在hdfs文件系统下,查看光盘信息
查看hdfs不同节点使用空间的大小,验证hdfs上的备份存储,在hadoop1主机上操作;上传光盘之前,hdfs文件系统中存入数据的大小可以忽略不记;上传光盘之后,各节点所dfs所使用的空间大小,就是此次光盘文件在hdfs中占用的空间大小;
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
>dfs.hosts.exclude >
>/usr/local/hadoop/etc/hadoop/exclude >
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
>
>
>dfs.namenode.http-address >
>hadoop1:50070 >
>
>
>dfs.namenode.secondary.http-address >
>hadoop1:50090 >
>
>
>dfs.replication >
>2 >
>
**######## 此为新添加的配置信息,exclude文件中记录着要删除的节点名称 ########**
>
>dfs.hosts.exclude >
>/usr/local/hadoop/etc/hadoop/exclude >
>
>
# 在exclude文件中,写入要删除节点的主机名
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/exclude
# 在 namenode 上更改完配置文件就可以迁移数据了,这里不需要同步配置文件
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -refreshNodes
# 查看newnode数据节点的状态信息,数据正在迁移
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
NFS网关用途
1》用户可以使用NFS版本3的客户端,浏览HDFS文件系统;
2》HDFS不支持mount, 只能通过NFS客户端的方式完成读和写数据;NFS网关,可以让HDFS文件系统被mount 挂载使用;
3》只支持文件附加,不支持随机写(没有锁的机制,即:一个程序执行写操作时,其他程序无法执行写操作,必须等待上一个程序操作完成才可以);
4》NFS网关只支持NFS版本3和TCP协议;
1》NFS网关是独立于HDFS之外的一台机器;
2》NFS网关由两部分组成:HDFS客户端(和HDFS交互)和NFS server(和用户交互);
3》user用户读写数据时,先访问【NFS server】,再由【NFS server】去访问【HDFS client】,最后由【HDFS client】从HDFS中读取或写入数据;
4》如果是用户写入数据时,【NFS server】会先将用户的写入操作存入一个NFS网关的【临时目录】中,然后【HDFS client】会从【临时目录】中读取数据,和HDFS进行交互;
将远程的UID 10或GID 11,映射到本地UID 100或GID 101(本次实验不采用)
groupadd -g 800 nfsuser
useradd -u 8000 -g 800 -r -d /var/hadoop nfsuser
# 创建组, -g 指定GID
[root@nfsgw ~]# groupadd -g 800 nfsuser
# 创建用户,-u 指定UID;-g 指定GID;-r 指创建系统账户;-d 自定义家目录
[root@nfsgw ~]# useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
# 创建组, -g 指定GID
[root@hadoop1 ~]# groupadd -g 800 nfsuser
# 创建用户,-u 指定UID;-g 指定GID;-r 指创建系统账户;-d 自定义家目录
[root@hadoop1 ~]# useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
※ 注意事项
- hadoop.proxyuser.{代理用户}.groups # 挂载点用组授权
>hadoop.proxyuser.nfsuser.groups >
>*
- hadoop.proxyuser.{代理用户}.hosts #挂载点主机授权
>hadoop.proxyuser.nfsuser.hosts >
>*
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
>
>
>fs.defaultFS >
>hdfs://hadoop1:9000 >
>hdfs file system >
>
>
>hadoop.tmp.dir >
>/var/hadoop >
>
**############# 新添加的参数,允许所有的组进行挂载 ############**
>
>hadoop.proxyuser.nfsuser.groups >
>*
>
**############# 新添加的参数,允许所有的主机进行挂载 ############**
>
>hadoop.proxyuser.nfsuser.hosts >
>*
>
>
配置 /etc/hosts,添加新节点信息
NameNode既要和Client进行交互,也要和DataNode进行交互,需要知道NFS网关的主机名
[root@hadoop1 ~]# vim /etc/hosts
192.168.1.50 hadoop1
192.168.1.51 node1
192.168.1.52 node2
192.168.1.53 node3
192.168.1.54 newnode
192.168.1.55 yarnnode
192.168.1.56 nfsgw
授权
// 停止 hadoop 集群的所有服务
[root@hadoop1 ~]# /usr/local/hadoop/sbin/stop-all.sh
// 启动hdfs集群
[root@hadoop1 ~]# /usr/local/hadoop/sbin/start-dfs.sh
// 查看集群的状态信息,Live datanodes (3)
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
配置步骤: 创建一条新主机,卸载rpcbind、nfs-utils
// 卸载系统上的nfs服务,会和我们部署HDFS的nfs网关冲突
[root@nfsgw ~]# yum -y remove rpcbind nfs-utils
// 安装java-1.8.0-openjdk依赖包
[root@nfsgw ~]# yum -y install java-1.8.0-openjdk-devel
>nfs.exports.allowed.hosts>
>* rw >
- nfs.dump.dir #文件转存目录
>nfs.dump.dir >
>/var/nfstmp >
**添加新nfs的参数即可,其他不需要修改**
[root@nfsgw ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
**nfs.exports.allowed.hosts 设置访问策略与读写权限**
>
* rw 所有主机,对hdfs拥有读写权限(rw 只读权限),如果有多条,以 ;分割
>
>nfs.exports.allowed.hosts >
>* rw >
>
**转储目录(写入数据时,先将数据存入此目录中,最后统一上传)**
>
>nfs.dump.dir >
>/var/nfstmp >
>
>
# 创建转存目录,转储目录的磁盘要大一些,防止大量数据的写入,空间不足的问题
[root@nfsgw ~]# mkdir /var/nfstmp
# 修改转储目录的权限,使nfsuser用户或nfsuser组中用户,可以存储数据
[root@nfsgw ~]# chown nfsuser.nfsuser /var/nfstmp/
# 查看验证授权
[root@nfsgw ~]# ls -ld /var/nfstmp/
# 删除logs下的所有数据
[root@nfsgw ~]# rm -rf /usr/local/hadoop/logs/*
# 为logs日志设置acl访问权限,让nfsuser用户对此目录拥有rwx权限
[root@nfsgw ~]# setfacl -m u:nfsuser:rwx /usr/local/hadoop/logs
# 查看logs日志文件的权限
[root@nfsgw ~]# getfacl /usr/local/hadoop/logs/
※ 注意事项:
# 进入到hadoop的安装目录下
[root@nfsgw ~]# cd /usr/local/hadoop/
# 使用root用户先启动portmap服务
[root@nfsgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
使用代理用户启动nfs3
[root@nfsgw hadoop]# sudo -u nfsuser ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
查看日志信息;nfs3的服务日志,所有者和所属组均为代理用户:nfsuser;portmap 的服务日志,所有者和所属于组均为root用户
[root@nfsgw hadoop]# ls -l logs/
禁用 access time 的时间更新 noatime
access time:为访问时间,即文件每被访问一次,就会更新一下文件的访问时间,访问频繁则会占用大量的系统资源,影响nfs网关的性能,所以需要禁用【noatime】;
禁用 acl 扩展权限 noacl
NFS网关不支持扩展权限,需要禁用【noacl】;
同步写入,避免重排序写入 sync
NFS网关不支持随机写,只支持顺序读写;为了避免重排序写入,带来不可预料的突发流量【流量的增加或减少】;为了数据存储的安全性和稳定性,不采用异步写入,设置为同步写入;
# 安装nfs的客户端软件
[root@newnode ~]# yum -y install nfs-utils
# 查看192.168.1.56主机上的共享目录
[root@newnode ~]# showmount -e 192.168.1.56
# 挂载nfs网关到/mnt目录下;-t 指定挂载的类型,为nfs;-o 指定挂载的选项:版本为v3版;协议为tcp协议;没有锁机制;禁用更新访问时间;禁用acl扩展;采用同步复制
[root@newnode ~]# mount -t nfs -o vers=3,proto=tcp,nolock,noatime,noacl,sync 192.168.1.56:/ /mnt/
# 查看/mnt,可以看到hdfs文件系统中的数据,挂载成功
[root@newnode ~]# ls /mnt/
#-t 指定挂载的类型,为nfs
#-o 指定挂载的选项:版本为v3版;协议为tcp协议;没有锁机制;禁用更新访问时间;禁用acl扩展;采用同步写入
# 配置nfs的永久性挂载
[root@newnode ~]# vim /etc/rc.d/rc.local
[root@yarnnode ~]# mount -t nfs -o vers=3,proto=tcp,nolock,noatime,noacl,sync 192.168.1.56:/ /mnt/