目录
MapReduce的配置(主要是给开发用的,程序呢)
hadoop统计词频
移除节点
NFS配置
需要修改两个配置文件 mapred-site.xml和yarn-site.xml,在nn01节点安装之后,需要同步到其他的主机上.
[root@nn01 hadoop]# cd /usr/local/hadoop/etc/hadoop/
[root@nn01 hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@nn01 hadoop]# vim mapred-site.xml
20
21
22
23
解析:分布式计算框架mapred-site.xml只支持local和yarn两种,单机使用local,集群使用yaml
[root@nn01 hadoop]# vim yarn-site.xml
18
19
20
21
22
23
24
25
[root@nn01 ~]# for i in {61..63}; do scp -r /usr/local/hadoop/ 192.168.1.$i:/usr/local/hadoop/ ; done
[root@nn01 hadoop]# ./sbin/start-yarn.sh ---启动resourcemanager和nodemanager两个节点
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-nn01.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
node2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node2.out
[root@nn01 hadoop]# jps
2647 ResourceManager
1256 NameNode
2906 Jps
1439 SecondaryNameNode
[root@nn01 hadoop]# ssh node1 jps
1315 NodeManager
1411 Jps
1018 DataNode
[root@nn01 hadoop]# ssh node2 jps
983 DataNode
1279 NodeManager
1375 Jps
[root@nn01 hadoop]# ssh node3 jps
1280 NodeManager
1376 Jps
984 DataNode
验证
[root@nn01 hadoop]# /usr/local/hadoop/bin/yarn node -list
20/06/19 20:35:25 INFO client.RMProxy: Connecting to ResourceManager at nn01/192.168.1.60:8032
Total Nodes:3
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node1:43208 RUNNING node1:8042 0
node3:40913 RUNNING node3:8042 0
node2:36472 RUNNING node2:8042 0
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop --help #查看hadoop的一些操作
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs #查看命令的一些参数
Usage: hadoop fs [generic options]
[-appendToFile
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -ls /
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -mkdir /input
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2020-06-19 20:37 /input
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -ls / #看文件系统里面的/目录里面用什么
Found 2 items
-rw-r--r-- 2 root supergroup 0 2020-06-19 20:43 /file1
drwxr-xr-x - root supergroup 0 2020-06-19 20:37 /input
[root@nn01 hadoop]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share zhy zhy1
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -put *.txt /input/ #将本地的*.txt的文件上传的hadoop的文件系统中
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -get /input /tmp/ #将hadoop的文件系统下载到本地的/tmp/
[root@nn01 hadoop]# cd /tmp/
[root@nn01 tmp]# ls
firefox_root input systemd-private-76f2aeadd70b469a8cc6143e521f002a-chronyd.service-OA3zeG
hadoop-root Jetty_nn01_50070_hdfs____.g8rurc systemd-private-c4b2b65a9c924fc19c10511b54b16054-chronyd.service-i7iO6z
hadoop-root-namenode.pid Jetty_nn01_50090_secondary____qe27dn systemd-private-ea72bc68d88548e7a5ce9e5e8c9f6031-chronyd.service-xlIB1q
hadoop-root-secondarynamenode.pid Jetty_nn01_8088_cluster____.bwtsq9 yarn-root-resourcemanager.pid
hsperfdata_root sh-thd-27940862161
[root@nn01 hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /ouput #分析数据,将hadoop分布式文件系统的中的/input的数据进行单词频率的统计,统计完毕之后放到/output
[root@nn01 hadoop]# /usr/local/hadoop/bin/hadoop fs -cat /ouput/part-r-00000 查看分析出来的数据
配置node4
[root@node4 ~]# yum -y install java-1.8.0-openjdk-devel
[root@node4 ~]# mkdir /var/hadoop
[root@nn01 ~]# ssh-copy-id 192.168.1.64
[root@nn01 ~]# scp /etc/hosts 192.168.1.64:/etc/
hosts 100% 226 137.3KB/s 00:00
[root@nn01 ~]# cd /usr/local/hadoop/
[root@nn01 hadoop]# vim ./etc/hadoop/slaves
[root@nn01 hadoop]# cat ./etc/hadoop/slaves
node1
node2
node3
node4
[root@nn01 hadoop]# scp -r /usr/local/hadoop/ 192.168.1.64:/usr/local/hadoop/
[root@nn01 hadoop]# for i in node{1..3}; do scp /usr/local/hadoop/etc/hadoop/slaves root@$i:/usr/local/hadoop/etc/hadoop/ ; done
[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@node4 hadoop]# cd /usr/local/hadoop/
[root@node4 hadoop]# ./sbin/hadoop-daemon.sh start datanode #开启datanode节点
[root@node4 hadoop]# /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager #开启nodemanager节点
starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node4.out
[root@node4 hadoop]# jps
1605 Jps
1256 DataNode
1503 NodeManager
starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-node4.out #启动
[root@node2 hadoop]# ./sbin/start-dfs.sh ---可以选择重新启动HDFS集群,如果集群中显示另外的节点信息的时候
[root@nn01 hadoop]# ./bin/hdfs dfsadmin -report ---可以看到出现新的节点
[root@nn01 hadoop]# ./sbin/start-yarn.sh ----可以选择重新启动mapreduce集群,如果集群中显示另外的节点信息的时候
[root@nn01 hadoop]# /usr/local/hadoop/bin/yarn node -list --可以看到新的节点信息
[root@node4 ~]# jps
24704 Jps
1256 DataNode
1503 NodeManager
基本操作思路:在移除节点的时候,需要先把对应的节点的数据,移除到其他的节点.假设要移除node4节点的数据,我们需要从查node4的DFS数据量,如果这个节点的数据量被移到其他的记得,则可以下线node4节点,下线节点需要在主节点nn01上的配置文件上配置下线节点的信息,在此刷新节点的时候,会读取下线节点的信息从而执行.如果需要将节点彻底移除节点外,这个时候需要将有关配置的node4节点的信息清楚掉,再次刷新,需要等3-4个小时的时候,主要,如果数据量比较大的时候,在迁移节点信息的时候,会化比较多的时间.如果迁移之后的数据,相差几十K,这个可以忽略不计.
[root@nn01 hadoop]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share zhy zhy1
[root@nn01 hadoop]# ./bin/hdfs dfsadmin -report
Name: 192.168.1.64:50010 (node4)
DFS Used: 8192 (8 KB)
Name: 192.168.1.61:50010 (node1)
DFS Used: 200704 (196 KB)
Name: 192.168.1.63:50010 (node3)
DFS Used: 172032 (168 KB)
Name: 192.168.1.62:50010 (node2)
DFS Used: 364544 (356 KB)
[root@nn01 hadoop]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
33
34
35
36
[root@nn01 hadoop]# cat /usr/local/hadoop/etc/hadoop/exclude #创建该文件,文件写名需要移除那台节点
node4
[root@nn01 hadoop]# ./bin/hdfs dfsadmin -refreshNodes #刷新节点
Refresh nodes successful
[root@nn01 hadoop]# ./bin/hdfs dfsadmin -report #查看node4状态,如果是Decommissioned,则表示同步成功,同时也可以观察其他节点的存储数据量在增加,增加的量为node4的量,这个时候node4节点则可以下线了.
Name: 192.168.1.64:50010 (node4)
Decommission Status : Decommissioned
下线节点:dnf节点和yarn节点
[root@node4 ~]# /usr/local/hadoop/sbin/hadoop-daemon.sh stop datanode
stopping datanode
[root@nn01 hadoop]# cat /usr/local/hadoop/etc/hadoop/slaves
node1
node2
node3
[root@nn01 hadoop]# vim /usr/local/hadoop/etc/hadoop/slaves
[root@nn01 hadoop]# > /usr/local/hadoop/etc/hadoop/exclude
[root@nn01 hadoop]# /usr/local/hadoop/bin/hdfs dfsadmin -refreshNodes
Refresh nodes successful
[root@nn01 hadoop]# /usr/local/hadoop/bin/hdfs dfsadmin -report #需要3-4个小时下线
[root@node4 ~]# /usr/local/hadoop/sbin/yarn-daemon.sh stop nodemanager #需要3-4个小时下线
stopping nodemanager
[root@node4 ~]# /usr/local/hadoop/bin/yarn node -list
概念:当使用hadoop的文件系统操作的时候,对于目录文件有些太过于繁琐,这个时候如果可以将hadoop的文件系统挂载到NFS上去操作,这个时候的操作步骤相当于会比较的简单.
NFS网关用途:用户可以通过操作系统兼容的本地NFSv3客户端来浏览HDFS文件系统,用户可以从HDFS文件系统下载文档到本地文件系统,用户可以通过挂载点直接流化数据,支持文件附加,但是不支持随机写,NFS网关支持NFSv3和容许HDFS作为客户端文件系统的一部分被挂载.
配置
[root@nn01 hadoop]# cat /etc/hosts
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
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
[root@nfsgw ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@nfsgw ~]# cat /etc/hosts
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.60 nn01
192.168.1.61 node1
192.168.1.62 node2
192.168.1.63 node3
192.168.1.65 nfsgw
配置代理用户NameNode和NFSGW上添加代理用户,代理用户的UID,GID,用户名必须完全相同.如果因特殊原因客户端的用户和NFS网关的用户UID不能保持一致,需要我们配置nfs.map的静态映射关系.为了不是那么麻烦,我们可以在两台机器上创建新的用户即可.
[root@nfsgw ~]# groupadd -g 800 nfsuser
[root@nfsgw ~]# useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
[root@nn01 hadoop]# groupadd -g 800 nfsuser
[root@nn01 hadoop]# useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
在集群中授权,在集群的nno1管理节点上
1.停止集群
[root@nn01 hadoop]# /usr/local/hadoop/sbin/stop-all.sh
2.配置文件,添加授权信息core-site.xml
[root@nn01 hadoop]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
28
29
30
31
32
33
34
35
3.同步配置文件到所有集群机器
[root@nn01 ~]# cd /root/.ssh
[root@nn01 .ssh]# ssh-copy-id 192.168.1.65
[root@nn01 hadoop]# for i in node{1..3}
> do
> scp /usr/local/hadoop/etc/hadoop/core-site.xml root@$i:/usr/local/hadoop/etc/hadoop/core-site.xml
> done
core-site.xml 100% 1199 651.0KB/s 00:00
core-site.xml 100% 1199 874.4KB/s 00:00
core-site.xml 100% 1199 2.3MB/s 00:00
4.启动集群,验证
[root@nn01 ~]# /usr/local/hadoop/sbin/start-dfs.sh
[root@nn01 ~]# jps
20899 Jps
20596 NameNode
20790 SecondaryNameNode
[root@nn01 ~]# ssh node1 jps
5856 DataNode
5934 Jps
[root@nn01 ~]# ssh node2 jps
6220 Jps
6142 DataNode
[root@nn01 ~]# ssh node3 jps
5641 Jps
5563 DataNode
[root@nn01 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
Live datanodes (3):
配置NFS网关
配置步骤启动一个新的系统,卸载rpcbind,nfs-utils
配置/etc/hosts,添加所有NameNode和DataNode的主机名和ip对应关系
安装JAVA运行环境(java-1.8.0-openjdk-devel)
同步NameNode的/usr/local/hadoop到本机
[root@nfsgw ~]# mkdir /var/hadoop
[root@nn01 hadoop]# scp -r /usr/local/hadoop/ 192.168.1.65:/usr/local/hadoop/
配置hdfs-site.xml
[root@nfsgw ~]# cd /usr/local/hadoop/etc/hadoop/
[root@nfsgw hadoop]# vim hdfs-site.xml
38
39
40
41
42
43
44
45
解析:nfs.exports.allowed.hosts默认情况下,export可以被任何客户端挂载,为了更好的控制访问,可以设置属性,值和字符串对应机器名和访问策略,通过空格来分割.机器名的格式可以是单一的主机,java的正则表达式或者IPV4地址.
使用rw或ro可以指定导出目录的读写或只读权限.如果访问策略没被提供,默认为只读.每个条目使用;来分割
nfs.dump.dir
用户需要更新文件转储目录参数.NFS客户端经常重新安排写操作,顺序的写操作会随机到达NFS网关.这个目录常用于临时存储无序的写操作.对于每个文件,无序的写操作会在他们积累在内存中超过一定值,(如1M)时被转储.需要确保有足够的空间的目录..
如:应用上传10个100M,那么这个转储目录推荐1GB左右的空间,以便每个文件都发生最坏的情况.只有NFS网关需要在设置该属性后重启
启动服务
[root@nfsgw hadoop]# mkdir /var/nfstmp #创建hadoop,并给他设置权限
[root@nfsgw hadoop]# chown nfsuser.nfsuser /var/nfstmp
[root@nfsgw hadoop]# cd /usr/local/hadoop/
[root@nfsgw hadoop]# ll
drwxr-xr-x 2 root root 4096 6月 22 16:12 logs
[root@nfsgw hadoop]# setfacl -m u:nfsuser:rwx logs #给logs目录设置对应的权限
[root@nfsgw hadoop]# getfacl logs
# file: logs
# owner: root
# group: root
user::rwx
user:nfsuser:rwx
group::r-x
mask::rwx
other::r-x
[root@nfsgw hadoop]# cd /usr/local/hadoop/
[root@nfsgw hadoop]# jps
25303 Jps
[root@nfsgw hadoop]# /usr/local/hadoop/sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
#一定要要先启动portmap.因为nfs是在portmap的时候起来的,如果portmap重启了,需要将
starting portmap, logging to /usr/local/hadoop/logs/hadoop-root-portmap-nfsgw.out
[root@nfsgw hadoop]# jps
25376 Jps
25332 Portmap
[root@nfsgw hadoop]# sudo -u nfsuser id ##一定要采用nfsuser
uid=800(nfsuser) gid=800(nfsuser) 组=800(nfsuser)
[root@nfsgw hadoop]# sudo -u nfsuser /usr/local/hadoop/sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
starting nfs3, logging to /usr/local/hadoop/logs/hadoop-nfsuser-nfs3-nfsgw.out
[root@nfsgw hadoop]# sudo -u nfsuser jps
25432 Nfs3
25484 Jps
用客户端访问
注意:目前NFS只能使用v3版本vers=3,只使用TCP作为传输协议,proto=tcp,不支持NLM所以使用nolock.禁用access time的时间更新noatime.禁用acl扩展权限.强烈建议使用安装选项sync,它可以最小化避免重排序写入造成不可预测的吞吐量,未指定同步选项可能会导致上传大文件时出现不可靠行为.
[root@node4 ~]# yum -y install nfs-utils
[root@node4 ~]# showmount -e 192.168.1.65
Export list for 192.168.1.65:
/ *
[root@node4 ~]# mount -t nfs -o vers=3,proto=tcp,nolock,noacl,noatime,sync 192.168.1.65:/ /mnt
[root@node4 ~]# cd /mnt/
[root@node4 mnt]# ls
file1 input ouput system tmp ---HDFS文件系统
实现开机自动挂载
[root@node4 mnt]# vim /etc/fstab
/dev/vda1 / xfs defaults 0 0
192.168.1.65:/ /mnt/ nfs vers=3,proto=tcp,nolock,noatime,sync,noacl,_netdev 0 0