1. 引言
在前面的博客中,我曾经介绍了Hadoop
的伪分布配置,但是在实际工作中最常见的是集群部署,在本篇博客中就主要介绍一下Hadoop2.6.1
的集群部署(未配置HA
),在本篇博客中使用五台新安装的机器,从零部署。博主使用的环境为:
- 操作系统为:
Centos6.7
jdk
的版本为:1.7
jdk
的安装路径为:/usr/local/jdk
hadoop
的版本为:2.6.1
hadoop
的安装路径为:/usr/local/hadoop
- 使用
root
用户进行集群搭建
接下来我将按照下表进行搭建Hadoop
集群:
HOST 名称 | ip 地址 | 运行的进程 |
---|---|---|
hadoop1 | 192.168.159.130 | NameNode,ResourceManger |
hadoop2 | 192.168.159.131 | DataNode,NodeManger,SecondaryNameNode |
hadoop3 | 192.168.159.132 | DataNode,NodeManger |
hadoop4 | 192.168.159.133 | DataNode,NodeManger |
hadoop5 | 192.168.159.134 | DataNode,NodeManger |
2. 搭建Hadoop2.6.1 集群
2.1 修改hostname
- 在
hadoop1
机器上修改hostname
//编辑文件
vim /etc/sysconfig/network
//修改主机名是hadoop1,(注意hostname的大小写)
hostname hadoop1
//命令行下修改hostname
hostname hadoop1
- 同理在
hadoop2,hadoop3,hadoop4,hadoop5
执行相同的命令,如下图所示
2.2 建立hostname和ip的映射关系
为了部署集群方便,因此我们建立了ip
和主机名称的映射,过程如下:
- 修改
/etc/hosts
文件
//编辑hosts文件
vim /etc/hosts
//建立ip和host的映射关系
192.168.159.130 hadoop1
192.168.159.131 hadoop2
192.168.159.132 hadoop3
192.168.159.133 hadoop4
192.168.159.134 hadoop5
- 同理在
hadoop2,hadoop3,hadoop4,hadoop5
也要建立ip和host的映射关系,过程和hadoop1
完全相同。
2.3 关闭防火墙
在hadoop
集群中会经常发生 机器和机器之间的交互,为了避免因为防火墙产生的意外故障,因此我们需要将防火墙关闭,过程如下:
//关闭防火墙
service iptables stop
//查看防火墙状态
service iptables status
//关闭防火墙的自动运行
chkconfig iptables off
2.4 SSH
免密码登陆
ssh
免密码登陆,需要设置namenode
到datanode
的免密码登陆即可。过程如下:
- 在
Hadoop1
创建公钥和私钥
//创建密钥,一直点确定到结束
ssh-keygen -t rsa
- hadoop1到其他节点的免密码登陆设置
//将hadoop1的公钥复制到其他节点。
ssh-copy-id -i hadoop1
ssh-copy-id -i hadoop2
ssh-copy-id -i hadoop3
ssh-copy-id -i hadoop4
ssh-copy-id -i hadoop5
- 验证免密码登陆是否成功
//输入命令看是否可以登录到hadoop2,如果登陆到hadoop2即配置成功
ssh hadoop2
2.5 安装JDK
- 解压
jdk
,并修改名称
//将jdk解压到/usr/local
tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local/
//进入到/usr/local
cd /usr/local
//修改文件夹的名称
mv jdk1.7.0_45 jdk
- 修改环境变量
//修改配置文件
vim /etc/profile
//需要添加的内容
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 将
hadoop1
的jdk
复制到其他节点
//将jdk复制到hadoop2,hadoop3,hadoop4,hadoop5
scp -r /usr/local/jdk hadoop2:/usr/local/
scp -r /usr/local/jdk hadoop3:/usr/local/
scp -r /usr/local/jdk hadoop4:/usr/local/
scp -r /usr/local/jdk hadoop5:/usr/local/
//将环境变量复制到hadoop2,hadoop3,hadoop4,hadoop5
scp /etc/profile hadoop2:/etc/profile
scp /etc/profile hadoop3:/etc/profile
scp /etc/profile hadoop4:/etc/profile
scp /etc/profile hadoop5:/etc/profile
- 重新加载各个节点的环境变量
//分别在hadoop1,hadoop2,hadoop3,hadoop4,hadoop5执行下面命令(在五台机器上都执行)
source /etc/profile
- 分别在五台机器上验证Java是否安装成功
//判断Java版本
java -version
2.6 hadoop2.6.1
的集群部署
- 将hadoop解压并且改名
//解压hadoop
tar -zxvf hadoop-2.6.1.tar.gz -C /usr/local/
//进入/usr/local目录
cd /usr/local
//将hadoop-2.6.1改名为hadoop
mv hadoop-2.6.1 hadoop
- 修改配置文件
hadoop-env.sh
//修改hadoop-env.sh配置文件
vim etc/hadoop/hadoop-env.sh
//修改jdk的环境变量
export JAVA_HOME=/usr/local/jdk
- 修改配置文件
core-site.xml
<!--
fs.defaultFS
代表hadoop的主节点rpc地址
value:代表hadoop1是主节点,一般设为hdfs://hadoop1:9000
hadoop.tmp.dir
代表hadoop的数据目录
value:这个值最好和自己hadoop的安装目录对应,此处为/usr/local/hadoop/tmp
-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
- 修改配置文件
hdfs-site.xml
<!--
dfs.namenode.http-address
代表hadoop的http地址
value:hadoop的web访问页面,端口一般设置为50070
dfs.namenode.secondary.http-address
代表secondaryName的访问界面
value:此处我们将secondaryName部署在hadoop2上面
dfs.namenode.name.dir
代表namenode的数据存放目录
value:这个值最好和自己hadoop的安装目录对应,此处为/usr/local/hadoop/name
dfs.replication
代表数据副本的个数
value:副本的个数不要多余datanode的个数,此处我设为3
dfs.datanode.data.dir
代表datanode的数据存放目录
value:这个值最好和自己hadoop的安装目录对应,此处为/usr/local/hadoop/data
-->
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/name</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
</configuration>
- 修改配置文件
mapred-site.xml
//首先修改模板文件为配置文件
mv mapred-site.xml.template mapred-site.xml
<!-- 通知框架MR使用YARN -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 修改配置文件
yarn-site.xml
<!--
yarn.resourcemanager.hostname
代表ResourceManger的安装地址
value:我们将ResourceManger部署到hadoop1上面
yarn.nodemanager.aux-services
reducer取数据的方式
value:方式是mapreduce_shuffle
-->
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
- 修改master文件(用于设置secondaryName的部署位置)
//编辑master文件
vim masters
//文件内容为,将secondaryName部署在hadoop2
hadoop2
- 设置从节点的位置
//编辑slaves文件
vim slaves
//slaves的内容为:
hadoop2
hadoop3
hadoop4
hadoop5
- 创建hadoop所需要的文件路径
mkdir tmp
mkdir data
mkdir name
- 将hadoop分发到hadoop2,hadoop3,hadoop4,hadoop5
scp -r /usr/local/hadoop hadoop2:/usr/local
scp -r /usr/local/hadoop hadoop3:/usr/local
scp -r /usr/local/hadoop hadoop4:/usr/local
scp -r /usr/local/hadoop hadoop5:/usr/local
- 格式化hadoop集群
//格式化namenode
./bin/hdfs namenode -format
//格式化hdfs
./sbin/start-dfs.sh
//格式化yarn
./sbin/start-yarn.sh
2.7 验证hadoop是否安装成功
- 使用命令验证
//查看java进程
jps
- 从web界面查看(http://hadoop1:50070)