01
—
环境准备
软件以及版本
| 软件 | 版本 |
| VMware | 14.0 |
| Linux镜像CentOS | CentOS7,64位 |
| java | jdk1.8.0_141 |
| Hadoop | hadoop-2.6.0-cdh5.14.2 |
| Zookeeper | zookeeper-3.4.5-cdh5.14.2 |
02
—
单台CentOS搭建
一、VMware安装
安装虚拟机,比较简单不再讲解。
二、单台Linux安装配置
VMware虚拟机中安装1台CentOS7,比较简单不再讲解。
不过要注意几个问题:
CentOS7虚拟机配置要求
主机 内存(G) 处理器(P) 内核数量(C) node1 4 2 2 node2 2 1 1 node3 2 1 1 修改IP地址、配置DNS
vim etc/sysconfig/network-scripts/ifcfg-ens3ONBOOT="yes"IPADDR=192.168.8.101NETMASK=255.255.255.0GATEWAY=192.168.8.1DNS1=8.8.8.8检查并修改MAC地址
如果用虚拟机克隆第2、3台linux,则要修改linux的MAC地址,避免3台服务器MAC地址重复。这里修改MAC地址有两种方法:
虚拟机里面随机生成
进入Linux系统后,修改网卡的UUID信息
关闭防火墙
systemctl stop firewalldsystemctl disable firewalld关系selinux
vim /etc/selinux/configSELINUX=disabled更改主机名
第一台
vim /etc/hostnamenode01.wqs.com第二台
vim etc/hostnamenode02.wqs.com第三台
vim /etc/hostnamenode03.wqs.com修改hosts
每台都要修改,对IP和主机名做映射

vim etc/sysconfig/network-scripts/ifcfg-ens33

vim /etc/hosts192.168.8.101 node01.wqs.com node01192.168.8.102 node02.wqs.com node02192.168.8.103 node03.wqs.com node03
03
—
三台CentOS搭建
先检查上述单台linux的7个注意要点。然后开始配置3台Linux集群。
同步3台服务器集群时间
这里通过网络连接外网进行时钟同步的方法。前提是必须保证虚拟机连上外网。检测方法可以是ping通百度。三台机器都安装ntpdate,阿里云时钟同步服务器。
yum -y install ntpdatentpdate ntp4.aliyun.com
三台机器定制任务,添加如下内容:
crontab -e*/1 * * * * usr/sbin/ntpdate ntp4.aliyun.com;
2. 添加普通用户并且赋予权限
三台linux服务器统一添加普通用户hadoop,并给以sudo权限,用于以后
所有的地方的大数据软件的安装。
visudo添加内容hadoop ALL=(ALL) ALL
3. 设置统一目录
定义三台linux服务器软件压缩包存放目录,以及解压后安装目录,三台机 器执行以下命令,创建两个文件夹,一个用于存放软件压缩包目录,一个用于存放解压后目录。
mkdir -p wqs/soft # 软件压缩包存放目录mkdir -p wqs/install # 软件解压后存放目录chown -R hadoop:hadoop wqs # 将文件夹权限更改为hadoop用户
创建hadoop用户之后,我们三台机器都通过hadoop用户来进行操作,以后再也不需要使用root用户来操作了三台机器通过 su hadoop命令来切换到hadoop用户。

4.安装JDK
解压缩包
cd /wqs/soft/tar -xzvf jdk-8u141-linux-x64.tar.gz -C kkb/install/sudo vim etc/profile
添加环境变量
#添加以下配置内容,配置jdk环境变量export JAVA_HOME=/kkb/install/jdk1.8.0_141export PATH=$PATH:$JAVA_HOME/bin
使其生效
source etc/profile
5.做公钥与私钥实现用户免密码登录
三台机器在hadoop用户下执行以下命令生成公钥与私钥
node02
ssh-keygen -t rsa
执行上述命令之后,按三次Enter键即可生成了
三台机器在hadoop用户下,执行命令拷贝公钥到node01服务器
ssh-copy-id node01
node01服务器将公钥拷贝给node02与node03,node01在hadoop用户下,执行以下命令,将authorized_keys拷贝到node02与node03服务器。
cd home/hadoop/.ssh/scp authorized_keys node02:$PWDscp authorized_keys node03:$PWD
验证,从任意节点是否能免秘钥登陆其他节点。
如node01免密登陆node02。
重启3台服务器
sudo reboot -h now
04
—
zookeeper注册中心集群搭建
注意:安装ZooKeeper前要保证三台linux服务器时钟同步。
下载上传解压缩包
zookeeeper的压缩包到Node1服务器/wqs/soft路径下

