Hadoop的基本运用

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免密登录

扫描二维码关注公众号,回复: 5940305 查看本文章
[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

猜你喜欢

转载自blog.csdn.net/weixin_43800781/article/details/86605688