安装部署
- Hadoop三大核心组件
– HDFS已经部署完毕https://blog.csdn.net/LgMizar/article/details/103972345
– MapReduce
– Yarn - 系统规划
主机 | 角色 | 软件 |
---|---|---|
192.168.1.60 hadoop1 | NameNode和SecondaryNameNode和ResourceManager | HDFS和YARN |
192.168.1.61 node1 | DataNode和NodeManager | HDFS和YARN |
192.168.1.62 node2 | DataNode和NodeManager | HDFS和YARN |
192.168.1.63 node3 | DataNode和NodeManager | HDFS和YARN |
- hadoop1操作
配置mapred-site.xml分布式计算框架
cd /usr/local/hadoop/etc/hadoop/
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> #资源管理类
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml资源管理
im yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name> #resourcemanager地址
<value>nn01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name> #使用哪个计算框架
<value>mapreduce_shuffle</value> #计算框架的名称
</property>
</configuration>
同步配置
for i in {61..63}
do
rsync -aSHX --delete /usr/local/hadoop 192.168.1.$i:/usr/local/ &
done
验证配置
cd /usr/local/hadoop
./sbin/start-dfs.sh
Starting namenodes on [nn01]
nn01: namenode running as process 23408. Stop it first.
node1: datanode running as process 22409. Stop it first.
node2: datanode running as process 22367. Stop it first.
node3: datanode running as process 22356. Stop it first.
Starting secondary namenodes [nn01]
nn01: secondarynamenode running as process 23591. Stop it first.
./sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-nn01.out
node2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node2.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
ansible all -m shell -a 'jps'
node3 | SUCCESS | rc=0 >>
1588 NodeManager
1930 Jps
1484 DataNode
node1 | SUCCESS | rc=0 >>
4707 DataNode
11987 Jps
4821 NodeManager
node2 | SUCCESS | rc=0 >>
1378 DataNode
1828 Jps
1482 NodeManager
web访问hadoop
http://192.168.1.60:50070/ #--namenode web页面(nn01)
http://192.168.1.60:50090/ #--secondory namenode web页面(nn01)
http://192.168.1.61:50075/ #--datanode web页面(node1,node2,node3)
http://192.168.1.60:8088/ #--resourcemanager web页面(nn01)
http://192.168.1.61:8042/ #--nodemanager web页面(node1,node2,node3)
Hadoop词频统计
./bin/hadoop fs -ls / #查看集群文件系统的根,没有内容
./bin/hadoop fs -mkdir /aaa #在集群文件系统下创建aaa目录
./bin/hadoop fs -ls / #再次查看,有刚创建的aaa目录
Found 1 items
drwxr-xr-x - root supergroup 0 2018-09-10 09:56 /aaa
./bin/hadoop fs -touchz /fa #在集群文件系统下创建fa文件
./bin/hadoop fs -put *.txt /aaa #上传*.txt到集群文件系统下的aaa目录
./bin/hadoop fs -ls /aaa #查看
Found 3 items
-rw-r--r-- 2 root supergroup 86424 2018-09-10 09:58 /aaa/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2018-09-10 09:58 /aaa/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2018-09-10 09:58 /aaa/README.txt
./bin/hadoop fs -get /aaa #下载集群文件系统的aaa目录
./bin/hadoop jar \
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /aaa /bbb #hadoop集群分析大数据,hadoop集群/aaa里的数据存到hadoop集群/bbb下
./bin/hadoop fs -cat /bbb/* #查看集群里的数据
增加节点
- 增加一个新的节点node4步骤
– 启动新系统,设置新节点的主机信息
– 在所有节点修改/etc/hosts,增加新节点的主机信息
– 安装java运行环境(java-1.8.0.openjck-devel)
– 修改NameNode的salves文件增加该节点
– 拷贝NameNode的/usr/local/hadoop到本机
– 在该节点启动DataNode
/usr/local/hadoop/sbin/hadoop-daemon.sh start datanode
- 查看状态
jps
24439 Jps
24351 DataNode
- node4设置同步带宽并同步数据
./bin/hdfs dfsadmin -setBalancerBandwidth 60000000
Balancer bandwidth is set to 60000000
./sbin/start-balancer.sh
./bin/hdfs dfsadmin -report #查看集群状态
修复节点
- HDFS修复节点
– 修复节点比较简单,与增加节点基本一致
–注意:新节点的ip和主机名要与损坏节点一致
– 启动服务
./sbin/hadoop-daemon.sh start datanode
– 数据恢复是自动的
– 上线以后会自动恢复数据,如果数据量非常巨大,可能需要一定的时间
删除节点
– 修改修改NameNode的salves文件
#去掉之前添加的node4
node1
node2
node3
– 配置NameNode的hdfs-site.xml
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
#在此配置文件里面加入下面四行
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value>
</property>
– 增加dfs.hosts.exclude配置文件,写入要删除的节点主机名
vim /usr/local/hadoop/etc/hadoop/exclude
node4
– 导出数据hadoop上:
./bin/hdfs dfsadmin -refreshNodes
Refresh nodes successful
./bin/hdfs dfsadmin -report #查看node4显示Decommissioned
- Normal : 正常状态
- Decommissioned in Program : 数据正在迁移
- Decommissioned : 数据迁移完成
- 注意 : 仅当状态变成Decommissioned才能down机下线
newnode上:
./sbin/hadoop-daemon.sh stop datanode #停止datanode
stopping datanode
./sbin/yarn-daemon.sh start nodemanager #yarn 增加 nodemanager
./sbin/yarn-daemon.sh stop nodemanager #停止nodemanager
stopping nodemanager
./bin/yarn node -list
//yarn 查看节点状态,还是有node4节点,要过一段时间才会消失
Total Nodes:4
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node3:34628 RUNNING node3:8042 0
node2:36300 RUNNING node2:8042 0
newnode:42459 RUNNING node4:8042 0
node1:39196 RUNNING node1:8042 0
NFS网关
- NFS网关用途
– 用户可以通过操作系统兼容的本地NFSv3
客户端来浏览HDFS文件系统
– 用户可以从HDFS文件系统下载文档到本地文件系统
– 用户可以通过挂载点直接流化数据,支持文件附加,但是不支持随机写(意思是可以顺序写,不能加锁)
– NFS网关支持NFSv3和允许HDFS作为客户端文件系统的一部分被挂载 - 特性
– HDFS超级用户是与NameNode进程本身具有相同标示的用户,超级用户可以执行任何操作,因为权限检查永远不会认为超级用户失败 - 注意事项
– 在非安全模式下,运行网关进程的用户是代理用户
– 在安全模式下,Kerberos keytab中的用户是代理用户 - 配置代理用户
– 在NameNode和NFSGW上添加用户
– 代理用户的UID,GID,用户名必须完全相同
– 如果因特殊原因客户端的用户和NFS网关的用户UID不能保持一致,需要我们配置nfs.map的静态映射关系
– nfs.map
uid 10 100 # Map the remore UID 10 the local UID 100
gid 11 101 # Map the remote GID 11 the local GID 101
基础准备
创建代理用户(hadoop01和nfsgw上面操作)
groupadd -g 800 nfsuser
useradd -u 800 -g 800 -r -d /var/hadoop nfsuser
更改主机名,配置/etc/hosts(/etc/hosts在hadoop01和nfsgw上面配置)
vim /etc/hosts
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
配置core-site.xml
hadoop.proxyuser.{代理用户}.groups
hadoop.proxyuser.{代理用户}.hosts
在非安全模式下,运行网关的用户为代理用户
groups为挂载用户所使用的组
hosts为挂载点为主机地址
./usr/local/hadoop/sbin/stop-all.sh #停止所有服务
> /usr/local/hadoop/etc/hadoop/exclude #清空之前的删除节点
vim /usr/local/hadoop/etc/hadoop/core-site.xml # 添加下面
vim core-site.xml
<property>
<name>hadoop.proxyuser.nfsuser.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.nfsuser.hosts</name>
<value>*</value>
</property>
同步配置到node1,node2,node3
for i in {61..63}
do
rsync -aXSH --delete /usr/local/hadoop/ 192.168.1.$i:/usr/local/hadoop/ &
done
启动集群
/usr/local/hadoop/sbin/start-dfs.sh
/usr/local/hadoop/bin/hdfs dfsadmin -report #查看状态
NFSGW配置
- 配置步骤
– 启动一个新系统,卸载rpcbind、nfs-utils
– 配置/etc/hsots,添加所有NameNode和DataNode的主机名与Ip对应关系
– 安装java运行环境(java-1.8.0-openjdk-devel)
–同步NameNode的/usr/local/hadoop到本机
– 配置hdfs-site.xml
– 启动服务
安装java-1.8.0-openjdk-devel和rsync
yum -y install java-1.8.0-openjdk-devel
rsync -avXSH --delete 192.168.1.60:/usr/local/hadoop /usr/local/
创建数据根目录 /var/hadoop(在NFSGW主机上面操作)
mkdir /var/hadoop
创建转储目录,并给用户nfs 赋权
mkdir /var/nfstmp
chown nfsuser:nfsuser /var/nfstmp
给/usr/local/hadoop/logs赋权(在NFSGW主机上面操作)
setfacl -m user:nfsuser:rwx /usr/local/hadoop/logs
vim /usr/local/hadoop/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>
启动服务
/usr/local/hadoop/sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
#portmap服务只能用root用户启动
jps
23714 Jps
23670 Portmap
su - nfsuser
cd /usr/local/hadoop/
./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3
#nfs3只能用代理用户启动
jps
1362 Jps
1309 Nfs3
exit
jps #root用户执行可以看到portmap和nfs3
1216 Portmap
1309 Nfs3
1374 Jps
客户端实现开机自动挂载
showmount -e 192.168.1.65
Export list for 192.168.1.65:
/ *
vim /etc/fstab #永久挂载
192.168.1.65:/ /mnt/ nfs vers=3,proto=tcp,nolock,noatime,sync,noacl,_netdev 0 0
#临时挂载 mount -t nfs -o vers=3,proto=tcp,nolock,noatime,sync,noacl 192.168.1.65:/ /mnt/
mount -a
df -h
192.168.1.65:/ 120G 16G 105G 13% /mnt
rpcinfo -p 192.168.1.65
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