集群规划
主机名 | Hadoop10 | Hadoop11 | Hadoop12 |
---|---|---|---|
网络 | 192.168.10.10 | 192.168.10.11 | 192.168.10.12 |
用户 | hadoop root |
hadoop root |
hadoop root |
HDFS | NameNode DateNode |
DateNode | Secondary NameNode DataNode |
YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
1.CentOS 7虚拟机操作系统
安装虚拟机系统,省略
2.系统的基本配置
1)网络配置
第一步:网卡配置
使用 vi
编辑器编辑系统的网卡配置文件,配置以下项目
- 网卡的开机自启
- 使用静态IP
- 网关和DNS
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改内容如下:
ONBOOT="yes"
BOOTPROTO="static"
添加以下内容:
IPADDR=192.168.10.10
GATEWAY=192.168.10.2
DNS1=192.168.10.2
我们目前操作的机器是hadoop10,为其配置的IP地址是
192.168.10.10
,这需要和VMware软件的网卡配置保存IP域一样
Hosts
主机映射文件配置
根据我们的集群规划,我们得知有3台主机,所以我们也知道3台主机的IP,那么可以事先将映射文件配置好
vi /etc/hosts
添加写入以下内容
192.168.10.10 hadoop10
192.168.10.11 hadoop11
192.168.10.12 hadoop12
重启网卡使配置生效
systemctl restart network
重启完之后可以检查
ip addr
观察对应的网卡IP是否正常
配置完网卡之后,就可以使用xshell等ssh工具进行连接操作,之后的操作全部都是远程完成
Windows对虚拟机SSH远程连接需要注意
首先网卡配置完成后就可以SSH连接了,使用IP地址即可,但是为保证连接的方便,一般我们在Windows中也是使用一个主机名来连接服务器,但是Windows并不认识我们的主机,所以同样需要配置Windows的hosts
映射文件
修改文件C:WindowsSystem32driversetc
打开hosts
文件,追加以下内容
192.168.10.10 hadoop10
192.168.10.11 hadoop11
192.168.10.12 hadoop12
VMware网卡配置
我们使用的是nat模式网卡,需要保证该网卡如下图所示
2)用户配置
新建用户
目前我们只有root用户,必须知道的原则是:root用户是一个非常敏感的用户,在对服务器进行操作的时候,非迫不得已,不得使用root用户
根据集群规划,创建新的用户,用户名为:hadoop
useradd hadoop
为其设置密码
passwd hadoop
输入需要的密码,两次,可以忽略警告
为新用户赋予sudo
加权
为hadoop
用户配置sudo
执行权限,方便使用
vi /etc/sudoers
修改/etc/sudoers文件,在%wheel
这行下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD:ALL
追加的是这一行:
hadoop ALL=(ALL) NOPASSWD:ALL
注意:hadoop这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了hadoop具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码.所以hadoop要放到%wheel这行下面.
按ESC键,shift+:键,输入wq!强制保存
SSH连接须知
我们一开始使用的是root用户操作,在此之后,我们连接将只使用hadoop用户
关闭防火墙
注意:这只是为了我们学习方便,在实际的工作中绝对不可以,只能在防火墙配置需要放行的端口,而不能自接关闭防火墙
1).关闭防火墙的开机自启(为了以后不用做这一步)
sudo systemctl disable firewalld
2).关闭当前防火墙
sudo systemctl stop firewalld.service
3.配置JDK
1).准备两个文件夹
sudo mkdir /opt/software
sudo mkdir /opt/module
software
文件夹用作我们资料的上传module
我们一些软件将安装在此目录
/opt
目录只有root用户可以操作,所以我们上面创建文件夹使用了sudo
加权
2).将文件夹的所有者赋予hadoop
用户
sudo chown hadoop -R 777 /opt/software
sudo chown hadoop -R 777 /opt/module
3).上传JDK安装文件至/opt/module
目录
4).解压JDK至/opt/module
目录
tar -zxvf /opt/software/jdk-8u181-linux-x64.tar.gz -C /opt/module/
5).检查是否解压成功
注意,默认此时我们的jdk路径是:
/opt/module/jdk1.5.0_181
,这在配置环境变量是需要用到
6).配置jdk的环境变量
新建我们自己的环境变量文件
sudo vi /etc/profile.d/my_env.sh
写入以下内容
export JAVA_HOME=/opt/module/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
刷新环境变量
source /etc/profile
7).检查
[hadoop@hadoop101 opt]$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
你可以将环境变量文件所有权赋予
hadoop
用户,这样的话以后更方便:
sudo chown hadoop -R /etc/profile.d/my_env.sh
4.安装配置Hadoop
1).解压hadoop压缩包至/opt/module
tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module
2).配置Hadoop环境变量
编辑my_env.sh
文件,追加写入以下内容:
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:HADOOP_HOME/bin
export PATH=$PATH:HADOOP_HOME/sbin
3).刷新环境变量
4).检查
5.配置Hadoop分布式集群
Hadoop的配置文件分为两类
默认配置文件
自定义配置文件
默认的配置文件一般情况下是不能动的,里面存在几千行的配置,绝大多数的配置是默认即可的
一般情况下,用户对hadoop的配置修改都是对自定义配置文件进行操作,自定义配置文件的优先级更高,也就是说,自定义配置会覆盖默认配置
所以,默认的配置文件是兜底,你只需要在自定义配置文件中覆盖你需要修改的部分
自定义配置文件的作用就是覆盖默认配置文件的配置项
自定义配置文件在hadoop的安装目录下的./etc/hadoop
中:
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
这4个配置文件按照名称就告知了里面应该写何种配置,根据默认配置文件的理解,这4个自定义配置文件是空的
4个自定义配置文件一般情况下我们按照配置文件的文件名对里面需要修改的配置项分类,但是!这4个配置文件没有区别,也就是说,你把所有的配置内容写在其中一个配置文件中同样可以
配置集群
目前我们只有一台主机hadoop10
,其他的两台还没有,但是这并不影响我们操作,我们就配置这一台,然后克隆出另外两台因为对于Hadoop的配置来说,集群所有的机器都是一致的
1).core-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop10:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>jose</value>
</property>
</configuration>
2).hdfs-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop10:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop12:9868</value>
</property>
<property>
<!-- namenode 数据存放地址-->
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-3.1.3/name</value>
</property>
<!-- datanode 数据存放地址-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
</configuration>
3).yarn-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop11</value>
</property>
<!-- 环境变量的继承添加Maperd环境变量的继承(因为node节点上执行任务会创建容器,所以继承宿主机的环境变量配置) -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!--运行所需要的服务,如果运行jar包没有报连接失败可以不用加-->
<property>
<name>yarn.application.classpath</name>
<value>/opt/module/hadoop/etc/hadoop:/opt/module/hadoop/share/hadoop/common/lib/*:/opt/module/hadoop/share/hadoop/common/*:/opt/module/hadoop/share/hadoop/hdfs:/opt/module/hadoop/share/hadoop/hdfs/lib/*:/opt/module/hadoop/share/hadoop/hdfs/*:/opt/module/hadoop/share/hadoop/mapreduce/lib/*:/opt/module/hadoop/share/hadoop/mapreduce/*:/opt/module/hadoop/share/hadoop/yarn:/opt/module/hadoop/share/hadoop/yarn/lib/*:/opt/module/hadoop/share/hadoop/yarn/*</value>
</property>
<!-- Site specific YARN configuration properties -->
</configuration>
4).mapred-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5).#### works
配置文件
存在路径同样是在./etc/hadoop
中,该配置文件描述了集群要哪些机器
打开此文件
该文件内容如下:
hadoop10
hadoop11
hadoop12
该文件不允许存在任何空格和空行
6).配置Hadoop用户
环境变量
编辑my_env.sh
文件,追加写入以下内容:
# USER_PRO
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
刷新环境变量
检查
6.后续集群的文件分发准备
因为在之后的集群中,多台机器经常需要保证某些文件的内容一致,那么就需要我们有一个文件同步的方案,在这里我们选择rsync
做文件同步,相比scp
更为高效
rsync
是一个第三方软件,需要安装,我们选择yum
来安装软件
配置yum
配置yum的镜像为清华源
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g'
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g'
-i.bak
/etc/yum.repos.d/CentOS-*.repo
生成新的缓存
yum makecache
安装rsync
安装命令:
sudo yum install rsync -y
如果你已经克隆了机器,那么所有机器都得做
创建分发脚本
rsync
可以做到机器
1).在/home/hadoop/目录下创建bin
目录
mkdir /home/hadoop/bin
2).在该目录下创建脚本文件:
touch /home/hadoop/bin/xsync
3).在该文件中写入以下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo Error:无效参数
exit;
fi
for host in hadoop10 hadoop11 hadoop12
do
echo ===========正在传输:$host=============
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file);pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo Error:$file 不存在!
fi
done
done
4).为该脚本文件赋予可执行的权限:
chmod +x /home/hadoop/bin/xsync
如果脚本文件是你在Windows中编辑的,那么会存在一个问题,Windows的换行是
rn
,而Linux没有r
换行的概念,那么该脚本运行时可能报错,使用以下命令解决
sed 's/r//' -i /home/hadoop/bin/xsync
7.克隆集群机器
我们目前只有一台hadoop10
机器,而且配置都完成了,那么我们需要以此为母版克隆出hadoop11
和hadoop12
1).克隆主机
2).修改克隆出来的机器的ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改内容如下:
hadoop11:
将ifcfg-ens33文件内容IPADDR=192.168.10.10
修改为:
IPADDR=192.168.10.11
hadoop12:
将ifcfg-ens33文件内容IPADDR=192.168.10.10
修改为:
IPADDR=192.168.10.12
3).修改克隆出来的机器的主机名
vi /etc/hostname
修改内容如下:
hadoop11:
将hostname文件内容修改为:
hadoop11
hadoop12:
将hostname文件内容修改为:
hadoop12
因为克隆可能带来Mac地址的冲突而导致没有ip的情况
以下两种方式解决问题:
1.重新生成Mac地址
2.通过关闭网络管理来实现
1).关闭
systemctl stop Network
systemctl disable NetworkManager
2).更新网络配置
service network restart
8.集群系统的免密登录
以hadoop10
机器为例:
1).生成密钥
ssh-keygen -t rsa
直接多次回车即可
2).分发密钥(签发)
ssh-copy-id hadoop10
ssh-copy-id hadoop11
ssh-copy-id hadoop12
包括自己本身也要签发
签发时需要对方的密码和用户名,其实完整的命令是
ssh-copy-id hadoop@hadoop102
因为你签发的时候使用的是
hadoop
用户名,而我们的三台机器都有相同的hadoop用户,使用用户名在上面的笔记中就省略了
以上操作三台机器都要操作
9.hadoop集群初始化
在hadoop101
执行
hdfs namenode -format
如果初始化失败,或者在后续中jps启动失败了,那么如何初始化
1).检查xml
配置
2).删除所有生成文件
rm -rf /tmp/* /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs
该命令必须在所有机器上执行一遍
3).重新初始化
启动hdfs命令(hadoop10)
start-dfs.sh
启动yarn命令(hadoop12)
start-yarn.sh
4).查看进程
jps
hadoop10进程如下:
71600 Jps
71549 NodeManager
70863 DataNode
70782 NameNode
hadoop11进程如下:
71600 Jps
71195 ResourceManager
71549 NodeManager
70863 DataNode
hadoop12进程如下:
71600 Jps
71019 SecondaryNameNode
71549 NodeManager
70863 DataNode
5).访问管理页面
Web端查看HDFS的NameNode
在浏览器输入:
http://第一台主机名或IP:9870
如:http://hadoop10:9870
Web端查看YARN的ResourceManager
在浏览器输入:
http://第二台主机名或IP:8088
如:http://hadoop11:8088
10.MapReduce
单词计数
先将所要计算的文件上传到 Hadoop
中
hadoop dfs -put /my.txt
计算单词
hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /opt/my.txt /out
查看文件
hdfs dfs -cat /out/part-r-00000
如果出现org.apache.hadoop.dfs.SafeModeException: Cannot delete/user/hadoop/input. Name node is in safe mode.
则是hadoop开启了安全模式,需要关闭,用以下语句(退出安全模式):
hadoop dfsadmin -safemode leave
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!