文章目录
1.规划&环境准备
1.1 软件准备
组件名 | 版本 | 百度网盘 |
---|---|---|
Centos服务器 3台 | 7.6 64位 | https://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h |
Jdk | jdk-8u45-linux-x64.gz | https://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h |
Hadoop | hadoop-2.6.0-cdh5.15.1.tar.gz | https://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h |
Zookeeper | zookeeper-3.4.6.tar.gz | https://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h |
1.2 主机规划
笔者这里购买了3台阿里云按量服务器作为实验环境,可以根据自己实际情况来选择
三台机器[ruozedata001,ruozedata002,ruozedata003]规划如下:
IP | HOST | 安装软件 | 进程 |
---|---|---|---|
172.24.102.253 | ruozedata001 | Hadoop Zookeepr | NameNode DFSZKFailoverController JournalNode DataNode ResourceManager JobHistoryServer NodeManager QuorumPeerMain |
172.24.102.255 | ruozedata002 | Hadoop Zookeepr | NameNode DFSZKFailoverController JournalNode DataNode ResourceManager NodeManager QuorumPeerMain |
172.24.102.254 | ruozedata003 | Hadoop Zookeepr | JournalNode DataNode NodeManager QuorumPeerMain |
2.安装前准备
2.1 添加hadoop用户并创建目录
ruozedata001/ruozedata002/ruozedata003 三台机器均做以下操作:
2.1.1 添加hadoop用户
[root@ruozedata001 ~]# useradd hadoop
2.2.2 创建目录
# 切换至hadoop用户
[root@ruozedata001 ~]# su - hadoop
# 创建目录
[hadoop@ruozedata001 ~]$ mkdir app software source lib data script tmp
目录名称 | 说明 |
---|---|
app | 组件安装目录 |
software | 组件安装包 |
source | 源码包 |
lib | 开发的jar包 |
data | 数据目录 |
script | shell脚本 |
tmp | 临时目录 |
2.2.3 配置Hosts使ip与hostname绑定
/etc/hosts 配置的是内网ip
而不是外网ip
[root@ruozedata001 ~]# vi /etc/hosts
# 这里修改为自己机器的ip
172.24.102.253 ruozedata001
172.24.102.255 ruozedata002
172.24.102.254 ruozedata003
2.2.4 安装rz和sz命令
使用lrzsz软件包能够让我们非常方便的往服务器上传和下载文件
# 安装 这里切换root用户来安装软件
[root@ruozedata001 ~]# yum -y install lrzsz
# 上传文件,执行命令rz,会跳出文件选择窗口,选择好文件,点击确认即可。
[root@ruozedata001 ~]# rz
# 下载文件,执行命令sz
[root@ruozedata001 ~]# sz
2.2.5 配置Hadoop的SSH互信
参考hadoop官网ssh配置 (这个是参考 主要是注意 authorized_keys 和权限)
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Setup_passphraseless_ssh
# 生成密钥 执行该命令 之后直接点击四次回车
[hadoop@ruozedata001 ~]$ ssh-keygen
[hadoop@ruozedata001 ~]$ cd ~/.ssh
# 能够看到生成了公钥
[hadoop@ruozedata001 .ssh]$ ls
id_rsa id_rsa.pub
三台机器均执行该操作,分别生成密钥
然后将ruozedata002.ruozedata003机器上的 id_rsa.pub下载到本地并重命名为 id_rsa.pub2, id_rsa.pub3然后上传到 ruozedata001 上
# ruozedata002 下载
[hadoop@ruozedata002 .ssh]$ sz id_rsa.pub
# ruozedata003 下载
[hadoop@ruozedata003 .ssh]$ sz id_rsa.pub
# 上传到ruozedata001
[hadoop@ruozedata001 .ssh]$ rz
# 将密钥保存到authorized_keys
[hadoop@ruozedata001 .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@ruozedata001 .ssh]$ cat id_rsa.pub2 >> authorized_keys
[hadoop@ruozedata001 .ssh]$ cat id_rsa.pub3 >> authorized_keys
[hadoop@ruozedata001 .ssh]$ chmod 0600 ~/.ssh/authorized_keys
然后sz下载ruozedata001 的authorized_keys至本地并rz上传到ruozedata002和ruozedata003并赋予chmod 0600权限
三台机器都执行如下三行命令进行验证
[hadoop@ruozedata001 ~]$ ssh ruozedata001 date
Wed Aug 21 19:14:50 CST 2019
[hadoop@ruozedata001 ~]$ ssh ruozedata002 date
Wed Aug 21 19:14:50 CST 2019
[hadoop@ruozedata001 ~]$ ssh ruozedata003 date
Wed Aug 21 19:14:51 CST 2019
note: ~/.ssh/known_hosts 该文件会记录认证信息,如果其他机器被重新生成过ssh-key,那么需要手动删除掉该文件中历史认证信息
2.2.6 上传需要安装的软件
使用rz命令将Jdk,Hadoop和Zookeeper都上传到ruozedata001然后通过scp复制到其他机器
[hadoop@ruozedata001 ~]$ cd software/
# 上传文件
[hadoop@ruozedata001 software]$ rz
[hadoop@ruozedata001 software]$ scp * ruozedata002:/home/hadoop/software/
[hadoop@ruozedata001 software]$ scp * ruozedata003:/home/hadoop/software/
3 软件安装
3.1 Jdk安装
解压
# 切换root用户
[hadoop@ruozedata001 software]$ exit
[root@ruozedata001 ~]# mkdir /usr/java
[root@ruozedata001 ~]# cd /home/hadoop/software
[root@ruozedata001 software]# tar -zxvf jdk-8u45-linux-x64.gz -C /usr/java
# jdk目录的权限修正,注意用户和用户组,这步很重要
[root@ruozedata001 ~]# chown -R root:root /usr/java/*
配置环境变量
[root@ruozedata001 ~]# vi /etc/profile
# 追加以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH
# 使配置文件生效
[root@ruozedata001 ~]# source /etc/profile
验证
[root@ruozedata001 ~]# which java
# 出现以下输出说明正确安装
/usr/java/jdk1.8.0_45/bin/java
3.2 Zookeeper安装&配置
解压
# 切换hadoop用户
[hadoop@ruozedata001 app]$ su - hadoop
# 解压 -C指定解压位置
[hadoop@ruozedata001 software]$ tar -zxvf zookeeper-3.4.6.tar.gz -C ~/app/
# 最佳实践:使用软连接,在软件版本升级时不用修改环境变量等配置
[hadoop@ruozedata001 app]$ ln -s zookeeper-3.4.6 zookeeper
修改zookeeper配置文件(三台机器均修改)
# 拷贝一份官方示例配置文件zoo_sample.cfg
[hadoop@ruozedata001 conf]$ cp zoo_sample.cfg zoo.cfg
# 编辑zoo.cfg 修改dataDir 并添加server信息
[hadoop@ruozedata001 conf]$ vi zoo.cfg
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# 修改dataDir位置
dataDir=/home/hadoop/data/zookeeper
# 设置三个节点的zookeeper内部通讯端口
server.1=ruozedata001:2888:3888
server.2=ruozedata002:2888:3888
server.3=ruozedata003:2888:3888
# 创建对应目录
[hadoop@ruozedata001 conf]$ mkdir /home/hadoop/data/zookeeper
# 给每台机器上的zookeeper创建唯一标识myid
# !!注意 > 箭头左右有空格
[hadoop@ruozedata001 conf]$ echo 1 > /home/hadoop/data/zookeeper/myid
[hadoop@ruozedata002 conf]$ echo 2 > /home/hadoop/data/zookeeper/myid
[hadoop@ruozedata003 conf]$ echo 3 > /home/hadoop/data/zookeeper/myid
添加环境变量
[hadoop@ruozedata001 ~]$ vi ~/.bash_profile
# 追加ZOOKEEPER_HOME变量
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# 使配置文件生效
[hadoop@ruozedata001 ~]$ source ~/.bash_profile
验证
# 出现以下输出说明正确安装
[hadoop@ruozedata001 ~]$ which zkServer.sh
~/app/zookeeper/bin/zkServer.sh
启动&停止
# 启动
[hadoop@ruozedata001 conf]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# 查看状态
[hadoop@ruozedata001 conf]$ zkServer.sh status
JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
# 停止
[hadoop@ruozedata001 conf]$ zkServer.sh stop
note:ZK启动后,过30s-1min再检查一下status看看是否正在运行,因为可能会出现启动之后就挂的情况
3.3 Hadoop安装&配置
解压
[hadoop@ruozedata001 software]$ tar -zxvf hadoop-2.6.0-cdh5.15.1.tar.gz -C ~/app/
# 软连接
[hadoop@ruozedata001 app]$ ln -s hadoop-2.6.0-cdh5.15.1 hadoop
修改环境变量
[hadoop@ruozedata001 hadoop]$ vi ~/.bash_profile
# 添加HADOOP_HOME变量
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# 使配置文件生效
[hadoop@ruozedata001 hadoop]$ source ~/.bash_profile
修改配置文件
# 修改hadoop-env.sh中的JAVA_HOME
[hadoop@ruozedata001 hadoop]$ vi hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.8.0_40
# 删除 core.site.xml hdfs-site.xml slaves yarn-site.xml mapred-site.xml
[hadoop@ruozedata001 hadoop]$ rm -f core-site.xml hdfs-site.xml slaves yarn-site.xml
这里提供配置文件打包下载: https://pan.baidu.com/s/1ecXacRF7Bg3qTrj-PcYfJQ 提取码: eq22
也可参考以下文件配置
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--Yarn 需要使用 fs.defaultFS 指定NameNode URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ruozeclusterg7</value>
</property>
<!--==============================Trash机制======================================= -->
<property>
<!--多长时间创建CheckPoint NameNode截点上运行的CheckPointer 从Current文件夹创建CheckPoint;默认:0 由fs.trash.interval项指定 -->
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>
<property>
<!--多少分钟.Trash下的CheckPoint目录会被删除,该配置服务器设置优先级大于客户端,默认:0 不删除 -->
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<!--指定hadoop临时目录, hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这>个路径中 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp/hadoop</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
</property>
<!--指定ZooKeeper超时间隔,单位毫秒 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>2000</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
</configuration>
hdfs-side.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--HDFS超级用户 -->
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
<!--开启web hdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/dfs/name</value>
<description> namenode 存放name table(fsimage)本地目录(需要修改)</description>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>${dfs.namenode.name.dir}</value>
<description>namenode粗放 transaction file(edits)本地目录(需要修改)</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/dfs/data</value>
<description>datanode存放block本地目录(需要修改)</description>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 块大小128M (默认128M) -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!--======================================================================= -->
<!--HDFS高可用配置 -->
<!--指定hdfs的nameservice为ruozeclusterg7,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ruozeclusterg7</value>
</property>
<property>
<!--设置NameNode IDs 此版本最大只支持两个NameNode -->
<name>dfs.ha.namenodes.ruozeclusterg7</name>
<value>nn1,nn2</value>
</property>
<!-- Hdfs HA: dfs.namenode.rpc-address.[nameservice ID] rpc 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ruozeclusterg7.nn1</name>
<value>ruozedata001:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ruozeclusterg7.nn2</name>
<value>ruozedata002:8020</value>
</property>
<!-- Hdfs HA: dfs.namenode.http-address.[nameservice ID] http 通信地址 -->
<property>
<name>dfs.namenode.http-address.ruozeclusterg7.nn1</name>
<value>ruozedata001:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.ruozeclusterg7.nn2</name>
<value>ruozedata002:50070</value>
</property>
<!--==================Namenode editlog同步 ============================================ -->
<!--保证数据恢复 -->
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<property>
<!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
<!--格式:qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 端口同journalnode.rpc-address -->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://ruozedata001:8485;ruozedata002:8485;ruozedata003:8485/ruozeclusterg7</value>
</property>
<property>
<!--JournalNode存放数据地址 -->
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/dfs/jn</value>
</property>
<!--==================DataNode editlog同步 ============================================ -->
<property>
<!--DataNode,Client连接Namenode识别选择Active NameNode策略 -->
<!-- 配置失败自动切换实现方式 -->
<name>dfs.client.failover.proxy.provider.ruozeclusterg7</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--==================Namenode fencing:=============================================== -->
<!--Failover后防止停掉的Namenode启动,造成两个服务 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<!--多少milliseconds 认为fencing失败 -->
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!--==================NameNode auto failover base ZKFC and Zookeeper====================== -->
<!--开启基于Zookeeper -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--动态许可datanode连接namenode列表 -->
<property>
<name>dfs.hosts</name>
<value>/home/hadoop/app/hadoop/etc/hadoop/slaves</value>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 配置 MapReduce Applications -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- JobHistory Server ============================================================== -->
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>ruozedata001:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>ruozedata001:19888</value>
</property>
<!-- 配置 Map段输出的压缩,snappy-->
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
</configuration>
yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nodemanager 配置 ================================================= -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.localizer.address</name>
<value>0.0.0.0:23344</value>
<description>Address where the localizer IPC is.</description>
</property>
<property>
<name>yarn.nodemanager.webapp.address</name>
<value>0.0.0.0:23999</value>
<description>NM Webapp address.</description>
</property>
<!-- HA 配置 =============================================================== -->
<!-- Resource Manager Configs -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
<value>true</value>
</property>
<!-- 集群名称,确保HA选举时对应的集群 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--这里RM主备结点需要单独指定,(可选)
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm2</value>
</property>
-->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
</property>
<!-- ZKRMStateStore 配置 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
</property>
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
</property>
<!-- Client访问RM的RPC地址 (applications manager interface) -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>ruozedata001:23140</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>ruozedata002:23140</value>
</property>
<!-- AM访问RM的RPC地址(scheduler interface) -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>ruozedata001:23130</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>ruozedata002:23130</value>
</property>
<!-- RM admin interface -->
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>ruozedata001:23141</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>ruozedata002:23141</value>
</property>
<!--NM访问RM的RPC端口 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>ruozedata001:23125</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>ruozedata002:23125</value>
</property>
<!-- RM web application 地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>ruozedata001:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>ruozedata002:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
<value>ruozedata001:23189</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
<value>ruozedata002:23189</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://ruozedata001:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
<discription>单个任务可申请最少内存,默认1024MB</discription>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<discription>单个任务可申请最大内存,默认8192MB</discription>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
</configuration>
slaves
ruozedata001
ruozedata002
ruozedata003
上传好之后 ll
查看下文件的角色信息 如果不是hadoop用户 修改下
# 上传好之后 ll 查看下文件的角色信息 如果不是hadoop用户 修改下
[root@ruozedata001 ~]$ chown -R hadoop:hadoop /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/etc/hadoop
4.集群启动
note: 第一次启动需要初始化
4.1.启动zookeeper
三台机器均执行启动命令
[hadoop@ruozedata001 ~]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
4.2.启动HDFS
启动之前需要先启动 journalnode
# 三台都要启动JN
[hadoop@ruozedata001 app]$ hadoop-daemon.sh start journalnode
格式化NameNode
note: 只选取一台进行格式化,其他的点只需复制元数据就行
[hadoop@ruozedata001 app]$ hadoop namenode -format
# 将初始化ruozedata001 的namenode元数据同步到其他台机器上 为了让三台元数据保持一致!
[hadoop@ruozedata001 app]$ scp -r /home/hadoop/data/dfs/name ruozedata002:/home/hadoop/data/dfs/
[hadoop@ruozedata001 app]$ scp -r /home/hadoop/data/dfs/name ruozedata003:/home/hadoop/data/dfs/
初始化zkfc
# 一台机器就可以了 zk是个集群 无需别的机器还去做
[hadoop@ruozedata001 app]$ hdfs zkfc -formatZK
启动DFS(注意有坑!)
[hadoop@ruozedata001 app]$ start-dfs.sh
Starting namenodes on [ruozedata001 ruozedata002]
ruozedata002: starting namenode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-namenode-ruozedata002.out
ruozedata001: starting namenode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-namenode-ruozedata001.out
ruozedata003: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-datanode-ruozedata003.out
: Name or service not knownstname cc# 问题点
: Name or service not knownstname ruozedata002 # 问题点
Starting journal nodes [ruozedata001 ruozedata002 ruozedata003]
ruozedata001: journalnode running as process 2428. Stop it first.
ruozedata002: journalnode running as process 2554. Stop it first.
ruozedata003: journalnode running as process 2527. Stop it first.
Starting ZK Failover Controllers on NN hosts [ruozedata001 ruozedata002]
ruozedata001: starting zkfc, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-zkfc-ruozedata001.out
ruozedata002: starting zkfc, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-zkfc-ruozedata002.out
这里ruozedata001和ruozedata002DN001 DN启动报错,dn是slaves 文件控制的 检查这个文件
扩展小知识点:
linux文件的类型分为两种 window的格式/ linux本身的格式
这两种格式再Linux下都可以cat
检查slaves文件
[hadoop@ruozedata001 hadoop]$ cat slaves
ruozedata001
ruozedata002
ruozedata003[hadoop@ruozedata001 hadoop]$ file slaves
slaves: ASCII text, with CRLF line terminators
slaves: ASCII text, with CRLF line terminators说明类型是windows的 需要windows 转换成Linux的
解决
# 安装dos2unix转换工具
[root@ruozedata001 ~]# yum install -y dos2unix
# 查看当前slaves文件格式
[hadoop@ruozedata001 hadoop]$ file slaves
slaves: ASCII text, with CRLF line terminators
# 转换格式
[hadoop@ruozedata001 hadoop]$ dos2unix slaves
dos2unix: converting file slaves to Unix format ...
# 转换ok
[hadoop@ruozedata001 hadoop]$ file slaves
slaves: ASCII text
hadoop@ruozedata001 hadoop]$ pwd
/home/hadoop/app/hadoop/etc/hadoop
# 复制到其他机器
[hadoop@ruozedata001 hadoop]$ scp slaves ruozedata002:/home/hadoop/app/hadoop/etc/hadoop/
slaves 100% 38 0.0KB/s 00:00
[hadoop@ruozedata001 hadoop]$ scp slaves ruozedata003:/home/hadoop/app/hadoop/etc/hadoop/
slaves 100% 38 0.0KB/s 00:00
再次启动DFS集群
[hadoop@ruozedata001 hadoop]$ start-dfs.sh
web页面验证hdfs启动情况,ruozedata001 和ruozedata002应该都可以访问,其中一个为active另一个为standby
访问地址:http://ip:50070/
active
standby
4.3 启动Yarn
[hadoop@ruozedata001 ~]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-resourcemanager-ruozedata001.out
ruozedata002: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-nodemanager-ruozedata002.out
ruozedata003: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-nodemanager-ruozedata003.out
ruozedata001: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-nodemanager-ruozedata001.out
# 第二台的rm是启动不起来,切换ruozedata002手工启动ResourceManager
[hadoop@ruozedata002 ~]$ yarn-daemon.sh start resourcemanager
web页面访问
ResourceManager (active)
访问地址 http://ip:8088
ResourceManager (standby)
访问地址 http://ip:8088/cluster/cluster 注意:standby 的RM节点必须输入完整路径才能访问
Active
Standby
4.4 启动jobhistory
[hadoop@ruozedata001 ~]$ mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/mapred-hadoop-historyserver-ruozedata001.out
4.5 使用jps验证运行情况
ruozedata001
ruozedata002
ruozedata003
5.关闭集群
# 倒着关闭
[hadoop@ruozedata001 ~]$ mr-jobhistory-daemon.sh stop historyserver
[hadoop@ruozedata002 ~]$ yarn-daemon.sh stop resourcemanager
[hadoop@ruozedata001 ~]$ stop-all.sh
[hadoop@ruozedata001 ~]$ zkServer.sh stop
[hadoop@ruozedata002 ~]$ zkServer.sh stop
[hadoop@ruozedata003 ~]$ zkServer.sh stop