Hadoop2.x版本多节点集群安装及测试
作者:Fushicho 日期:2018-12-11
目录
第一步:创建 HDFS 目录,以便执行 MapReduce 任务
第四步:运行 Hadoop 自带的 WordCount 例子
环境说明:
Hadoop的安装为分布式模式,集群为3个节点:
IP | user | hostname | hadoop角色 |
192.168.49.121 | root | Master | NameNode/SecondaryNameNode/ResourceManager |
192.168.49.122 | root | Slave_1 | DataNode/NodeManager |
192.168.49.123 | root | Slave_2 | DataNode/NodeManager |
运行环境准备
下载免费的VMware并安装好;
下载免费的ubuntu-18.04.1-desktop-amd64.iso镜像并在VMware中安装好;
下载免费的Xshell软件--------连接虚拟机(方便复制粘贴);
下载免费的FileZile软件-------连接虚拟机(方便传文件到虚拟机);
配置ubuntu系统
第一步:在VMware上安装ubuntu操作系统;
这是ubuntu-18.04.1-desktop-amd64.iso镜像,也可以自己下载新版本;
这里提供我的百度云连接
提取码:s2zw
第二步:安装 OpenSSH Server
[user@localhost ~]# sudo apt-get install openssh-server
第三步:查询ssh是否启动
[user@localhost ~]# ps -e | grep ssh
(看到sshd说明ssh-server已经启动了,可以使用Xshell和FileZile连接了,默认端口号是22)
第四步:修改vim版本
(1)删除ubuntu默认安装的vim tiny版本
[user@localhost ~]# sudo apt-get remove vim-common
(2)安装vim full版本(方便操作)
[user@localhost ~]# sudo apt-get install vim
第五步:为root添加用户密码
[user@localhost ~]# sudo passwd root
(先输入user用户密码,再输入root用户密码)
第六步:将操作者身份改为root
[user@localhost ~]# su
(输入刚刚设置的密码即可)
第七步:配置root支持ssh
编辑sshd_config文件
[root@localhost ~]# vi /etc/ssh/sshd_config
添加一行代码PermitRootLogin yes 且取消2个注释代码使其生效,修改为如下:
第八步:重启ssh服务
[root@localhost ~]# /etc/init.d/ssh restart
第九步:修改主机名
[root@localhost ~]# vi /etc/hostname
修改主机名为: Master
(重启虚拟机即可生效,即输入reboot)
第十步:Ubuntu配置hosts文件
(ubuntu系统和windows系统的hosts文件都需要)
[root@ Master ~]# vi /etc/hosts
配置虚拟机hosts文件,添加三行:
192.168.49.121 Master
192.168.49.122 Slave_1
192.168.49.123 Slave_2
第十一步:Windows配置hosts
位置: C:\Windows\System32\drivers\etc\hosts
同样添加上面三行数据:
192.168.49.121 Master
192.168.49.122 Slave_1
192.168.49.123 Slave_2
(若是无法保存文件,请先将文件权限进行修改为可写,系统文件默认只可读~)
第十二步:关闭防火墙
[root@ Master ~]# sudo apt-get install ufw
[root@ Master ~]# sudo ufw disable
配置JAVA环境
第一步:下载JAVA包
这个是官方网站,你可以下载到最新版本:
https://www.oracle.com/technetwork/pt/java/javase/downloads/jdk8-downloads-2133151.html
第二步:将文件上传到虚拟机
使用FileZile软件将jdk.tar.gz上传到虚拟机中;
第三步:开始配置JAVA环境:
(1)解压文件
[root@ Master ~]# tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr
(2)将JAVA添加到环境变量中
[root@ Master ~]# vi /etc/profile
在文件最后加入:
export JAVA_HOME=/usr/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin
(4)快速生效环境变量
[root@ Master ~]# source /etc/profile
(5)查看配置是否成功
[root@ Master ~]# java -version
若是成功则可以看到:
配置hadoop环境
第一步:下载hadoop
这里提供我的百度云链接的hadoop-2.7.3版本:
提取码:idee
第二步: 将文件上传到虚拟机
使用FileZile软件将hadoop-2.7.3上传到虚拟机中;
第三步:解压hadoop文件
(1)解压文件到usr中
[root@ Master ~]# tar -zxvf hadoop-2.7.3.tar.gz -C /usr
(2)修改文件名
[root@ Master ~]# mv /usr/hadoop-2.7.3 /usr/hadoop
(3)进入hadoop目录
[root@ Master ~]# cd /usr/hadoop
(4) 将Hadoop添加到环境变量中
[root@ Master ~]# vi /etc/profile
export HADOOP_HOME=/usr/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
第四步: 配置hadoop-env.sh
[root@Master:/usr/hadoop]# vi etc/hadoop/hadoop-env.sh
替换exportJAVA_HOME=${JAVA_HOME}为如下:
export JAVA_HOME=/usr/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin
位置如下:
第五步:配置core-site.xml
[root@Master:/usr/hadoop]# vi etc/hadoop/core-site.xml
修改如下:
<configuration>
<!--配置HDFS 的NameNode-->
<property>
<name>fs.default.name</name>
<value>hdfs://Master:9000</value>
</property>
<!--配置DataNode 保存数据的位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp/hadoop-${user.name}</value>
</property>
</configuration>
第六步:配置mapred-site.xml
(1)修改名称
mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
(2)打开mapred-site.xml
[root@Master:/usr/hadoop]# vi etc/hadoop/mapred-site.xml
修改如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>Master:9001</value>
</property>
</configuration>
第七步:配置hdfs-site.xml
[root@Master:/usr/hadoop]# vi etc/hadoop/hdfs-site.xml
修改如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
第八步:配置Slaves
[root@Master:/usr/hadoop]# vi etc/hadoop/slaves
将原本的localhost删掉,修改为:
Slave_1
Slave_2
克隆虚拟机
(1)关闭虚拟机,点击该虚拟机->管理->克隆->创建完整克隆
(2)这里需要克隆2台作为datanode节点,没命名前简称为hadoop2和hadoop3.
(3)克隆后分别开启主机并用Xshell连接2台主机(使用root身份);
(4)修改hadoop2主机名
vi /etc/hostname
修改主机名为: Slave_1
(重启虚拟机即可生效,即reboot)
(5) 修改hadoop_3主机名
sudo vi /etc/hostname
修改主机名为: Slave_2
(重启虚拟机即可生效,即reboot)
配置台机器间开启免密码SSH登入
为每台主机都配置 SSH 无密登录本机,并把秘钥发给另外2台主机:
(1)生成ssh公钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
(2)将生成的ssh公钥添加到识别文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(3)设置文件权限为600
chmod 0600 ~/.ssh/authorized_keys
(4)打开文件,将里面的内容拷贝到另外2台主机的相应文件中
ssh-copy-id root@Slave_1
(输入yes确认还有密码,之后就能免密码SSH登入Slave_1了,其他同理~)
(5)命令验证SSH 配置,如下:
ssh 主机名
(当三台机都能免密码SSH登入时就完成了配置过程~)
运行Hadoop
注:所有的运行只需要在Master节点即可。系统会自动登录到其他两台去启动相应的节点。
在初次运行Hadoop的时候需要初始化Hadoop文件系统,命令如下:
[root@ Master:/usr/hadoop]# bin/hdfs namenode -format
如果执行成功,你会在日志中(倒数几行)找到如下成功的提示信息:
运行命令如下(需要注意看主机名来确定是哪台机输入指令~):
启动HDFS
(1)输入启动指令
[root@ Master:/usr/hadoop]# sbin/start-dfs.sh
(第一次操作需要输入yes,由于配置了免密码SSH,故不需要输入密码)
(2)分别查看一下三台机的进程情况:
[root@ Master:/usr/hadoop]# jsp
(发现NameNode和SecondaryNameNode启动成功~)
[root@ Slave_1:~]# jsp
(发现DataNode启动成功~)
[root@ Slave_2:~]# jsp
(发现DataNode启动成功~)
启动yarn
(1)输入启动指令
[root@ Master:/usr/hadoop]# sbin/start-yarn.sh
(2)分别查看一下三台机子的进程情况:
[root@ Master:/usr/hadoop]# jps
(发现ResourceManager启动成功了~)
[root@ Slave_1:~]# jps
(发现NodeManager启动成功了~)
[root@ Slave_2:~]# jps
(发现NodeManager启动成功了~)
查看Hadoop资源管理
[root@ Master:/usr/hadoop]# bin/hdfs dfsadmin –report
可以看到资源分配情况:
查看HDFS分布式文件系统的Web
查看All Applications的平台Web
测试Hadoop
第一步:创建 HDFS 目录,以便执行 MapReduce 任务
[root@ Master:/usr/hadoop]# bin/hdfs dfs -mkdir -p /user/root
可以在上面的网站中看到hdfs中成功创建了这个目录文件结果:
第二步:拷贝输入文件到分布式文件系统
[root@ Master:/usr/hadoop]# bin/hdfs dfs -put etc/hadoop input
(这里举例拷贝 etc/hadoop 目录下的文件到 HDFS 中)
第三步:查看拷贝结果
[root@ Master:/usr/hadoop]# bin/hdfs dfs -ls input
也可在刚刚网页中查看结果:
(很明显copy成功了~)
第四步:运行 Hadoop 自带的 WordCount 例子
[root@ Master:/usr/hadoop]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
这里说明一下这句话的含义:
可以见到下图结果就说明成功了:
说明:
[1] 这种模式是在本地运行 MapReduce 任务,如果需要在 YARN 上运行,请看本文后面的
YARN 配置;
[2] 这个例子是计算某个目录下所有文件中包含某个字符串的次数,这里的字符串是匹配'dfs[a-z.]+'成功的次数;
[3] dfs[a-z.]+是正则表达式,表示以dfs开头加上大于等于一个小写英文字母或.的匹配
第五步:将结果从分布式文件系统拷贝到本地
[root@ Master:/usr/hadoop]# bin/hdfs dfs -get output output
[root@ Master:/usr/hadoop]# cat output/*
结果如下:
关闭Hadoop
停止YARN
[root@ Master:/usr/hadoop]# sbin/stop-yarn.sh
关闭主程序
[root@ Master:/usr/hadoop]# sbin/stop-dfs.sh
简单指令启动和关闭Hadoop
由于上面是为了理解每个过程,所以没有一次性的启动和关闭Hadoop,而且实际上早已经配置了环境变量,启动和关闭Hadoop分别为如下指令:
启动: [root@ Master:~]# start-all.sh
关闭: [root@ Master:~]# stop-all.sh
参考文献:
https://blog.csdn.net/weixin_41156591/article/details/85000054