hadoop完全分布式搭建
前言
hadoop3.1.4完全分布式集群环境搭建
一、centos环境
centos是目前企业用的比较多的linux操作系统,这里使用的是centos7,服务器安装的版本是CentOS Linux release 7.6.1810 (Core),网上有很多安装教程,这里就不多赘述。
二、yum 镜像地址更改
为了可以提高下载安装包的速度,建议切换到ali的源。
操作如下:
cd yum.repos.d/
rm -rf *
curl -o /etc/yum.repos.d/ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
三、ntp集群时钟同步
3.1 确定系统是否安装ntp
rpm -qa | grep ntp
1) 出现以下信息则系统已经安装 ntp:
安装信息 |
---|
fontpackages-filesystem-1.44-8.el7.noarch |
python-ntplib-0.3.2-1.el7.noarch |
ntpdate-4.2.6p5-28.el7.centos.x86_64 |
ntp-4.2.6p5-28.el7.centos.x86_64 |
2)如果安装信息不完整删除已安装 ntp:
yum –y remove ntpdate-4.2.6p5-28.el7.x86_64
3) 重新安装ntp:
yum -y install ntp
3.2 配置ntp服务
1) 修改所有节点的ntp.conf
vim /etc/ntp.conf
###内容
restrict 192.168.1.82 nomodify notrap nopeer noquery //当前节点IP地址
restrict 192.168.6.2 mask 255.255.255.0 nomodify notrap //集群所在网段的网关(Gateway),子网掩码(Genmask)
2)确定时间同步的主节点,修改它的ntp.conf
vim /etc/ntp.conf
#在 server 部分添加
server 127.127.1.0
Fudge 127.127.1.0 stratum 10
#并注释掉server 0~n 的配置信息
3)主节点以外其他节点配置
vim /etc/ntp.conf
#在 server 部分添加
server 192.168.1.82
Fudge 192.168.1.82 stratum 10
#并注释掉server 0~n 的配置信息
3.3 启动ntp、查看状态
1)启动ntp服务
systemctl start ntpd
2)查看 ntp 服务是否启动成功
ntpstat
ntp服务器启动完毕后,需要等待5-10分钟才能与/etc/ntp.conf中配置的标准时间进行同步。
等一段时间之后,使用ntpstat命令查看状态,就会有如下结果:
3)查看ntp服务器与上层ntp的状态
ntpq -p
remote:本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先
refid:参考上一层ntp主机地址
st:stratum阶层
when:多少秒前曾经同步过时间
poll:下次更新在多少秒后
reach:已经向上层ntp服务器要求更新的次数
delay:网络延迟
offset:时间补偿
jitter:系统时间与bios时间差
3.4 设置开机自启
chkconfig ntpd on
四、防火墙(所有节点)
关闭防火墙:
防火墙的相关操作
五、主机名与hosts文件(所有节点)
1)修改主机名
hostnamectl set-hostname hadoop01
reboot #重启生效
2)修改hosts文件
vi /etc/hosts
#追加内容
192.168.1.82 hadoop01
192.168.1.83 hadoop02
192.168.1.84 hadoop03
六、SSH 免密登录(所有节点)
1)输入以下命令回车至返回终端得到秘钥
ssh-keygen
2)将秘钥拷贝至集群中所有机器
ssh-copy-id root@192.168.1.82
ssh-copy-id root@192.168.1.83
ssh-copy-id root@192.168.1.84
3)所有节点执行以上操作
4)测试
ssh hadoop01
ssh hadoop02
ssh hadoop03
七、jdk(所有节点)
7.1 检查系统是否自带open-jdk,如果执行以下操作,最终等得到jdk的路径,并且是open-jdk,则执行下面的操作
java -version
which java
返回路径>/xxx/xxx/java
ls -lrt /xxx/xxx/java
返回连接信息>/usr/bin/java -> /etc/alternatives/java
ls -lrt /etc/alternatives/java
返回安装路径>/etc/alternatives/java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
7.2卸载系统自带open-jdk
1) 查看
rpm -qa|grep java
2) 通过rpm -e -nodeps 卸载所有包
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64
7.3安装jdk
- 将事先准备好的jar包上传到centos系统上,然后解压、添加软连接,我这里将安装路径放在了/usr/lib下
cd /usr/lib/jvm
cp /xxx/xxx/jdk1.8.xxx.gz .
tar -zxvf jdk1.8.xxx.gz
ln -s /usr/lib/jvm/jdk1.8.xxx /usr/lib/jvm/jdk
- 配置环境变量
vim /etc/profie
#文件末尾追加
export JAVA_HOME=/usr/lib/jvm/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
八、zookeeper(所有节点)
8.1 安装zookeeper
- 将事先准备好的jar包上传到centos系统上,然后解压、添加软连接,我这里将安装路径放在了/usr/lib下
cd /usr/lib
mkdir zookeeper
cd zookeeper
cp /xxx/xxx/zookepper-3.6.4.gz .
tar -zxvf zookepper-3.6.4.gz .
ln -s /usr/lib/zookeeper/zookepper-3.6.4 /usr/lib/zookeeper/zk
- 配置环境变量
vim /etc/profile
#文件末尾追加
export ZK_HOME=/usr/lib/zookeeper/zk
export PATH=\$PATH:\$ZK_HOME/bin
source /etc/profile
zkServer.sh
这里可能会提示zk没有启动,但环境变量配置是成功的
8.2 配置zookeeper
cd /usr/lib/zookeeper/zk/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
#更改一下dataDir配置
dataDir=/var/zookeeper
#在文件末尾追加,有几台机器就将他们从0~n进行编号,如下(我这里是三台服务器):
server.0 = hadoop01:2888:3888
server.1 = hadoop02:2888:3888
server.2 = hadoop03:2888:3888
cd /var
mkdir zookeeper
cd zookeeper
echo x > myid
x 指的是当前服务器的编号0,1,2 …
8.3 启动zookeeper
zkServer.sh start
zkServer.sh status
如果启动成功则会有一个leader节点,与n个follower节点
jps
会有QuorumPeerMain进程在运行
8.4 配置开机自启
cd /etc/init.d/
vim zookeeper
#编辑内容
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/jdk
export PATH=$PATH:$JAVA_HOME/bin
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
case $1 in
start)
/usr/lib/zookeeper/zk/bin/zkServer.sh start
;;
stop)
/usr/lib/zookeeper/zk/bin/zkServer.sh stop
;;
status)
/usr/lib/zookeeper/zk/bin/zkServer.sh status
;;
restart)
/usr/lib/zookeeper/zk/bin/zkServer.sh restart
;;
*)
echo "require start|stop|status|restart"
;;
esac
chmod +x zookeeper
service zookeeper status
会发现通过系统service命令同样可以查看zk的状态,则可以将刚才配置的可执行文件添加到系统的自启动项里
chkconfig --add zookeeper
chkconfig zookeeper on
然后去重启机器测试
九、hadoop(所有节点)
9.1 安装hadoop
- 将事先准备好的jar包上传到centos系统上,然后解压、添加软连接,我这里将安装路径放在了/usr/lib下
cd /usr/lib
mkdir hadoop
cd hadoop
cp /xxx/xxx/hadoop-3.1.4.gz .
tar -zxvf hadoop-3.1.4.gz .
ln -s /usr/lib/hadoop/hadoop-3.1.4 /usr/lib/hadoop/hadoop
- 配置环境变量
vim /etc/profile
#在文件末尾追加
export HADOOP_HOME=/usr/lib/hadoop/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version
如果配置成功则会显示hadoop的版本信息
9.2 配置hadoop
- hadoop-env.sh
vim hadoop-env.sh
#javahome
export JAVA_HOME=/usr/lib/jvm/jdk
#尽量指定一下pid路径,防止关闭找不到pid
export HADOOP_PID_DIR=/var/hadoop/pids
#文件末尾追加
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
- core-site.xml
vim core-site.xml
配置时一定要注意linux挂载的主要数据目录
df -H
/dev/mapper/centos-root 54G 6.2G 48G 12% /
devtmpfs 17G 0 17G 0% /dev
tmpfs 17G 0 17G 0% /dev/shm
tmpfs 17G 12M 17G 1% /run
tmpfs 17G 0 17G 0% /sys/fs/cgroup
/dev/sda2 1.1G 171M 893M 17% /boot
/dev/sda1 210M 12M 198M 6% /boot/efi
/dev/mapper/centos-home 6.0T 1.2G 6.0T 1% /home
tmpfs 3.4G 13k 3.4G 1% /run/user/42
tmpfs 3.4G 0 3.4G 0% /run/user/0
从上面的信息可以看到磁盘的主要挂载目录为/home,对应的hadoop.data.dir 也应该配置在该目录
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop数据的存储目录 ,用来指定hadoop数据的存储目录,此次配置用的hadoop.data.dir是自己定义的变量, 因为在hdfs-site.xml中会使用此配置的值来具体指定namenode 和 datanode存>储数据的目录-->
<property>
<name>hadoop.data.dir</name>
<value>/home/hadoop/data</value>
</property>
<!-- hadoop 存放临时文件的地址 包括yarn的运行时container的信息等 ,hadoop默认放在操作系统/tmp目录下,这样会出问题,应为/tmp会在30天后清理数据-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
- hdfs-site.xml
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定NameNode数据的存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<!-- 指定Datanode数据的存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<!-- 指定SecondaryNameNode数据的存储目录 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.data.dir}/namesecondary</value>
</property>
<!-- 兼容配置,先跳过 -->
<property>
<name>dfs.client.datanode-restart.timeout</name>
<value>30</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop03:9868</value>
</property>
- mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- yarn-site.xml
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 取消虚拟内存的限制 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
- workers
hadoop01
hadoop02
hadoop03
以上配置通过主节点配置好后通过ssh向其他子节点分发即可
9.3 启动hadoop
cd /usr/lib/hadoop/hadoop/sbin
./start-all.sh
jps
- 主节点
40625 NodeManager
54193 Jps
14531 QuorumPeerMain
39860 DataNode
39638 NameNode
40365 ResourceManager
- 子节点
33648 Jps
14465 QuorumPeerMain
20709 DataNode
20858 NodeManager
33648 Jps
14465 QuorumPeerMain
20709 DataNode
20858 NodeManager
9.4 页面查看
Hadoop集群信息:
http://hadoop01:8088/cluster
hdfs地址:
http://hadoop01:9870/dfshealth.html#tab-overview
dataNode 地址:
http://hadoop01:9864/datanode.html
nodeManager 地址:
http://hadoop01:8042/node
secondaryNameNode 地址:
http://hadoop03:9868/status.html
以上安装的过程使用root用户