cd /wqs/softtar -zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz -C wqs/install/
修改配置文件zoo.cfg
cd /wqs/install/zookeeper-3.4.5-cdh5.14.2/confcp zoo_sample.cfg zoo.cfgmkdir -p /wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatasvim zoo.cfgdataDir=/wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatasautopurge.snapRetainCount=3autopurge.purgeInterval=1server.1=node01:2888:3888server.2=node02:2888:3888server.3=node03:2888:3888添加myid配置
节点node1添加myid文本文件
echo 1 > /wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid分发到其他2台机器上,并且修改myid的值为2和3
第一台机器上面执行以下两个命令scp -r /wqs/install/zookeeper-3.4.5-cdh5.14.2/ node02:/wqs/install/scp -r wqs/install/zookeeper-3.4.5-cdh5.14.2/ node03:/wqs/install/第二台机器上修改myid的值为2直接在第二台机器任意路径执行以下命令echo 2 > /wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid第三台机器上修改myid的值为3直接在第三台机器任意路径执行以下命令echo 3 > wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid3台CentOS启动zookeeper服务
三台机器都需要启动服务
/wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh start查看启动状态/wqslsls/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh status搭建过程中发现问题
解决方法思路
node01节点一直无法链接,而node02和03是正常的,node03显示是leader,node02是follower。
[hadoop@node01 bin]$ zkServer.sh startJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[hadoop@node01 bin]$ jps10625 Jps10601 QuorumPeerMain[hadoop@node01 bin]$ zkServer.sh statusJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgError contacting service. It is probably not running.2020-09-26 13:07:04,095 [myid:3] - INFO [node03/192.168.8.103:3888:QuorumCnxManager$Listener@712] - Received connection request 192.168.8.101:608302020-09-26 13:07:04,096 [myid:3] - WARN [node03/192.168.8.103:3888:QuorumCnxManager@573] - Cannot open channel to 1 at election address node01/192.168.8.101:3888java.net.NoRouteToHostException: No route to host (Host unreachable)at java.net.PlainSocketImpl.socketConnect(Native Method)at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)at java.net.Socket.connect(Socket.java:589)at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:552)at org.apache.zookeeper.server.quorum.QuorumCnxManager.handleConnection(QuorumCnxManager.java:468)at org.apache.zookeeper.server.quorum.QuorumCnxManager.receiveConnection(QuorumCnxManager.java:387)
(1)是否是公约私密问题?
在node1-3主机可以随意切换链接到其他节点,应该问题不在这边!
(2)是否是防火墙问题?
查看是防火墙问题,node1的防火墙开着!!!
[hadoop@node01 bin]$ systemctl status firewalldfirewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: active (running) since Sat 2020-09-26 19:22:13 CST; 5h 43min leftDocs: man:firewalld(1)Main PID: 8657 (firewalld)CGroup: system.slice/firewalld.service└─8657 usr/bin/python -Es usr/sbin/firewalld --nofork --nopid[hadoop@node01 bin]$ systemctl stop firewalld==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===Authentication is required to manage system services or units.Authenticating as: rootPassword:==== AUTHENTICATION COMPLETE ===
关闭防火墙
[hadoop@node01 bin]$ systemctl stop firewalld==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===Authentication is required to manage system services or units.Authenticating as: rootPassword:==== AUTHENTICATION COMPLETE ===[hadoop@node01 bin]$ systemctl disable firewalld==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ===Authentication is required to manage system service or unit files.Authenticating as: rootPassword:==== AUTHENTICATION COMPLETE ===Removed symlink etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===Authentication is required to reload the systemd state.Authenticating as: rootPassword:==== AUTHENTICATION COMPLETE ===[hadoop@node01 bin]$ systemctl status firewalldfirewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)[hadoop@node01 bin]$ ll
测试连接,三台机器重启zookeeper服务。
[root@node01 bin]# zkServer.sh startJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[root@node01 bin]#[hadoop@node02 bin]$ zkServer.sh startJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[hadoop@node02 bin]$[hadoop@node03 bin]$ zkServer.sh startJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[hadoop@node03 bin]
查看三台机器zookeeper的状态显示正常
[root@node01 bin]# zkServer.sh statusJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgMode: leader[root@node01 bin]#[hadoop@node02 bin]$ zkServer.sh statusJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgMode: follower[hadoop@node02 bin]$[hadoop@node03 bin]$ zkServer.sh statusJMX enabled by defaultUsing config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfgMode: follower[hadoop@node03 bin]$
05
—
Hadoop集群搭建
一、集群规划部署
| 服务器IP | 192.168.8.101 | 192.168.8.102 | 192.168.8.103 |
|---|---|---|---|
| HDFS | NameNode | ||
| HDFS | SecondaryNameNode | ||
| HDFS | DataNode | DataNode | DataNode |
| YARN | ResourceManager | ||
| YARN | NodeManager | NodeManager | NodeManager |
| 历史日志服务器 | JobHistoryServer |
二、安装部署
1.把hadoop包上传到第一台服务器并解压
第一台机器执行以下命令
cd /wqs/install/hadoop-2.6.0-cdh5.14.2bin/hadoop ls[hadoop@node01 bin]$ hadoop checknative20/09/26 23:32:32 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native20/09/26 23:32:32 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib libraryNative library checking:hadoop: true wqs/install/hadoop-2.6.0-cdh5.14.2/lib/native/libhadoop.so.1.0.0zlib: true lib64/libz.so.1snappy: true lib64/libsnappy.so.1lz4: true revision:10301bzip2: true lib64/libbz2.so.1openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
如果出现openssl为false,那么所有机器在线安装openssl即可,执行以下命令,虚拟机联网之后就可以在线进行安装了。
yum -y install openssl-devel
2.修改core-site.xml
cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoopvim core-site.xml<configuration><property><name>fs.defaultFS</name><value>hdfs://node01:8020</value></property><property><name>hadoop.tmp.dir</name><value>/wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas</value></property><!-- 缓冲区大小,实际工作中根据服务器性能动态调整 --><property><name>io.file.buffer.size</name><value>4096</value></property><!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 --><property><name>fs.trash.interval</name><value>10080</value></property></configuration>
3.修改hdfs-site.xml
配置dfs.hosts

