hadoop分布式集群 、 分布式集群节点管理 、 hdfs扩展应用
一、完全分布式
1.1 系统规划
1.1.1 Hadoop 三大核心组件
– 分布式文件系统
– HDFS 已经部署完毕
– 分布式计算框架
– mapreduce
– 集群资源管理
– yarn
1.1.2 系统架构
1.2 安装部署
1.2.1 mapred配置
1. 分布式计算框架 mapred-site.xml
– 改名
~] # mv mapred-site.xml.template mapred-site.xml
2. 分布式计算框架 mapred-site.xml
– 只支持 local 和 yarn 两种
– 单机使用 local
– 集群使用 yarn
3. mapred-site.xml 配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
1.2.2 yarn配置
1. 资源管理 yarn-site.xml
– resourcemanager 地址
– yarn.resourcemanager.hostname
– nodemanager 使用哪个计算框架
– yarn.nodemanager.aux-services
– mapreduce_shuffle 是我们使用计算框架的名称
2. yarn-site.xml 配置
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>nn01</value> //指定resourcemanager的主机名
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value> //指定使用的计算机框架名称
</property>
</configuration>
1.2.3 同步配置并启动服务
ALL: 同步配置到主机
NN1: 启动服务 ./sbin/start-yarn.sh //启动服务
ALL: 验证角色 jps
NN1: 验证节点状态 ./bin/yarn node -list //验证服务
1.2.4 web访问hadoop
1. namenode web 地址 【nn01】
http://192.168.1.10:50070
2.sedondary namenode web 地址 【nn01】
地址 http://192.168.1.10:50090
3.yarn resourcemanager 管理地址 【node1,node2,node3】
http://192.168.1.10:8088
4.datanode web 地址 【nn01】
http://192.168.1.11:50075
5.nodemanager web 地址 【node1,node2,node3】
http://192.168.1.11:8042
二、HDFS 基本使用
2.1 HDFS 基本命令
– ./bin/hadoop fs –ls / //列出集群/下的所有文件
– 对应 shell 命令 ls /
– ./bin/hadoop fs –mkdir /abc //创建/abc文件夹
– 对应 shell 命令 mkdir /abc
– ./bin/hadoop fs –rmdir /abc //删除/abc文件夹
– 对应 shell 命令 rmdir /abc
– ./bin/hadoop fs –touchz /urfile //新建/urfile文件
– 对应 shell 命令 touch /urfile
– ./bin/hadoop fs –cat /urfile //查看/urfile文件
– 对应 shell 命令 cat /urfile
– ./bin/hadoop fs –rm /urfile //删除/urfile文件
– 对应 shell 命令 rm /urfile
– 上传文件
– ./bin/hadoop fs –put localfile /remotefile
– 下载文件
– ./bin/hadoop fs –get /remotefile
2.2 hadoop词频统计
2.2.1 需求
统计多个文件出现次数最多的单词
2.2.2 实现思路
1. 在集群文件系统里创建文件夹
2. 上传要分析的文件到目录中
3. 分析上传文件
4. 展示结果
1. 创建文件夹
hadoop ] # ./bin/hadoop fs -mkdir /input
2. 上传要分析的文件
adoop ] # ./bin/hadoop fs -put *.txt /input
3. 提交分析作业
adoop ] # ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output
4. 查看结果
adoop ] # ./bin/hadoop fs –cat output/*
三、节点管理
3.1 hdfs节点管理
3.1.1 增加节点
1、启动一个新的系统,禁用 selinux、禁用 firewalld
~]# sestatus
~]# rpm -qa | grep firewalld
2、设置 ssh 免密码登录 【nn01能实现免密登录】
[root@nn01 bin]# ssh-copy-id 192.168.5.14
3、在所有节点增加新新节点的主机信息 /etc/hosts
]# vim /etc/hosts
……
192.168.5.14 node4
4、安装 java openjdk 运行环境
~ ] # yum -y install java-1.8.0-openjdk-devel
5、修改namenode的slaves文件增加该节点
nn01 ~]# vim slaves
node1
….
node4
6、拷贝namnode的 /usr/local/hadoop 到本机
nn01 ~]# scp -r /usr/local/hadoop/ node4:/usr/local/
7、同步配置到所有主机
nn01 ~]# vim rsyncConfig.sh
-
#!/bin/bash
-
function
syncfile(){
-
for host
in
$@</span>;<span class="hljs-keyword">do</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> rsync -az --delete /usr/<span class="hljs-built_in">local</span>/hadoop/etc <span class="hljs-variable">${host}:/usr/
local/hadoop/ &
-
rsync /etc/hosts
${host}</span>:/etc/hosts</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">done</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">wait</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">if</span> (( <span class="hljs-variable">$# > 0 ));
then
-
syncfile
$@</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">else</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">${0} host1 host2 host3 … … host(N)”
-
fi
nn01 ~]# ./rsyncConfig.sh node{1..3} nn02
8、在该节点启动Datanode
node4 ~]#./sbin/hadoop-daemon.sh start datanode
9、设置同步带宽,并同步数据
node4 ~]# ./bin/hdfs dfsadmin -setBalancerBandwidth 67108864 //设置67*8=530M带宽
node4 ~]# ./sbin/start-balancer.sh
10、查看集群状态
node4 ~]# ./bin/hdfs dfsadmin -report
3.1.2 修复节点
HDFS 修复节点
1. 修复节点比较简单,与增加节点基本一致
2. 需要注意新节点的 ip 与 主机名 要与损坏节点一致
3. 启动服务
./sbin/hadoop-daemon.sh start datanode
– 数据恢复是自动的
– 我们上线以后会自动恢复数据,如果数据量非常巨大,可能需要一定的时间
3.1.3 删除节点
HDFS 删除节点
1. 配置NameNode的 hdfs-site.xml
2. 增加 dfs.hosts.exclude 配置
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value>
</property
3. 增加 exclude 配置文件,写入要删除的节点 主机名
4. 更新数据
./bin/hdfs dfsadmin -refreshNodes
5. 查看状态 ./bin/hdfs dfsadmin -report
Normal 正常状态
Decommissioned in Program 数据正在迁移
Decommissioned 数据迁移完成
注意:只有当状态变成 Decommissioned 才能 down机下线
3.2 yarn节点管理
Yarn 的相关操作
– 由于在 2.x hadoop 引入了 yarn 框架,对于计算节点的操作已经变得非常简单
1.增加节点
hadoop ] # sbin/yarn-daemon.sh start nodemanager
2. 删除节点
hadoop ] # sbin/yarn-daemon.sh stop nodemanager
3. 查看节点 (Resourcemanager)
hadoop ] # ./bin/yarn node -list
注意:由于 yarn 不包含数据,所以在增加删除修复节点的时候比较简单,hdfs 要注意数据安全。
四、NFS网关
作用:不需要通过hdfs提供的命令 (./bin/hadoop fs –ls / )访问集群,NFS网关可以把HDFS文件系统挂载到本地,对挂载点的操作就是对HDFS文件系统的操作
4.1 配置 NFS 网关
4.1.1 HDFS配置
1 配置 /etc/hosts (NFSGW)
192.168.1.10 nn01
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3
192.168.1.15 nfsgw
2 添加用户(nfsgw, nn01)
groupadd -g 500 lijun
useradd -u 500 -g 500 lijun
3. NN01 停止集群
./sbin/stop-all.sh4. NN01 增加配置 core-site.xml
-
<property>
-
<name>hadoop.proxyuser.nsd1804.groups
</name> //groups 为挂载点用户所使用的组
-
<value>*
</value>
-
</property>
-
<property>
-
<name>hadoop.proxyuser.nsd1804.hosts
</name> //hosts 为挂载点主机地址
-
<value>*
</value>
-
</property>
5. NN01 同步配置到 node1 node2 node3
~ ] # ./rsyncConfig.sh node{1..3}
6. NN01 启动集群
~ ] #./sbin/start-dfs.sh
7. NN01查看状态
./bin/hdfs dfsadmin -report
4.1.2 NFSGW配置
1. NFSGW: 安装 java-1.8.0-openjdk-devel
~ ] # yum -y install java-1.8.0-openjdk-devel
2. NFSGW: 同步 nn01 的 /usr/local/hadoop 到NFSGW的相同目录下
nn01 ~ ] # scp nn01:/usr/local/hadoop nfsgw:/usr/local
3. NFSGW: 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>
4. NFSGW: 创建转储目录,并给用户 lijun 赋权
mkdir /var/nfstmp
chown lijun:lijun /var/nfstmp
5. NFSGW: 给 /usr/local/hadoop/logs 赋权
setfacl -m u:lijun:rwx
6. NFSGW: 创建数据根目录 /var/hadoop
mkdir /var/hadoop
7. NFSGW: 必须用 root 启动,必须先启动 !!!
./sbin/hadoop-daemon.sh –script ./bin/hdfs start portmap
8. NFSGW: 必须用代理用户lijun启动,必须后启动 !!!
~ ] # su - lijun
~ ] # ./sbin/hadoop-daemon.sh –script ./bin/hdfs start nfs3
4.1.3 客户端验证
1.Client: 安装 nfs-utils
~] # yum -y install nfs-utils
2. mount 挂载NFS共享目录
~] # mount -t nfs -o vers=3,proto=tcp,nolock,noatime,sync,noacl 192.168.1.15:/ /mnt/
3.查看注册服务
rpcinfo -p 192.168.1.15
4.查看共享目录
showmount -e 192.168.1.15
一、完全分布式
1.1 系统规划
1.1.1 Hadoop 三大核心组件
– 分布式文件系统
– HDFS 已经部署完毕
– 分布式计算框架
– mapreduce
– 集群资源管理
– yarn
1.1.2 系统架构
1.2 安装部署
1.2.1 mapred配置
1. 分布式计算框架 mapred-site.xml
– 改名
~] # mv mapred-site.xml.template mapred-site.xml
2. 分布式计算框架 mapred-site.xml
– 只支持 local 和 yarn 两种
– 单机使用 local
– 集群使用 yarn
3. mapred-site.xml 配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
1.2.2 yarn配置
1. 资源管理 yarn-site.xml
– resourcemanager 地址
– yarn.resourcemanager.hostname
– nodemanager 使用哪个计算框架
– yarn.nodemanager.aux-services
– mapreduce_shuffle 是我们使用计算框架的名称
2. yarn-site.xml 配置
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>nn01</value> //指定resourcemanager的主机名
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value> //指定使用的计算机框架名称
</property>
</configuration>
1.2.3 同步配置并启动服务
ALL: 同步配置到主机
NN1: 启动服务 ./sbin/start-yarn.sh //启动服务
ALL: 验证角色 jps
NN1: 验证节点状态 ./bin/yarn node -list //验证服务
1.2.4 web访问hadoop
1. namenode web 地址 【nn01】
http://192.168.1.10:50070
2.sedondary namenode web 地址 【nn01】
地址 http://192.168.1.10:50090
3.yarn resourcemanager 管理地址 【node1,node2,node3】
http://192.168.1.10:8088
4.datanode web 地址 【nn01】
http://192.168.1.11:50075
5.nodemanager web 地址 【node1,node2,node3】
http://192.168.1.11:8042
二、HDFS 基本使用
2.1 HDFS 基本命令
– ./bin/hadoop fs –ls / //列出集群/下的所有文件
– 对应 shell 命令 ls /
– ./bin/hadoop fs –mkdir /abc //创建/abc文件夹
– 对应 shell 命令 mkdir /abc
– ./bin/hadoop fs –rmdir /abc //删除/abc文件夹
– 对应 shell 命令 rmdir /abc
– ./bin/hadoop fs –touchz /urfile //新建/urfile文件
– 对应 shell 命令 touch /urfile
– ./bin/hadoop fs –cat /urfile //查看/urfile文件
– 对应 shell 命令 cat /urfile
– ./bin/hadoop fs –rm /urfile //删除/urfile文件
– 对应 shell 命令 rm /urfile
– 上传文件
– ./bin/hadoop fs –put localfile /remotefile
– 下载文件
– ./bin/hadoop fs –get /remotefile
2.2 hadoop词频统计
2.2.1 需求
统计多个文件出现次数最多的单词
2.2.2 实现思路
1. 在集群文件系统里创建文件夹
2. 上传要分析的文件到目录中
3. 分析上传文件
4. 展示结果
1. 创建文件夹
hadoop ] # ./bin/hadoop fs -mkdir /input
2. 上传要分析的文件
adoop ] # ./bin/hadoop fs -put *.txt /input
3. 提交分析作业
adoop ] # ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output
4. 查看结果
adoop ] # ./bin/hadoop fs –cat output/*
三、节点管理
3.1 hdfs节点管理
3.1.1 增加节点
1、启动一个新的系统,禁用 selinux、禁用 firewalld
~]# sestatus
~]# rpm -qa | grep firewalld
2、设置 ssh 免密码登录 【nn01能实现免密登录】
[root@nn01 bin]# ssh-copy-id 192.168.5.14
3、在所有节点增加新新节点的主机信息 /etc/hosts
]# vim /etc/hosts
……
192.168.5.14 node4
4、安装 java openjdk 运行环境
~ ] # yum -y install java-1.8.0-openjdk-devel
5、修改namenode的slaves文件增加该节点
nn01 ~]# vim slaves
node1
….
node4
6、拷贝namnode的 /usr/local/hadoop 到本机
nn01 ~]# scp -r /usr/local/hadoop/ node4:/usr/local/
7、同步配置到所有主机
nn01 ~]# vim rsyncConfig.sh
-
#!/bin/bash
-
function
syncfile(){
-
for host
in
$@</span>;<span class="hljs-keyword">do</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> rsync -az --delete /usr/<span class="hljs-built_in">local</span>/hadoop/etc <span class="hljs-variable">${host}:/usr/
local/hadoop/ &
-
rsync /etc/hosts
${host}</span>:/etc/hosts</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">done</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">wait</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">if</span> (( <span class="hljs-variable">$# > 0 ));
then
-
syncfile
$@</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">else</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">${0} host1 host2 host3 … … host(N)”
-
fi
nn01 ~]# ./rsyncConfig.sh node{1..3} nn02
8、在该节点启动Datanode
node4 ~]#./sbin/hadoop-daemon.sh start datanode
9、设置同步带宽,并同步数据
node4 ~]# ./bin/hdfs dfsadmin -setBalancerBandwidth 67108864 //设置67*8=530M带宽
node4 ~]# ./sbin/start-balancer.sh
10、查看集群状态
node4 ~]# ./bin/hdfs dfsadmin -report
3.1.2 修复节点
HDFS 修复节点
1. 修复节点比较简单,与增加节点基本一致
2. 需要注意新节点的 ip 与 主机名 要与损坏节点一致
3. 启动服务
./sbin/hadoop-daemon.sh start datanode
– 数据恢复是自动的
– 我们上线以后会自动恢复数据,如果数据量非常巨大,可能需要一定的时间
3.1.3 删除节点
HDFS 删除节点
1. 配置NameNode的 hdfs-site.xml
2. 增加 dfs.hosts.exclude 配置
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value>
</property
3. 增加 exclude 配置文件,写入要删除的节点 主机名
4. 更新数据
./bin/hdfs dfsadmin -refreshNodes
5. 查看状态 ./bin/hdfs dfsadmin -report
Normal 正常状态
Decommissioned in Program 数据正在迁移
Decommissioned 数据迁移完成
注意:只有当状态变成 Decommissioned 才能 down机下线
3.2 yarn节点管理
Yarn 的相关操作
– 由于在 2.x hadoop 引入了 yarn 框架,对于计算节点的操作已经变得非常简单
1.增加节点
hadoop ] # sbin/yarn-daemon.sh start nodemanager
2. 删除节点
hadoop ] # sbin/yarn-daemon.sh stop nodemanager
3. 查看节点 (Resourcemanager)
hadoop ] # ./bin/yarn node -list
注意:由于 yarn 不包含数据,所以在增加删除修复节点的时候比较简单,hdfs 要注意数据安全。
四、NFS网关
作用:不需要通过hdfs提供的命令 (./bin/hadoop fs –ls / )访问集群,NFS网关可以把HDFS文件系统挂载到本地,对挂载点的操作就是对HDFS文件系统的操作
4.1 配置 NFS 网关
4.1.1 HDFS配置
1 配置 /etc/hosts (NFSGW)
192.168.1.10 nn01
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3
192.168.1.15 nfsgw
2 添加用户(nfsgw, nn01)
groupadd -g 500 lijun
useradd -u 500 -g 500 lijun
3. NN01 停止集群
./sbin/stop-all.sh4. NN01 增加配置 core-site.xml
-
<property>
-
<name>hadoop.proxyuser.nsd1804.groups
</name> //groups 为挂载点用户所使用的组
-
<value>*
</value>
-
</property>
-
<property>
-
<name>hadoop.proxyuser.nsd1804.hosts
</name> //hosts 为挂载点主机地址
-
<value>*
</value>
-
</property>
5. NN01 同步配置到 node1 node2 node3
~ ] # ./rsyncConfig.sh node{1..3}
6. NN01 启动集群
~ ] #./sbin/start-dfs.sh
7. NN01查看状态
./bin/hdfs dfsadmin -report
4.1.2 NFSGW配置
1. NFSGW: 安装 java-1.8.0-openjdk-devel
~ ] # yum -y install java-1.8.0-openjdk-devel
2. NFSGW: 同步 nn01 的 /usr/local/hadoop 到NFSGW的相同目录下
nn01 ~ ] # scp nn01:/usr/local/hadoop nfsgw:/usr/local
3. NFSGW: 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>
4. NFSGW: 创建转储目录,并给用户 lijun 赋权
mkdir /var/nfstmp
chown lijun:lijun /var/nfstmp
5. NFSGW: 给 /usr/local/hadoop/logs 赋权
setfacl -m u:lijun:rwx
6. NFSGW: 创建数据根目录 /var/hadoop
mkdir /var/hadoop
7. NFSGW: 必须用 root 启动,必须先启动 !!!
./sbin/hadoop-daemon.sh –script ./bin/hdfs start portmap
8. NFSGW: 必须用代理用户lijun启动,必须后启动 !!!
~ ] # su - lijun
~ ] # ./sbin/hadoop-daemon.sh –script ./bin/hdfs start nfs3
4.1.3 客户端验证
1.Client: 安装 nfs-utils
~] # yum -y install nfs-utils
2. mount 挂载NFS共享目录
~] # mount -t nfs -o vers=3,proto=tcp,nolock,noatime,sync,noacl 192.168.1.15:/ /mnt/
3.查看注册服务
rpcinfo -p 192.168.1.15
4.查看共享目录
showmount -e 192.168.1.15