前言
此教程适用于四川信息职业技术学院"Hadoop应用基础教程"一课,环境为CentOS 6.X系统,Namenode节点一台+Datanode节点2台,但是如果您的Hadoop集群需求与文章内的环境差别不大,亦可参考。
环境准备
- 装有 CentOS 6.X 32位系统的虚拟机或服务器 3 台(最好是全新安装的干净系统)
- Internet网络
- SSH连接软件(如Xshell、FinalShell等)
集群机器
一台CentOS主机系统作Master,一台CentOS主机系统做slave01,一台CentOS主机系统做slave02。三台主机机器处于同一局域网下。
这里使用三台主机搭建分布式集群环境,更多台机器同样可以使用如下配置。
首先需要确认用作Master的主机的IP,集群需要在同一个局域网网关下,可以用ifconfig命令查看当前主机IP
ifconfig
即可获得当前主机的IP在局域网的地址,如下图
修改三个主机的主机名,将IP为192.168.1.100的机器主机名改为:master
vim /etc/sysconfig/network
如图:
退出vim后,输入一下代码
hostname master
然后重启机器。slave01、slave02修改方法与上相同
三台机器的名称和IP如下,
主机名称 IP地址
master 192.168.1.100
slave01 192.168.1.101
slave02 192.168.1.102
三台机器可以ping互相的ip来测试三台机器的网络连通性
在master节点主机上的Shell中运行如下命令,测试能否连接到slave01节点主机
ping 192.168.1.101
如果出现下图,说明连接成功
为了更好在shell中区分三台机器,修改其显示的主机名,执行如下命令
vim /etc/hosts
打开vim编辑器后将下列文字保存到文件中
127.0.0.1 localhost
192.168.1.100 master
192.168.1.101 slave01
192.168.1.102 slave02
配置ssh无密码登录本机和访问集群机器
首先需要在三台机器上生成秘钥,在三个机器上都执行下列代码
ssh-keygen -t rsa
随后将其发送到每个机器上,下列三行代码一段一段执行,并且三台机器都要执行:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave2
发送秘钥完毕后,可以测试一下三台机器是否能无密码直接登录:
#slave01或者slave02中执行下列代码
ssh master
#master或者slave02中执行下列代码
ssh salve01
#master或者slave01中执行下列代码
ssh slave02
查看生成的文件
cat ~/.ssh/ authorized_keys id_rsa id_rsa.pub known_hosts
JDK和Hadoop安装配置
- 一键安装脚本(不推荐使用)
wget -q http://file.shujuhe.cn/master.sh && sh master.sh
- 手动安装配置
分别在master主机和slave01、slave02主机上安装JDK和Hadoop,并加入环境变量。
- 安装JDK
分别在master主机和slave01,slave02主机上执行安装JDK的操作
cd /usr/lib/jvm
wget http://file.shujuhe.cn/jdk-8u5-linux-i586.tar.gz
tar -zxf jdk-8u5-linux-i586.tar.gz
编辑环境变量文件/etc/profile
vim /etc/profile
添加如下内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin
接着让环境变量生效,执行如下代码:
source /etc/profile
- 安装Hadoop
先在master主机上做安装Hadoop,暂时不需要在slave01,slave02主机上安装Hadoop.稍后会把master配置好的Hadoop发送给slave01,slave02.
在master主机执行如下操作:
cd /usr/local
wget http://file.shujuhe.cn/hadoop-2.7.2.tar.gz
tar -zxf hadoop-2.7.2.tar.gz
mv ./hadoop-2.7.2/ ./hadoop
编辑环境变量文件/etc/profile
vim /etc/profile
添加如下内容:
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
接着让环境变量生效,执行如下代码:
source /etc/profile
Hadoop集群配置
修改master主机修改Hadoop如下配置文件,这些配置文件都位于/usr/local/hadoop/etc/hadoop目录下。(以下操作需要有vim基础,若vim基础相对薄弱,可以进入图形化界面进行更改。)
修改slaves:
这里把DataNode的主机名写入该文件,每行一个。这里让master节点主机仅作为NameNode使用。
slave01
slave02
修改hadoop-env.sh:
打开hadoop-env.sh文件后,找到${JAVA_HOME}字段,将其替换为jdk的绝对路径
修改core-site.xml:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
修改hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
修改mapred-site.xml(复制mapred-site.xml.template,再修改文件名)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
配置好后,将 master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 master 节点主机上执行(建议一步一步执行):
cd /usr/local/
rm -rf ./hadoop/tmp
rm -rf ./hadoop/logs/*
tar -zcf ~/hadoop.master.tar.gz ./hadoop
cd ~
scp ./hadoop.master.tar.gz slave01:/usr/local/hadoop.master.tar.gz
scp ./hadoop.master.tar.gz slave02:/usr/local/hadoop.master.tar.gz
在slave01,slave02节点上执行:
rm -rf /usr/local/hadoop/
tar -zxf ~/hadoop.master.tar.gz -C /usr/local
启动hadoop集群
在master主机上执行如下命令:
cd /usr/local/hadoop
bin/hdfs namenode -format
sbin/start-all.sh
若在运行过程中出现下图,直接输入mater机器的root密码即可:
运行后,在master,slave01,slave02运行jps命令,查看:
jps
master运行jps后,如下图:
slave01、slave02运行jps,如下图:
检查安装是否完全成功
在master上运行如下代码:
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 5 10
注:命令中,“5”表示map进行5次,“10”表示每次map投掷10次(相当于扔飞镖10次计算出pi的值)
最终计算结果为如下图时,则表明Hadoop已完成安装并能够使用