— bigdata — 1 min read
hostname | IP | user | password | path | os |
---|---|---|---|---|---|
node01 | 192.168.218.110 | hadoop | java | /hadoop | Centos7 |
node02 | 192.168.218.120 | hadoop | java | /hadoop | Centos7 |
node03 | 192.168.218.130 | hadoop | java | /hadoop | Centos7 |
node01 | node02 | node03 |
---|---|---|
namenode | namenode | |
datanode | datanode | datanode |
zookeeper | zookeeper | zookeeper |
ResourceManage | ResourceManage | |
NodeManage | NodeManage | NodeManage |
JournalNode | JournalNode | JournalNode |
DFSZKFailoverController | DFSZKFailoverController |
组件 | 版本 | 下载地址 |
---|---|---|
Centos7 | CentOS-7-x86_64-DVD-1908.iso | linux服务器下载地址 |
JDK | jdk1.8.0_141 | Jdk |
Zookeeper | zookeeper-3.4.5-cdh5.14.2 | zookeeper下载地址 |
Hadoop | hadoop-2.6.0-cdh5.14.2 | hadoop下载地址 |
mac参考以下链接
Mac VMware Fusion CentOS7配置静态IP
windows参考以下链接
从此步开始,开始进行服务器基础环境配置。
映射后集群间将不在需要使用ip
1192.168.218.110 node012192.168.218.120 node023192.168.218.130 node03
关闭防火墙主要是为了集群机器间的通信
1# 关闭防火墙2systemctl disable firewalld.service3
4# 查看防火墙状态5systemctl status firewalld.service6# 已关闭将输出 Active: inactive (dead)
编辑文件vim /etc/sysconfig/network-scripts/ifcfg-eth0
,写入如下配置:
1TYPE=Ethernet2PROXY_METHOD=none3BROWSER_ONLY=no4DEFROUTE=yes5IPV4_FAILURE_FATAL=no6IPV6INIT=yes7IPV6_AUTOCONF=yes8IPV6_DEFROUTE=yes9IPV6_FAILURE_FATAL=no10IPV6_ADDR_GEN_MODE=stable-privacy11NAME=eth012DEVICE=eth013IPV6_PRIVACY=no14PREFIX=2415
16## 下边的几项配置是修改的17#UUID=f22334e3-05d1-450e-a50a-1da9f5f2791518ONBOOT=yes19BOOTPROTO=static20IPADDR=192.168.218.110 # 当前机器的ip21GATEWAY=192.168.218.2 # 路由 要求网段一直 218 数字与ip的一样22DNS1=192.168.218.2 # 同上
配置主机名编辑文件/etc/hostname
,添加下列
1node01
配置完成后,重启网络服务。
1service network restart
1# 安装ntpdate2yum -y install ntpdate3
4
5# 安装完成执行命令6crontab -e7
8
9# 此时进入文本编辑模式 使用 i 插入下列命令10*/1 * * * * /usr/sbin/ntpdate time1.aliyun.com11# 填写完成后,输入 :wq 保存退出
按步骤执行以下命令
1# 添加用户组2groupadd hadoop3
4
5# 创建用户并添加到hadoop组中6useradd -g hadoop hadoop7
8
9# 使用id命令查看hadoop用户组和hadoop用户创建是否成功10id hadoop11# 正常输出 uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)12
13
14# 设置hadoop用户密码为hadoop15passwd hadoop
谨记:从这里开始未声明使用root用户,默认都是用hadoop用户操作!!! 谨记:从这里开始未声明使用root用户,默认都是用hadoop用户操作!!! 谨记:从这里开始未声明使用root用户,默认都是用hadoop用户操作!!!
1su - hadoop
1mkdir -p /hadoop/soft # 软件压缩包存放目录2 mkdir -p /hadoop/install # 软件解压后存放目录3 mkdir -p /hadoop/datadir # 各应用的数据存放目录4 chown -R hadoop:hadoop /hadoop # 将文件夹权限更改为hadoop用户
根据下载链接将需要组件下载到宿主机,由宿主机上传到虚拟机中
注意:这里上传时要使用hadoop
用户,不然还需要更改文件所属用户!!
上传路径为 /hadoop/soft
~
至于用什么方式,sftp、scp或其他工具都可!
使用hadoop
用户登录,解压命令直接解压即可
注意:一定要用hadoop
用户!!!
1tar -xzvf hadoop-2.6.0-cdh5.14.2.tar.gz -C /hadoop/install/
jdk可选择配置全局,也可以选择配置只针对hadoop
用户。
这里我选择配置只针对hadoop
用户~
命令 vim ~/.bash_profile
1export JAVA_HOME=/hadoop/install/jdk1.8.0_1412
3PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
修改完成使用命令 source ~/.bash_profile
,更新用户环境变量。
验证环境:
1java -verison2
3# 正常输出。jdk版本4# 错误输出 找不到命令
zookeeper的配置较为简单,只需要添加两个文件即可
第一个文件 zoo.cfg,命令 vim zoo.cfg
1tickTime=20002initLimit=103syncLimit=54clientPort=21815
6# 路径需要根据你的真实情况进行修改7dataDir=/hadoop/datadir/zookeeper/8# 只修改你的主机hostname就可以,我这里三台机器命名为,`node01`、`node02`、`node03`9server.1=node01:2888:388810server.2=node02:2888:388811server.3=node03:2888:3888
第二个文件 myid,进入第一个配置文件中dataDir
配置的目录,命令 vim myid
,添加 1
,即可(这块每台机器不一样,在我们克隆虚拟机镜像后
需要手动将其修改!!稍后介绍)。
hadoop的配置文件不需要区分节点,也就是说每个几点的配置文件都是相同的,所以我们在克隆虚拟机镜像前先将其配置好, 这样在克隆镜像后尽量最小的配置文件改动!
1export HADOOP_HOME=/hadoop/install/hadoop-2.6.0-cdh5.14.22
3PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改完成使用命令 source ~/.bash_profile
,更新用户环境变量。
需要修改的xml一共四个,都存放在/hadoop/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/
目录下,core-site.xml
、hdfs-site.xml
、yarn-site.xml
、mapred-site.xml
。
slaves
文件同样存在/hadoop/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/
目录中,
1# vi slaves2#将localhost这一行删除掉,添加下边三个节点3node014node025node03
下边给出命令,直接整体复制执行即可,若你修改了路径,则需要对应的修改。
1mkdir -p /hadoop/datadir/hadoop/tempDatas2mkdir -p /hadoop/datadir/hadoop/namenodeDatas3mkdir -p /hadoop/datadir/hadoop/datanodeDatas4mkdir -p /hadoop/datadir/hadoop/dfs/nn/edits5mkdir -p /hadoop/datadir/hadoop/dfs/snn/name6mkdir -p /hadoop/datadir/hadoop/dfs/nn/snn/edits7mkdir -p /hadoop/datadir/hadoop/yarn/local8mkdir -p /hadoop/datadir/hadoop/journal
注意:有的同学这块没有注意到上边提到的hadoop
用户的读写权限,或者用了root创建,导致目录无法写入的异常。该路径一定要属于hadoop
用户!!!
这一步直接关机完整克隆就好了
注意:有的同学复制镜像的同时把虚拟机的mac地址也复制了,这样将会导致其他两台启动后无法使用,若mac地址相同, 那么重新生成一个mac地址。
参考配置网卡及主机名
启动每一台虚拟机!
Linux免密登录,本质上是使用了公钥登录
。原理很简单,就是用户将自己的公钥
储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥
加密后,再发回来。远程主机用事先储存的公钥
进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
注意:免密登录是针对每一个不同用户的,所以我们一定要在hadoop
用户下执行。以下命令要在每一台机器上都执行~~~
1## 生成密钥2## 期间需要输入几次回车,直接回车即可3ssh-keygen -t rsa4
5## 发送自己的公钥到每一台机器上,包括自己本身6## 由于每条命令都需要输入对方的密码,所以要一条一条的执行!!!7ssh-copy-id -i ~/.ssh/id_rsa.pub node018ssh-copy-id -i ~/.ssh/id_rsa.pub node029ssh-copy-id -i ~/.ssh/id_rsa.pub node03
注意:一定要验证是否成功,在每台机器上相互ssh
不需要密码就能登录,那么就说明免密登录配置成功!!!
1ssh node01
注意:在启动前,我们要把刚刚的zookeeper配置中myid更改一下,才可以启动!!!
不同的机器对应不同的myid,从下边配置中获取,node01对应1,以此类推。
1server.1=node01:2888:38882server.2=node02:2888:38883server.3=node03:2888:3888
1# 启动zk2# 在每一台机器上执行3/hadoop/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh start4# 检查状态5/hadoop/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh status
1#!/bin/bash --login2
3zookeeper=$14path=$25command=$36
7A=start status stop8
9start(){10 echo "$1 zookeeper on $2"11 ssh -l hadoop $2 "$3 $1"12}13
14if [ "$zookeeper" == "" ] || [ "$command" == "" ];then15 echo "usage:'node01 node02 node03' ./zkServer.sh [start status stop]"16 exit 017fi18
19# 判断是否为支持的命令20for c in $A21do22 if [ "$command" != "$c" ];then23 echo "当前只支持:[start status stop]命令"24 exit 025 fi26done27
28if [ "$command" != "" ];then29 for zk in $zookeeper30 do31 start $command $zk $path32 done33 else34 echo "请输入正确命令"35 echo "'node01 node02 node03' ./zkServer.sh [start status stop]"36fi
启动只需要在主节点执行脚本即可!!!
1./zkcluster_run.sh 'node01 node02 node03' /hadoop/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh start
初始化的目的就是为了hdfs的元数据信息的初始化。
注意: NameNode格式化只能在node01执行一次,不然会导致集群启动失败,!!!!
命令
1hdfs namenode -format
成功的标志:
119/08/23 04:32:34 INFO namenode.NameNode: STARTUP_MSG: 2/************************************************************3STARTUP_MSG: Starting NameNode4STARTUP_MSG: user = hadoop5STARTUP_MSG: host = ......6STARTUP_MSG: args = [-format]7STARTUP_MSG: version = 2.6.0-cdh5.14.28#显示格式化成功。。。9cdh5.14.2/hadoopDatas/namenodeDatas has been successfully formatted.1019/08/23 04:32:35 INFO common.Storage: Storage directory /hadoop/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/edits has been successfully formatted.1119/08/23 04:32:35 INFO namenode.FSImageFormatProtobuf: Saving image file /hadoop/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatas/current/fsimage.ckpt_0000000000000000000 using no compression1219/08/23 04:32:35 INFO namenode.FSImageFormatProtobuf: Image file /hadoop/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatas/current/fsimage.ckpt_0000000000000000000 of size 323 bytes saved in 0 seconds.1319/08/23 04:32:35 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 01419/08/23 04:32:35 INFO util.ExitUtil: Exiting with status 01519/08/23 04:32:35 INFO namenode.NameNode: SHUTDOWN_MSG:16#此处省略部分日志17/************************************************************18SHUTDOWN_MSG: Shutting down NameNode at .....19************************************************************/
在master的NameNode启动之后,我们进行对NameNode的数据同步 在standby-master(也就是我们node02)输入以下命令,输出的日志和上边的相仿
1hdfs namenode -bootstrapStandby
如上步骤都顺利的话接下来就可以启动集群了!
两种方式~
1start-all.sh2# 不过这种方式官方已经不在推荐了
可以使用如下启动
1# 启动hdfs2start-dfs.sh3# 启动yarn4start-yarn.sh
node01大概长这样,其他两台节点参考集群规划,部署了的那么一定存在进程,若不存在进程,那么需要查看日志解决问题~
112707 DFSZKFailoverController212820 ResourceManager312327 DataNode412521 JournalNode512220 NameNode612941 NodeManager71578 QuorumPeerMain # zookeeper进程,其余全都是hadoop进程
启动完成后可以通过webUI查看集群的信息,打开下边链接即可查看!!
两个节点都可以查看,要确保一个为active,另一个为standby的状态!
若不小心在每台机器上都执行了hdfs namenode -format
,此时每台节点的集群id将会不一致会导致其他机器无法加入集群!
解决办法:清空创建的每一个数据目录!重新执行hdfs namenode -format
即可!切记!!!只在node01上执行,执行完后要在node02同步
12019-09-30 18:15:49,231 FATAL org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManager2org.apache.hadoop.HadoopIllegalArgumentException: Configuration doesn't specify yarn.resourcemanager.cluster-id3 at org.apache.hadoop.yarn.conf.YarnConfiguration.getClusterId(YarnConfiguration.java:1785)4 at org.apache.hadoop.yarn.server.resourcemanager.EmbeddedElectorService.serviceInit(EmbeddedElectorService.java:82)5 at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)6 at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107)7 at org.apache.hadoop.yarn.server.resourcemanager.AdminService.serviceInit(AdminService.java:145)8 at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)9 at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107)10 at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:276)11 at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)12 at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1309)
解决办法:在yarn-site.xml中配置一个id,如下。
1<property>2 <name>yarn.resourcemanager.cluster-id</name>3 <value>cluster1</value>4</property>
12019-09-30 18:15:45,010 FATAL org.apache.hadoop.hdfs.tools.DFSZKFailoverController: Got a fatal error, exiting now2java.lang.IllegalArgumentException: Missing required configuration 'ha.zookeeper.quorum' for ZooKeeper quorum3 at com.google.common.base.Preconditions.checkArgument(Preconditions.java:115)4 at org.apache.hadoop.ha.ZKFailoverController.initZK(ZKFailoverController.java:340)5 at org.apache.hadoop.ha.ZKFailoverController.doRun(ZKFailoverController.java:190)6 at org.apache.hadoop.ha.ZKFailoverController.access$000(ZKFailoverController.java:60)7 at org.apache.hadoop.ha.ZKFailoverController$1.run(ZKFailoverController.java:171)8 at org.apache.hadoop.ha.ZKFailoverController$1.run(ZKFailoverController.java:167)9 at org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:444)10 at org.apache.hadoop.ha.ZKFailoverController.run(ZKFailoverController.java:167)11 at org.apache.hadoop.hdfs.tools.DFSZKFailoverController.main(DFSZKFailoverController.java:192)
解决办法:
1<!--zookeeper配置,hadoop依赖zk进行选主-->2<property>3 <name>ha.zookeeper.quorum</name>4 <value>node01:2181,node02:2181,node03:2181</value>5</property>
注意: 同步需要在root用户下。
12019-09-30 15:42:05,418 FATAL org.apache.hadoop.ha.ZKFailoverController: Unable to start failover controller. Parent znode does not exist.2Run with -formatZK flag to initialize ZooKeeper.
解决办法: 此刻以为这你的hadoop节点还没有注册到zookeeper中,需要初始化。
1# 执行命令进行初始化2hdfs zkfc -formatZK
重新起动集群即可。