一.目录
左侧按钮显示
二.集群规划
准备3台虚拟机,设置IP地址和hostname,一般的三台机器的集群为了明确表示主从关系,命名master,slave1,slave2,我这边直接命名为hp1,hp2,hp3,hp1当主节点使用,集群搭建时要考虑各个组件之间的版本兼容,下列这些版本的选择也是参考了其他人资料选择的。
为了快速方便安装,我选择了下载安装压缩包,上传解压安装,现将下载地址给出:https://mirrors.cnnic.cn/apache/
这个地址下基本上有apache的所有开源软件的各个版本的安装包,随意下载吧!
三.虚拟机准备及基础配置设置
3.1更改主机名映射IP地址和主机名
3.1.1更改主机名
编辑/etc/hostname文件
vi /etc/hostname
将localhost更改为需要命名的主机名
3.1.2映射IP地址和主机名
编辑/etc/hosts文件
vi /etc/hosts
添加IP地址和主机名对应关系
192.168.5.142 hp1
192.168.5.143 hp2
192.168.5.144 hp3
3.2关闭防火墙
执行防火墙关闭命令,并禁止开机启动
防火墙的相关命令
停止防火墙:
service iptables stop
启动防火墙:
service iptables start
重启防火墙:
service iptables restart
永久关闭防火墙:
chkconfig iptables off
3.3设置时间同步
3.3.1设置hp1的ntp
1.安装ntp服务
yum -y install ntp #更改hp1的节点
2.设置ntp服务器
vi /etc/ntp.conf #注释掉server 0.centos.pool.ntp.org iburst,在hp1节点新添加自己的ntp服务器,在其他2个节点将ntp服务器指向master节点
*# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp4.aliyun.com iburst
*
3.将其他2台主机的ntp服务器设置指向hp1
3.4设置主机之间的免密登录SSH
在所有节点按下列命令执行:
1.产生公钥和私钥:ssh-keygen -t rsa (一直回车直即可)
2.将公钥分发给所有节点(包括本机): ssh-copy-id -i 主机名
3.测试ssh访问: ssh root@主机名
3.5安装JDK
3.5.1卸载自带的openjdk
1.查看已安装的jdk
rpm -qa | grep java
*tzdata-java-2018e-3.el7.noarch
java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
*
2.卸载已安装的openjdk
rpm -e --nodeps 包名
3.5.2上传解压安装包
1.创建软件安装包上传目录/opt/package,Jdk安装目录/opt/java
[root@hp1 opt]# mkdir package
[root@hp1 opt]# mkdir java
2.将下载好的java安装包上传到/opt/package目录下,并解压移动到/opt/java
[root@hp1 package]# rpm -ivh jdk-8u221-linux-x64.rpm
[root@hp1 package]# mv jdk-8u221 /opt/java/jdk-1.8
3.5.3配置环境变量
1.配置环境变量
vi /etc/profile
添加以下内容
export HADOOP_HOME=/opt/hadoop/jdk-1.8
export PATH=.:${
JAVA_HOME}/bin:$PATH
使配置文件生效
source /etc/profile
3.5.4查看java信息
[root@hp1 /]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
四.Hadoop
4.1安装Hadoop
4.1.1上传解压安装包
1.创建Hadoop安装目录/opt/hadoop
[root@hp1 opt]# mkdir hadoop
2.将下载好的Hadoop安装包上传到/opt/package目录下,并解压移动到/opt/hadoop
[root@hp1 package]# tar -zxvf hadoop-2.7.7.tar.gz
[root@hp1 package]# mv hadoop-2.7.7 /opt/hadoop/
4.1.2配置环境变量
1.配置环境变量
vi /etc/profile
添加以下内容
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.7
export PATH=.:${
JAVA_HOME}/bin:${
HADOOP_HOME}/bin:$PATH
注意:export PATH= 后面只是在后面添加Hadoop的{HADOOP_HOME}/bin,后面安装其他的集群组件也是一样
使配置文件生效
source /etc/profile
4.1.3更改配置文件
更改配置文件
进入/opt/hadoop/hadoop-2.7.7/etc/hadoop 这个目录修改
core-site.xml、hadoop-env.sh、hdfs-site.xml、mapred-site.xm、slaves
cd /opt/hadoop/hadoop-2.7.7/etc/hadoop
1.修改core-site.xml
vi core-site.xml
在< configuration >后加入
# 在< configuration > </configuration>内添加以下内容
<property>
<name>fs.default.name</name>
<value>hdfs://hp1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
- fs.default.name(指定hdfs的主端口 namenode要放在哪台机器上) =》 主机名:端口号
- hadoop.tmp.dir(临时变量目录 data name secondary 如果指定了namenode datanode 可以不配)=》tmp目录
- io.file.buffer.size (流缓冲区大小 )=》131702(128M)
2.修改hadoop-env.sh
vi hadoop-env.sh
#修改 export JAVA_HOME=${JAVA_HOME}(jdk的目录)
export JAVA_HOME=/opt/java/jdk1.8
3.修改hdfs-site.xml
vi hdfs-site.xml
#在<configuration> </configuration>内添加以下内容
<!-- namenode数据的存放地点。也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/hadoop-2.7.7/dfs/name</value>
</property>
<!-- datanode数据的存放地点。也就是block块存放的目录了-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/hadoop-2.7.7/dfs/data</value>
</property>
<!-- hdfs的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- secondary namenode的http通讯地址-->
<property>
<name>dfs.secondary.http.address</name>
<value>hp1:50090</value>
</property>
<property>
<!-- 开启hdfs的web访问接口。默认端口是50070 , 一般不配 , 使用默认值-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
4.修改mapred-site.xml
若无mapred-site.xml文件,复制mapred-site.xml.template重命名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
修改mapred-site.xml
vi mapred-site.xml
#在<configuration> </configuration>内添加以下内容
<property>
<!-- 指定mr框架为yarn方式,Hadoop二代MP也基于资源管理系统Yarn来运行 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- JobHistory Server ============================================================== -->
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hp1:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hp2:19888</value>
</property>
5.修改yarn-site.xml
vi yarn-site.xml
#在<configuration> </configuration>内添加以下内容
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hp1</value>
</property>
<property>
<!--yarn总管理器的IPC通讯地址-->
<name>yarn.resourcemanager.address</name>
<value>${
yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<!--yarn总管理器调度程序的IPC通讯地址-->
<name>yarn.resourcemanager.scheduler.address</name>
<value>${
yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<!--yarn总管理器的web http通讯地址-->
<name>yarn.resourcemanager.webapp.address</name>
<value>${
yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${
yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<!--yarn总管理器的IPC通讯地址-->
<value>${
yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<!--yarn总管理器的IPC管理地址-->
<name>yarn.resourcemanager.admin.address</name>
<value>${
yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<discription>单个任务可申请最大内存,默认8192MB</discription>
</property>
<property>
<!--容器所占的虚拟内存和物理内存之比。该值指示了虚拟内存的使用可以超过所分配内存的量。默认值是2.1-->
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
6.修改slaves
vi slaves
默认localhost,若是单机模式则不需要改变
我们有2个从节点,所以将localhost改为从节点的地址
hp2
hp3
4.1.4将主节点(hp1)配置同步到从节点(hp2,hp3)
1.复制环境变量
scp /etc/profile root@hp2:/etc/
scp /etc/profile root@hp3:/etc/
2.复制Hadoop安装配置文件
scp -r /opt/hadoop root@hp2:/opt/
scp -r /opt/hadoop root@hp3:/opt/
4.2启动Hadoop
1.初始化Hadoop(== 注意如果在使用中修改了Hadoop的配置文件,就必须重新初始化==)
cd /opt/hadoop/hadoop-2.7.7/bin
到/opt/hadoop/hadoop-2.7.7/bin目录下执行
./hdfs namenode -format
初始化完成后
2.启动Hadoop(== 只需在主节点hp1启动从节点会自动启动的==)
切换到/opt/hadoop/hadoop-2.7.7/sbin目录
cd /opt/hadoop/hadoop-2.7.7/sbin
执行启动命令
./start-all.sh
[root@hp1 sbin]# ./start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [hp1]
hp1: starting namenode, logging to /opt/hadoop/hadoop-2.7.7/logs/hadoop-root-namenode-hp1.out
hp2: starting datanode, logging to /opt/hadoop/hadoop-2.7.7/logs/hadoop-root-datanode-hp2.out
hp3: starting datanode, logging to /opt/hadoop/hadoop-2.7.7/logs/hadoop-root-datanode-hp3.out
Starting secondary namenodes [hp1]
hp1: starting secondarynamenode, logging to /opt/hadoop/hadoop-2.7.7/logs/hadoop-root-secondarynamenode-hp1.out
starting yarn daemons
starting resourcemanager, logging to /opt/hadoop/hadoop-2.7.7/logs/yarn-root-resourcemanager-hp1.out
hp2: starting nodemanager, logging to /opt/hadoop/hadoop-2.7.7/logs/yarn