配置NameNode、dataNode

配置NameNode的edits、checkpoint

4.修改hadoop-env.sh
cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoopvim hadoop-env.shexport JAVA_HOME=/kkb/install/jdk1.8.0_141
5.修改mapred-site.xml
cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop[root@node01 hadoop]# cat mapred-site.xml<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.job.ubertask.enable</name><value>true</value></property><property><name>mapreduce.jobhistory.address</name><value>node01:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>node01:19888</value></property></configuration>
6.修改yarn-site.xml
cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop[root@node01 hadoop]# cat yarn-site.xml<!-- Site specific YARN configuration properties --><property><name>yarn.resourcemanager.hostname</name><value>node01</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>
7.修改slaves文件
cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoopvim slavesnode01node02node03
8.创建文件存放目录
在第一台节点上,执行多个文件夹创建。
mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatasmkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatasmkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/datanodeDatasmkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/editsmkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/snn/namemkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/snn/edits

9.安装包的分发
cd /wqs/install/scp -r hadoop-2.6.0-cdh5.14.2/ node02:$PWDscp -r hadoop-2.6.0-cdh5.14.2/ node03:$PWD
10.Hadoop环境变量
vim /etc/profileexport HADOOP_HOME=/kkb/install/hadoop-2.6.0-cdh5.14.2export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH配置完成之后生效source /etc/profile
三、集群启动
1.格式化NameNode
要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。
bin/hdfs namenode -format或者bin/hadoop namenode –format
2.单个节点逐一启动
在主节点上使用以下命令启动 HDFS NameNode:hadoop-daemon.sh start namenode在每个从节点上使用以下命令启动 HDFS DataNode:hadoop-daemon.sh start datanode在主节点上使用以下命令启动 YARN ResourceManager:yarn-daemon.sh start resourcemanager在每个从节点上使用以下命令启动 YARN nodemanager:yarn-daemon.sh start nodemanager以上脚本位于$HADOOP_PREFIX/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start 改为stop 即可。
sbin/start-dfs.sh

sbin/start-yarn.sh

sbin/mr-jobhistory-daemon.sh start historyserver

3.脚本一键启动集群
前提配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
node01执行以下命令cd /wqs/install/hadoop-2.6.0-cdh5.14.2/sbin/start-dfs.shsbin/start-yarn.shsbin/mr-jobhistory-daemon.sh start historyserver停止集群:sbin/stop-dfs.shsbin/stop-yarn.sh//editby wqs 需要启动jobhistoryservermr-jobhistory-daemon.sh start historyserver//jps[hadoop@node01 sbin]$ jps35904 ResourceManager36481 Jps12178 QuorumPeerMain35749 SecondaryNameNode36005 NodeManager35590 DataNode36390 JobHistoryServer35454 NameNode[hadoop@node01 sbin]$
四、浏览器查看启动页面
hdfs集群访问地址,端口50070;
http://192.168.8.101:50070/dfshealth.html#tab-overview


yarn集群访问地址,端口8088;
http://192.168.8.101:8088/cluster

日志信息

jobhistory访问地址:

至此,Hadoop集群搭建完毕,可以在上面运行自带的WordCount程序了。




