背景介绍
最近研究大数据,hadoop属于大数据中很基础的组件,如果需要深入了解,还是得先知道怎么安装部署,方便后续查阅。本操作步骤详细记录hadoop分布式集群环境的搭建过程。
实验环境
- 实验环境:Win7下vmware虚拟机
- 操作系统:CentOS 6.5 x64
- JDK:jdk-8u161-linux-x64
- Hadoop:hadoop-2.7.5
系统规划
准备3个节点,一个master节点,两个slave节点。
Master节点服务角色:namenode、SecondNameNode、ResourceManager
Slave节点服务角色:datanode、NodeManager
- 192.168.86.143;master.itclj.hadoop;1核:2G
- 192.168.86.144;slave1.itclj.hadoop;1核;1G
- 192.168.86.145;slave2.itclj.hadoop;1核;1G
准备工作:系统环境搭建
以下操作均用root用户操作。
预装系统工具软件vim、lrzsz(所有节点)
yum install vim
yum install lrzsz
1.网络配置(所有节点)
a)修改hostname
vim /etc/sysconfig/network
重启操作系统生效
reboot
b)配置hosts
vim /etc/hosts
添加ip和主机名映射
192.168.86.143 master.itclj.hadoop
192.168.86.144 slave1.itclj.hadoop
192.168.86.145 slave2.itclj.hadoop
2. 关闭防火墙和SELinux(所有节点)
注意: 需要在所有的节点上执行,因为涉及到的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
关闭防火墙:
service iptables stop (临时关闭)
chkconfig iptables off (重启后生效)
关闭SELINUX:
setenforce 0 (临时生效)
修改 /etc/selinux/config 下的 SELINUX=disabled (重启后永久生效)
3. 安装JDK(所有节点)
一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后安装SUN的JDK。
由于我的CentOS安装的是mini版本的,没有自带jdk所以可以直接安装。
从Oracle官网下载JDK安装包:http://download.oracle.com/otn-pub/java/jdk/8u161- b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz?AuthParam=1517808422_bdd9ddc0a30c84fe1961a9a2f6f1eb63
我下载的是JDK8的最新版本:jdk-8u161-linux-x64.tar.gz
下面是JDK的配置步骤。
在/usr目录下建立目录/java,
mkdir /usr/java
把JDK安装包上传到/usr/java目录,解压JDK安装包,
tar -zxvf jdk-8u161-linux-x64.tar.gz
配置环境变量
vim /etc/profile
/etc/profile中添加下面配置项
JAVA_HOME=/usr/java/jdk1.8.0_161
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
刷新环境变量使配置立即生效
source /etc/profile
检查JDK是否配置成功
java -version
4. SSH免密登录(所有节点)
切换到hadoop用户并进入该账户根目录。
su Hadoop
cd ~
在主节点上执行ssh-keygen -t rsa一路回车,生成无密码的密钥对。
将公钥添加到认证文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,并设置authorized_keys的访问权限:chmod 600 ~/.ssh/authorized_keys。
在两个slave节点上执行ssh-keygen -t rsa一路回车,生成无密码的密钥对,并生成.ssh目录,用于认证文件authorized_keys的同步。
scp文件到所有slave节点:
scp ~/.ssh/authorized_keys hadoop@slave1.itclj.hadoop:~/.ssh/
scp ~/.ssh/authorized_keys hadoop@slave2.itclj.hadoop:~/.ssh/
Hadoop配置
1. Hadoop目录准备(所有节点)
mkdir /home/hadoop/data
mkdir /home/hadoop/data/namenode
mkdir /home/hadoop/data/datanode
mkdir /home/hadoop/data/tmp
mkdir /home/hadoop/logs
mkdir /home/hadoop/app
- /home/hadoop/data/namenode:用于存储hadoop的namenode角色数据信息。
- /home/hadoop/data/datanode:用于存储hadoop的datanode角色数据信息。
- /home/hadoop/data/tmp:用于存储hadoop的临时数据。
- /home/hadoop/logs:用于存储hadoop的日志记录。
- /home/hadoop/app:用于存储hadoop程序包。
2. Hadoop程序配置(主节点)
2.1 把程序包上传到/home/hadoop/app并解压。
rz //上传程序包
tar -zxvf hadoop-2.7.5.tar.gz
2.2配置hadoop的JDK
使用hadoop前需要在hadoop-env.sh、yarn-env.sh配置JAVA_HOME。
hadoop-env.sh中配置JAVA_HOME
这个文件里面原来配置得有JAVA_HOME,需要把${JAVA_HOME}换为jdk安装的绝对路径。
export JAVA_HOME=/usr/java/jdk1.8.0_161
yarn-env.sh中添加配置JAVA_HOME环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_161
2.3配置hadoop环境变量
此节用root用户操作
vim /etc/profile
/etc/profile中添加下面配置项
HADOOP_HOME=/home/hadoop/app/hadoop-2.7.5
PATH=$PATH:$HADOOP_HOME/bin
刷新环境变量使配置立即生效
source /etc/profile
2.4 修改配置
此节在hadoop账号下操作
配置在/home/hadoop/app/hadoop-2.7.5/etc/hadoop目录
需要修改的配置文件:
- core-site.xml
- hdfs-site.xml
- slaves
- mapred-site.xml
- yarn-site.xml
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master.itclj.hadoop:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/data/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master.itclj.hadoop:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
Slaves
删除slaves配置中原来的localhost配置项,因为master节点我们不作为datanode节点,然后添加下面2个datanode节点。
slave1.itclj.hadoop
slave2.itclj.hadoop
mapred-site.xml
该配置默认文件名为mapred-site.xml.template,需要对该文件进行重命名。
mv mapred-site.xml.template mapred-site.xml
添加如下配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master.itclj.hadoop:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master.itclj.hadoop:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master.itclj.hadoop</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
把master配置好的hadoop同步到2个slave节点。
scp -r /home/hadoop/app/hadoop-2.7.5 hadoop@slave1.itclj.hadoop:/home/hadoop/app
scp -r /home/hadoop/app/hadoop-2.7.5 hadoop@slave2.itclj.hadoop:/home/hadoop/app
初始化namenode
hdfs namenode -format
在master节点运行start-all.sh启动hadoop集群。
Master 节点jps查看
Slave节点jps查看
在浏览器中输入如下地址,便可查看hadoop的运行状态。
http://192.168.86.143:8088/
http://192.168.86.143:50070/
stop-all.sh停止集群