一、准备工作
虚拟机1:master
虚拟机2:node1
虚拟机3:node2
-
时间同步
ntpdate ntp.aliyun.com
-
调整时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
jdk1.8(以1.8为例,目前大多数企业都是使用1.8版本,最稳定)
java -version
-
修改主机名
三台分别执行 vim /etc/hostname 并将内容指定为对应的主机名
-
关闭防火墙:systemctl stop firewalld
-
查看防火墙状态:systemctl status firewalld
-
取消防火墙自启:systemctl disable firewalld
-
-
静态IP配置
-
直接使用图形化界面配置(不推荐)
-
手动编辑配置文件进行配置
1、编辑网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
HWADDR=00:0C:29:E2:B8:F2
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.190.100
GATEWAY=192.168.190.2
NETMASK=255.255.255.0
DNS1=192.168.190.2
DNS2=223.6.6.6
需要修改:HWADDR(mac地址,centos7不需要手动指定mac地址)
IPADDR(根据自己的网段,自定义IP地址)
GATEWAY(根据自己的网段填写对应的网关地址)
2、关闭NetworkManager,并取消开机自启
systemctl stop NetworkManager
systemctl disable NetworkManager
3、重启网络服务
systemctl restart network
-
-
免密登录
# 1、生成密钥
ssh-keygen -t rsa
注意:连敲三次生成方格形状的密钥,在当前状态下,配置免密钥登陆。
# 2、配置免密登录(三台虚拟机都需要进行免密操作,不要怕麻烦!!)
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
# 3、测试免密登录
ssh node1
ssh node2
ssh master -
配置好映射文件:/etc/hosts(三台虚拟机都需要配置)
192.168.170.100 master
192.168.170.101 node1
192.168.170.102 node2
注意:每个人的IP地址都是不一样的,查看自己的IP地址使用 ifconfig
使用远程复制
cd /etc
scp -r hosts/ node1:`pwd`
scp -r hosts/ node2:`pwd`
二、 Zookeeper 搭建
1、上传安装包到master并解压
tar -xvf zookeeper-3.4.6.tar.gz
官网下载:
https://zookeeper.apache.org/
2、配置环境变量
vim /etc/profile export ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6 export PATH=$PATH:$ZOOKEEPER_HOME/bin 保存退出,执行 source /etc/profile 配置node1和node2的环境变量 scp /etc/profile node1:/etc/ scp /etc/profile node2:/etc/ 在所有节点执行 source /etc/profile
3、修改配置文件
cd /usr/local/soft/zookeeper-3.4.6/(解压后的目录) cd conf zoo_sample.cfg(是一个模板文件,_sample后缀,不起任何效果,需要复制一份) cp zoo_sample.cfg zoo.cfg
修改 dataDir=/usr/local/soft/zookeeper-3.4.6/data 文件最后位置增加 server.0=master:2888:3888 server.1=node1:2888:3888 server.2=node2:2888:3888
4、同步到其它节点
scp -r zookeeper-3.4.6 node1:`pwd` scp -r zookeeper-3.4.6 node2:`pwd`
5、创建/usr/local/soft/zookeeper-3.4.6/data目录,所有节点都要创建
mkdir /usr/local/soft/zookeeper-3.4.6/data 在data目录下创建myid文件 vim myid master,node1,node2分别加上0,1,2
6、启动zk, zkServer.sh start 三台都需要执行
zkServer.sh status 查看状态 当有一个leader的时候启动成功
连接zk zkCli.sh
zk 是一个目录结构 ,每个节点可以存数据,同时可以有子节点
zk shell
创建目录 create /test test create /test/a 1
获取数据 get /test ls /test delete 只能删除没有子节点的节点 rmr /test 删除节点
重置zk 1、杀掉所有zk进程 kiil -9 pid
2、删除data目录下的version文件, 所有节点都要删除 rm -rf /usr/local/soft/zookeeper-3.4.6/data/version-2
2、启动zk
一、准备工作(做之前拍摄快照)
VMWARE虚拟机 CentOS 7 系统
虚拟机1:master
虚拟机2:node1
-
时间同步
ntpdate ntp.aliyun.com
-
调整时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
jdk1.8(以1.8为例,目前大多数企业都是使用1.8版本,最稳定)
java -version
-
修改主机名
三台分别执行 vim /etc/hostname 并将内容指定为对应的主机名
-
关闭防火墙:systemctl stop firewalld
-
查看防火墙状态:systemctl status firewalld
-
取消防火墙自启:systemctl disable firewalld
-
-
静态IP配置
-
直接使用图形化界面配置(不推荐)
-
手动编辑配置文件进行配置
1、编辑网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
HWADDR=00:0C:29:E2:B8:F2
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.190.100
GATEWAY=192.168.190.2
NETMASK=255.255.255.0
DNS1=192.168.190.2
DNS2=223.6.6.6
需要修改:HWADDR(mac地址,centos7不需要手动指定mac地址)
IPADDR(根据自己的网段,自定义IP地址)
GATEWAY(根据自己的网段填写对应的网关地址)
2、关闭NetworkManager,并取消开机自启
systemctl stop NetworkManager
systemctl disable NetworkManager
3、重启网络服务
systemctl restart network
-
-
免密登录
# 1、生成密钥
ssh-keygen -t rsa
注意:连敲三次生成方格形状的密钥,在当前状态下,配置免密钥登陆。
# 2、配置免密登录(三台虚拟机都需要进行免密操作,不要怕麻烦!!)
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
# 3、测试免密登录
ssh node1
ssh node2
ssh master -
配置好映射文件:/etc/hosts(三台虚拟机都需要配置)
192.168.170.100 master
192.168.170.101 node1
192.168.170.102 node2
注意:每个人的IP地址都是不一样的,查看自己的IP地址使用 ifconfig
使用远程复制
cd /etc
scp -r hosts/ node1:`pwd`
scp -r hosts/ node2:`pwd`
二、 Zookeeper 搭建(一中有详细教程)
ZK NN DN RM NM JN ZKFC
master 1 1 1 1 1
node1 1 1 1 1 1 1 1
node2 1 1 1 1
停止HDFS集群:stop-dfs.sh
1、修改hadoop配置文件
cd /usr/local/soft/hadoop-2.7.6/etc/hadoop core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml
举例视图:
[root@master hadoop]# ll 总用量 156 -rw-r--r-- 1 20415 101 4436 4月 18 2018 capacity-scheduler.xml -rw-r--r-- 1 20415 101 1335 4月 18 2018 configuration.xsl -rw-r--r-- 1 20415 101 318 4月 18 2018 container-executor.cfg -rw-r--r-- 1 20415 101 1100 5月 21 15:40 core-site.xml -rw-r--r-- 1 20415 101 3670 4月 18 2018 hadoop-env.cmd -rw-r--r-- 1 20415 101 4269 5月 21 17:38 hadoop-env.sh -rw-r--r-- 1 20415 101 2598 4月 18 2018 hadoop-metrics2.properties -rw-r--r-- 1 20415 101 2490 4月 18 2018 hadoop-metrics.properties -rw-r--r-- 1 20415 101 9683 4月 18 2018 hadoop-policy.xml -rw-r--r-- 1 20415 101 961 5月 21 15:43 hdfs-site.xml -rw-r--r-- 1 20415 101 1449 4月 18 2018 httpfs-env.sh -rw-r--r-- 1 20415 101 1657 4月 18 2018 httpfs-log4j.properties -rw-r--r-- 1 20415 101 21 4月 18 2018 httpfs-signature.secret -rw-r--r-- 1 20415 101 620 4月 18 2018 httpfs-site.xml -rw-r--r-- 1 20415 101 3518 4月 18 2018 kms-acls.xml -rw-r--r-- 1 20415 101 1527 4月 18 2018 kms-env.sh -rw-r--r-- 1 20415 101 1631 4月 18 2018 kms-log4j.properties -rw-r--r-- 1 20415 101 5540 4月 18 2018 kms-site.xml -rw-r--r-- 1 20415 101 11801 4月 18 2018 log4j.properties -rw-r--r-- 1 20415 101 951 4月 18 2018 mapred-env.cmd -rw-r--r-- 1 20415 101 1383 4月 18 2018 mapred-env.sh -rw-r--r-- 1 20415 101 4113 4月 18 2018 mapred-queues.xml.template -rw-r--r-- 1 root root 1116 5月 21 15:44 mapred-site.xml -rw-r--r-- 1 20415 101 758 4月 18 2018 mapred-site.xml.template -rw-r--r-- 1 20415 101 12 5月 21 15:44 slaves -rw-r--r-- 1 20415 101 2316 4月 18 2018 ssl-client.xml.example -rw-r--r-- 1 20415 101 2697 4月 18 2018 ssl-server.xml.example -rw-r--r-- 1 20415 101 2191 4月 18 2018 yarn-env.cmd -rw-r--r-- 1 20415 101 4567 4月 18 2018 yarn-env.sh -rw-r--r-- 1 20415 101 1185 5月 21 15:45 yarn-site.xml
修改配置文件
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://cluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/soft/hadoop-2.7.6/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,node1:2181,node2:2181</value> </property> </configuration>
修改配置文件
hdfs-site.xml
<configuration> <!-- 指定hdfs元数据存储的路径 --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/namenode</value> </property> <!-- 指定hdfs数据存储的路径 --> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/datanode</value> </property> <!-- 数据备份的个数 --> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- 关闭权限验证 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 开启WebHDFS功能(基于REST的接口服务) --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <!-- //////////////以下为HDFS HA的配置////////////// --> <!-- 指定hdfs的nameservices名称为mycluster --> <property> <name>dfs.nameservices</name> <value>cluster</value> </property> <!-- 指定cluster的两个namenode的名称分别为nn1,nn2 --> <property> <name>dfs.ha.namenodes.cluster</name> <value>nn1,nn2</value> </property> <!-- 配置nn1,nn2的rpc通信端口 --> <property> <name>dfs.namenode.rpc-address.cluster.nn1</name> <value>master:8020</value> </property> <property> <name>dfs.namenode.rpc-address.cluster.nn2</name> <value>node1:8020</value> </property> <!-- 配置nn1,nn2的http通信端口 --> <property> <name>dfs.namenode.http-address.cluster.nn1</name> <value>master:50070</value> </property> <property> <name>dfs.namenode.http-address.cluster.nn2</name> <value>node1:50070</value> </property> <!-- 指定namenode元数据存储在journalnode中的路径 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;node1:8485;node2:8485/cluster</value> </property> <!-- 指定journalnode日志文件存储的路径 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/journal</value> </property> <!-- 指定HDFS客户端连接active namenode的java类 --> <property> <name>dfs.client.failover.proxy.provider.cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制为ssh --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 指定秘钥的位置 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property>: <!-- 开启自动故障转移 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
yarn 高可用 修改配置文件
yarn-site.xml
<configuration> <!-- 指定MapReduce计算框架使用YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定jobhistory server的rpc地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 指定jobhistory server的http地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <!-- 开启uber模式(针对小作业的优化) --> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <!-- 配置启动uber模式的最大map数 --> <property> <name>mapreduce.job.ubertask.maxmaps</name> <value>9</value> </property> <!-- 配置启动uber模式的最大reduce数 --> <property> <name>mapreduce.job.ubertask.maxreduces</name> <value>1</value> </property> </configuration>
修改配置文件
mapred-site.xml
<!-- 指定MapReduce计算框架使用YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定jobhistory server的rpc地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 指定jobhistory server的http地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <!-- 开启uber模式(针对小作业的优化) --> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <!-- 配置启动uber模式的最大map数 --> <property> <name>mapreduce.job.ubertask.maxmaps</name> <value>9</value> </property> <!-- 配置启动uber模式的最大reduce数 --> <property> <name>mapreduce.job.ubertask.maxreduces</name> <value>1</value> </property>
5、删除hadoop数据存储目录下的文件 每个节点都需要删除(直接删除其他节点上的 /hadoop-2.7.6/ 文件夹)
注:原来的节点上没有Hadoop这个文件就不要删除了!!
其他节点上删除 node1 node2 rm -rf /usr/local/soft/hadoop-2.7.6/
同步到其它节点 (远程复制一份到其他两个节点上去)
cd /usr/local/soft/ scp -r hadoop-2.7.6/ node1:`pwd` scp -r hadoop-2.7.6/ node2:`pwd`
三、启动进程 (按照一下顺序进行操作)
6、启动zookeeper 三台都需要启动 zkServer.sh start zkServer.sh status
7、启动JN 存储hdfs元数据 三台JN上执行 启动命令:
cd /usr/local/soft/hadoop-2.7.6/sbin/ hadoop-daemon.sh start journalnode
8、格式化 在一台NN上执行,这里选择master
hdfs namenode -format
启动当前的NN
hadoop-daemon.sh start namenode
9、执行同步 没有格式化的NN上执行 在另外一个namenode上面执行 这里选择node1
/usr/local/soft/hadoop-2.7.6/bin/ hdfs namenode -bootstrapStandby
10、格式化ZK 在master上面执行 !!一定要先 把zk集群正常 启动起来
/usr/local/soft/hadoop-2.7.6/bin/ hdfs zkfc -formatZK
11、启动hdfs集群,在master上执行
start-dfs.sh
最后在页面查看(以下显示,集群搭建成功)
http://master:50070/ 或者 http://192.168.170.110:50070/
http://node1:50070/ 或者 http://192.168.170.120:50070/
关闭
stop-all.sh