hadoop 集群搭建
| 环境 | 版本 | 描述/补充 | 下载地址 |
|---|---|---|---|
| CentOS | 7 | - | Download (centos.org) |
| JDK | 8 | openlogic-openjdk-8u382-b05-linux-x64.tar.gz | openlogic.com |
| hadoop | 2.7.7 | hadoop-2.7.7.tar.gz | Apache Projects Releases |
| 工具 | 版本 | 描述/补充 | 下载地址 |
|---|---|---|---|
| Xshell | 7 | - | NetSarang Website (xshell.com) |
| Xftp | 7 | - | NetSarang Website (xshell.com) |
| VMware | 17 | - | VMwareDownload |
目录
TIP
本次使用的网段为192.168.128.1/24
本次搭建节点ip:
master 192.168.128.130
slave1 192.168.128.131
slave2 192.168.128.132
slave3 192.168.128.133
TIP
虚拟机安装配置详见本文最下方
虚拟机安装配置
本次搭建的所有操作均由root用户完成
本次搭建所用到的软件都放于/root家用户目录中
本次搭建所有解压的软件都放于/opt/目录下
本次搭建集群是在四台未安装hadoop的虚拟机上进行,使用scp分发文件
添加IP映射
修改/etc/目录下的hosts文件
vi /etc/hostsvi /etc/hosts添加以下内容
192.168.128.130 master master.centos.com
192.168.128.131 slave1 slave1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com192.168.128.130 master master.centos.com
192.168.128.131 slave1 slave1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com安装Java
因为jdk8的获取需要在Oracle公司注册认证,我们这里使用的是openjdk
请不要安装高于8的版本,可能会有不兼容的情况
进入/root目录解压tar.gz压缩包,并指定解压到的目录/opt下
cd /root
tar -xzvf openlogic-openjdk-8u382-b05-linux-x64.tar.gz -C /opt/cd /root
tar -xzvf openlogic-openjdk-8u382-b05-linux-x64.tar.gz -C /opt/进入/opt目录,创建软链接,这里使用软链接单纯是习惯问题,不创建也不影响,但是在后续操作中需要格外注意名字
cd /opt
ln -s openlogic-openjdk-8u382-b05-linux-x64 jdkcd /opt
ln -s openlogic-openjdk-8u382-b05-linux-x64 jdk修改/etc/profile文件,添加环境变量
vi /etc/profilevi /etc/profile在文件最后方添加如下示例
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATHexport JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH使配置生效
source /etc/profilesource /etc/profile检查是否安装成功,在任意路径执行以下命令
java -versionjava -version若出现如下内容则说明安装成功
INFO
[root@master opt]# java -version
openjdk version "1.8.0_382-382"
OpenJDK Runtime Environment (build 1.8.0_382-382-b05)
OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)
hadoop安装
进入/root目录解压tar.gz压缩包,并指定解压到的目录/opt下
cd /root
tar -xzvf hadoop-2.7.7.tar.gz -C /opt/cd /root
tar -xzvf hadoop-2.7.7.tar.gz -C /opt/进入/opt目录,创建软链接
cd /opt
ln -s hadoop-2.7.7 hadoopcd /opt
ln -s hadoop-2.7.7 hadoop修改/etc/profile文件,添加环境变量
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATHexport HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH使配置生效
source /etc/profilesource /etc/profile检查其是否安装成功
hadoop versionhadoop version若出现如下内容则说明安装成功
INFO
Hadoop 2.7.7
Subversion Unknown -r c1aad84bd27cd79c3d1a7dd58202a8c3ee1ed3ac
Compiled by stevel on 2018-07-18T22:47Z
Compiled with protoc 2.5.0
From source with checksum 792e15d20b12c74bd6f19a1fb886490
This command was run using /opt/hadoop-2.7.7/share/hadoop/common/hadoop-common-2.7.7.jar
hadoop配置
在master节点中进入hadoop配置文件目录
cd /opt/hadoop/etc/hadoopcd /opt/hadoop/etc/hadoopcore-site.xml
修改/opt/hadoop/etc/hadoop目录下的core-site.xml文件
vi core-site.xmlvi core-site.xml修改内容如下,只需要修改<configuration></configuration>标签下的内容,后续不再提示
<?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>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration><?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>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>hdfs-xite.xml
修改/opt/hadoop/etc/hadoop目录下的hdfs-site.xml文件
vi hdfs-xite.xmlvi hdfs-xite.xml修改内容如下
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/tmp/data</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/tmp/name</value>
</property>
</configuration><configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/tmp/data</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/tmp/name</value>
</property>
</configuration>mapred-site.xml
修改/opt/hadoop/etc/hadoop目录下的mapred-site.xml文件
先进行复制改名,因为本身是没有mapred-site.xml这个文件的
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xmlcp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml修改内容如下
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration><configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>yarn-site.xml
修改/opt/hadoop/etc/hadoop目录下的yarn-site.xml文件
vi yarn-site.xmlvi yarn-site.xml修改内容如下,二选一
这是第一版
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- 关闭虚拟内存的检测 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration><configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- 关闭虚拟内存的检测 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>这是第二版
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data/tmp/logs</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs/</value>
<description>URL for job history server</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</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>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration><configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data/tmp/logs</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs/</value>
<description>URL for job history server</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</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>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>slaves
修改/opt/hadoop/etc/hadoop目录下的slaves文件
vi slavesvi slaves删除文件中的localhost,并添加你要配置的集群节点名称
这里添加master也是可以的,添加master后,master节点也会作为数据节点存在
slave1
slave2
slave3slave1
slave2
slave3hadoop-env.sh
修改/opt/hadoop/etc/hadoop目录下的hadoop-env.sh文件
vi hadoop-env.shvi hadoop-env.sh注释掉原本文件中的export JAVA_HOME=${JAVA_HOME},添加你配置的正确的JAVA_HOME
注意:这里的JAVA_HOME需要与你安装配置的,写在/etc/profile文件下的一致
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=opt/jdk# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=opt/jdkyarn-env.sh
修改/opt/hadoop/etc/hadoop目录下的yarn-env.sh文件
vi yarn-env.shvi yarn-env.sh与hadoop-env.sh的配置相同,注释掉原本的export JAVA_HOME=/home/y/libexec/jdk1.6.0/,并在其下方导入正确的JAVA_HOME
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/opt/jdk# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/opt/jdk配置ssh无密码登录
首先在master节点中生成密钥,连续按下三次Enter键
ssh-keygen -t rsassh-keygen -t rsa会获得以下部分内容,注意,只作参考
INFO
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a6:13:5a:7b:54:eb:77:58:bd:56:ef:d0:64:90:66:d4 root @ master.centos.com
The key's randomart image is:
你将在/root/.ssh/目录下获得私有密钥id_rsa和公有密钥id_rsa.pub两个文件
将master公钥复制到远程机器中,根据提示选择yes和输入目标机器的root用户密码
ssh-copy-id -i /root/.ssh/id_rsa.pub master
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2
ssh-copy-id -i /root/.ssh/id_rsa.pub slave3ssh-copy-id -i /root/.ssh/id_rsa.pub master
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2
ssh-copy-id -i /root/.ssh/id_rsa.pub slave3验证是否成功,不用输入密码登录进去了即可视为成功
ssh slave1
ssh slave2
ssh slave3ssh slave1
ssh slave2
ssh slave3配置时间同步
在所有的节点安装ntp服务
yum install -y ntpyum install -y ntp若出错则需先重新挂载、跟新yum源,再执行安装操作
mount /dev/cdrom /media
yum clean all
yum -y install ntpmount /dev/cdrom /media
yum clean all
yum -y install ntp在master节点中设置master节点为ntp服务主节点
vim /etc/ntp.confvim /etc/ntp.conf注释掉以server开头的行,并添加以下内容
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10在所有slave节点中配置ntp,同样修改/etc/ntp.conf文件,注释掉server开头的行,并添加以下内容
server masterserver master所有节点永久关闭防火墙
systemctl stop firewalld && systemctl disable firewalldsystemctl stop firewalld && systemctl disable firewalld在master节点执行ntp服务永久启动
systemctl start ntpd && systemctl enable ntpdsystemctl start ntpd && systemctl enable ntpd在数据节点slave1、slave2、slave3上执行命令同步时间
ntpdate masterntpdate master在各从节点也即数据节点上执行永久启动ntp服务
systemctl start ntpd && systemctl enable ntpdsystemctl start ntpd && systemctl enable ntpd分发文件
INFO
由于我们使用的是配置网络的四台未安装hadoop的虚拟机,完成到这个地方只有master安装配置了hadoop和java
所以我们使用scp命令进行分发,如果是配置完master后直接克隆的可以忽略这步
分发步骤完全在master上执行
分发/etc/profile文件
scp -r /etc/profile slave1:/etc/
scp -r /etc/profile slave2:/etc/
scp -r /etc/profile slave3:/etc/scp -r /etc/profile slave1:/etc/
scp -r /etc/profile slave2:/etc/
scp -r /etc/profile slave3:/etc/记得在各个节点source以下/etc/profile
source /etc/profilesource /etc/profile分发jdk
scp -r /opt/jdk slave1:/opt/
scp -r /opt/jdk slave2:/opt/
scp -r /opt/jdk slave3:/opt/scp -r /opt/jdk slave1:/opt/
scp -r /opt/jdk slave2:/opt/
scp -r /opt/jdk slave3:/opt/分发hadoop
scp -r /opt/hadoop slave1:/opt/
scp -r /opt/hadoop slave2:/opt/
scp -r /opt/hadoop slave3:/opt/scp -r /opt/hadoop slave1:/opt/
scp -r /opt/hadoop slave2:/opt/
scp -r /opt/hadoop slave3:/opt/启动集群 注意
WARNING
注意:不要多次格式化,会出现各类进程丢失的情况
如果出现了此类情况,需要将你配置的tmp缓存文件夹和hadoop目录下的logs文件夹下的文件删除
本次搭建若出现此类情况只需在hadoop目录下删除tmp目录和logs目录下的文件
进行格式化,只在master中进行
hdfs namenode -formathdfs namenode -format启动集群,只需要在主节点上执行命令
start-all.shstart-all.sh如果有需要开启日志服务也可以开启(可选)
mr-jobhistory-daemon.sh start historyservermr-jobhistory-daemon.sh start historyserverjps查看进程
jpsjps