1.组件版本
组件名 | 版本 | 备注 |
---|---|---|
Centos | 7.2 64-bit | lsb_release -a 命令查看操作系统版本 file /bin/ls 命令查看操作系统位数 |
Jdk | jdk-8u45-linux-x64.gz | |
Hadoop | hadoop-2.6.0-cdh5.15.1.tar.gz | |
Zookeeper | zookeeper-3.4.6.tar.gz |
2.组件安装与配置
2.1.添加hadoop用户并创建目录
以ruozedata001机器为示例,ruozedata002/ruozedata003两台操作一致
2.1.1.添加hadoop用户
# 添加hadoop用户
[root@ruozedata001 ~]# useradd hadoop
2.1.2.创建目录
# 切换至hadoop用户
[root@ruozedata001 ~]# su - hadoop
[hadoop@ruozedata001 ~]$ mkdir app software source lib data script tmp maven_repos
目录说明
目录名称 | 说明 |
---|---|
app | 组件安装目录 |
software | 组件安装包 |
source | 源码包 |
lib | 开发的jar包 |
data | 数据目录 |
script | shell脚本 |
tmp | 临时目录 |
maven_repos | maven仓库 |
2.2.ip与hostname绑定
⚠️ /etc/hosts 配置的是内网ip而不是外网ip
Ruozedata002/ruozedata003 操作同ruozedata001
[root@ruozedata001 ~]# vi /etc/hosts
# 切记 勿删该文件原信息!!!
# ip与hostname绑定
172.19.6.116 ruozedata001
172.19.6.115 ruozedata002
172.19.6.117 ruozedata003
2.3.hadoop的ssh互相信任
2.3.1生成密钥
# 生成密钥 执行该命令 之后直接点击四次回车
[hadoop@ruozedata001 ~]$ ssh-keygen
# 进入.ssh文件夹即可看到公钥+私钥
[hadoop@ruozedata001 ~]$ cd .ssh
[hadoop@ruozedata001 .ssh]$ ls
id_rsa id_rsa.pub
# ruozedata002/ruozedata003 两台机器操作同上
2.3.2.配置ssh信任
- 配置
选取其中一台作为主节点进行配置,当前选择ruozedata001
[hadoop@ruozedata001 .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后将ruozedata002/ruozedata003节点的id_rsa.pub文件中的密钥追加到ruozedata001 authorized_keys中
追加要注意换行符问题,切忌直接在集群上复制粘贴,容易出问题
当前使用方法如下:
1.将ruozedata002/ruozedata003的id_rsa.pub下载到桌面
2.将ruozedata002/ruozedata003的id_rsa.pub上传至ruozedata001
3.用命令将ruozedata002/ruozedata003的id_rsa.pub内容追加至ruozedata001的authorized_keys文件中
[hadoop@ruozedata001 .ssh]$ cat id_rsa.pub2 >> authorized_keys
[hadoop@ruozedata001 .ssh]$ cat id_rsa.pub3 >> authorized_keys
4.将ruozedata001的authorized_keys文件下载至桌面,再分别上传至ruozedata002/ruozedata003
- 验证
三台机器都需要执行如下命令:
ssh ruozedata001 date
ssh ruozedata002 date
ssh ruozedata003 date
# 验证ruozedata001
[hadoop@ruozedata001 .ssh]$ ssh ruozedata001 date
The authenticity of host 'ruozedata001 (172.19.6.116)' can't be established.
ECDSA key fingerprint is e3:90:99:35:34:92:d5:55:18:5e:fa:7b:1b:48:24:8e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ruozedata001,172.19.6.116' (ECDSA) to the list of known hosts.
hadoop@ruozedata001's password:
# 如果有以上提示 要求输入密码 就说明有问题
# 需要执行下 chmod 600 ~/.ssh/authorized_keys 命令 给文件赋权
[hadoop@ruozedata001 .ssh]$ chmod 600 ~/.ssh/authorized_keys
# 再执行下如下命令 出现时间即表示成功
[hadoop@ruozedata001 .ssh]$ ssh ruozedata001 date
Mon Aug 19 21:06:00 CST 2019
[hadoop@ruozedata001 .ssh]$ ssh ruozedata002 date
Mon Aug 19 21:08:25 CST 2019
[hadoop@ruozedata001 .ssh]$ ssh ruozedata003 date
Mon Aug 19 21:09:25 CST 2019
# 第一次执行都需要输入yes
ruozedata002/ruozedata003 机器验证步骤同上
⚠️ ~/.ssh/known_hosts 该文件会记录认证信息,如果其他机器被重新生成过ssh-key,那么需要手动删除掉该文件中历史认证信息
2.4.上传组件
2.4.1.安装rz sc
# 查看是否已经存在rz
[hadoop@ruozedata001 ~]$ which rz
/usr/bin/which: no rz in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin)
# 以上信息显示是不存在 需要手动安装
# 退出到root用户
[hadoop@ruozedata001 ~]$ exit
# 安装rz sz
[root@ruozedata001 ~]# yum install -y lrzsz
2.4.2.上传
[root@ruozedata001 ~]$ su - hadoop
[hadoop@ruozedata001 ~]$ cd software/
[hadoop@ruozedata001 software]$ rz
# 选择上传文件即可
# 此时hadoop的ssh信任关系已经配置好了 所以其他两台直接从该机器scp过去就行了
[hadoop@ruozedata001 software]$ scp * ruozedata002:/home/hadoop/software/
[hadoop@ruozedata001 software]$ scp * ruozedata003:/home/hadoop/software/
改变指定文件的所有者 赋予指定文件给hadoop这个用户权限
chown -R hadoop:hadoop 文件名
2.5.安装组件
2.5.1.JDK
⚠️ 生产java,必须安装至/usr/java路径下
- 解压
[root@ruozedata001 ~]# mkdir /usr/java
[root@ruozedata001 ~]# cd /home/hadoop/software
[root@ruozedata001 software]# tar -zxvf jdk-8u40-linux-x64.gz -C /usr/java
- 配置环境变量
# 配置环境变量
[root@ruozedata001 ~]# vi /etc/profile
# jdk配置
export JAVA_HOME=/usr/java/jdk1.8.0_40
export PATH=$JAVA_HOME/bin:$PATH
[root@ruozedata001 ~]# source /etc/profile
- 验证
# 验证
[root@ruozedata001 ~]# which java
/usr/java/jdk1.8.0_40/bin/java
# 或者
[root@ruozedata001 software]# java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
- jdk解压目录的权限修正
[root@ruozedata001 software]# cd /usr/java
[root@ruozedata001 java]# ll
总用量 4
drwxr-xr-x 8 10 143 4096 2月 11 2015 jdk1.8.0_40
[root@ruozedata001 java]# chown -R root:root /usr/java/*
[root@ruozedata001 java]# ll
总用量 4
drwxr-xr-x 8 root root 4096 2月 11 2015 jdk1.8.0_40
2.5.2.Zookeeper
- 解压
# 解压
[hadoop@ruozedata001 software]$ tar -zxvf zookeeper-3.4.6.tar.gz -C ~/app/
# 软连接 便于更换版本
[hadoop@ruozedata001 app]$ ln -s zookeeper-3.4.6 zookeeper
- 修改配置文件
# 拷贝一份zoo_sample.cfg
[hadoop@ruozedata001 conf]$ cp zoo_sample.cfg zoo.cfg
[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=/home/hadoop/data/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
⚠️ 切记给每台机器上的zookeeper创建唯一标识的时候 > 左右都需要空格
- 配置环境变量
[hadoop@ruozedata001 ~]$ vi ~/.bash_profile
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
Mode: follower
# 查看状态
[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
⚠️ 经验:一般zk启动过后,再观察30s-1min,因为可能会出现启动之后就挂的情况
2.5.3.Hadoop
- 解压
# 解压至app目录
[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-env.sh
[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
# 上传好之后 ll 查看下文件的角色信息 如果不是hadoop用户 修改下
[root@ruozedata001 ~]$ chown -R hadoop:hadoop /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/etc/hadoop
- 配置环境变量
[hadoop@ruozedata001 hadoop]$ vi ~/.bash_profile
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
[hadoop@ruozedata001 hadoop]$ source ~/.bash_profile
3.启动集群
⚠️ 第一次启动需要初始化
3.1.启动zookeeper
参考 2.5.2.Zookeeper 启动步骤
3.2.启动HDFS
- 启动之前需要先启动 journalnode
# 启动journalnode
[hadoop@ruozedata001 app]$ hadoop-daemon.sh start journalnode
# jps查看下启动情况
[hadoop@ruozedata001 app]$ jps
2288 QuorumPeerMain
2428 JournalNode
2477 Jps
# 出现JournalNode即表示启动成功
- 格式化NameNode
⚠️ 只能选取其中一台进行格式化
[hadoop@ruozedata001 app]$ hadoop namenode -format
# 打印日志中出现一下文字即表示初始化成功
......
...successfully formatted.
......
# 将初始化的namenode信息同步到第二台机器上 为了让两台namenode信息保持一致!!!
[hadoop@ruozedata001 app]$ scp -r /home/hadoop/data/dfs/name ruozedata002:/home/hadoop/data/dfs/
- 初始化ZKFC
初始化ZKFC只需要选择一台机器即可,因为zk是集群,选择一台建立hdfs zk之间的关联关系就行了
[hadoop@ruozedata001 app]$ hdfs zkfc -formatZK
19/08/20 20:03:05 INFO ha.ActiveStandbyElector: Session connected.
19/08/20 20:03:05 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ruozeclusterg7 in ZK.
19/08/20 20:03:05 INFO zookeeper.ZooKeeper: Session: 0x26caecf395a0000 closed
19/08/20 20:03:05 INFO zookeeper.ClientCnxn: EventThread shut down
19/08/20 20:03:05 INFO tools.DFSZKFailoverController: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DFSZKFailoverController at ruozedata001/172.19.6.116
************************************************************/
# 出现以上信息即表示初始化成功
- 启动HDFS(⚠️ 此处会有问题!!!)
# 此时启动会出现问题
[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 ruozedata001 # 问题点
: 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
# 且jps查看没有datanode
[hadoop@ruozedata001 app]$ jps
2288 QuorumPeerMain
3078 Jps
2697 NameNode
2428 JournalNode
3007 DFSZKFailoverController
# 此时需要查看 /home/hadoop/app/hadoop/etc/hadoop/slaves
[hadoop@ruozedata001 hadoop]$ cat slaves
ruozedata001
ruozedata002
ruozedata003
# 文件内容正常
# 查看文件编码格式
[hadoop@ruozedata001 hadoop]$ file slaves
slaves: ASCII text, with CRLF line terminators
# 问题点就在这了 编码格式问题 需要修改下文件的格式
# 到root用户下 修改slaves格式 首先要安装下 dos2unix
[root@ruozedata001 ~]$ yum install -y dos2unix
[hadoop@ruozedata001 hadoop]$ dos2unix slaves
dos2unix: converting file slaves to Unix format ...
# 在查看下文件格式
[hadoop@ruozedata001 hadoop]$ file slaves
slaves: ASCII text
# 将修改后的文件传输到另两台机器
[hadoop@ruozedata001 hadoop]$ scp slaves ruozedata002:/home/hadoop/app/hadoop/etc/hadoop/
# 解决过后再重新启动下
[hadoop@ruozedata001 app]$ start-dfs.sh
Starting namenodes on [ruozedata001 ruozedata002]
ruozedata002: namenode running as process 2675. Stop it first. # 此处表示namenode已经启动过了
ruozedata001: namenode running as process 2697. Stop it first. # 此处表示namenode已经启动过了
ruozedata002: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-datanode-ruozedata002.out # 启动datanode
ruozedata001: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-datanode-ruozedata001.out # 启动datanode
ruozedata003: datanode running as process 2629. Stop it first. # 此处表示datanode已经启动过了
Starting journal nodes [ruozedata001 ruozedata002 ruozedata003]
ruozedata001: journalnode running as process 2428. Stop it first. # 此处表示journalnode已经启动过了
ruozedata003: journalnode running as process 2527. Stop it first. # 此处表示journalnode已经启动过了
ruozedata002: journalnode running as process 2554. Stop it first. # 此处表示journalnode已经启动过了
Starting ZK Failover Controllers on NN hosts [ruozedata001 ruozedata002]
ruozedata001: zkfc running as process 3007. Stop it first. # 此处表示zkfc已经启动过了
ruozedata002: zkfc running as process 2798. Stop it first. # 此处表示zkfc已经启动过了
# 此时再验证下
[hadoop@ruozedata001 hadoop]$ jps
2288 QuorumPeerMain
3650 Jps
2697 NameNode
3354 DataNode
2428 JournalNode
3007 DFSZKFailoverController
- 单个进程启动
# namenode datanode journalnode zkfc
[hadoop@ruozedata001 hadoop]$ hadoop-daemon.sh start namenode
- 防止被挖矿设置
按照图片顺序设置
防挖矿配置1.jpg
![](https://img.haomeiwen.com/i5791732/57843566cd18ccb6.jpg)
![](https://img.haomeiwen.com/i5791732/434fceea47feb86d.jpg)
![](https://img.haomeiwen.com/i5791732/3c2439a526b9065f.jpg)
- web页面验证hdfs启动情况
访问地址:http://ip:50070/
3.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
# 验证 ruozedata001
[hadoop@ruozedata001 ~]$ jps
4064 NodeManager # 启动成功
2288 QuorumPeerMain
2697 NameNode
3354 DataNode
3962 ResourceManager # 启动成功
2428 JournalNode
4365 Jps
3007 DFSZKFailoverController
# ruozedata002 发现该节点ResourceManager 没有启动起来 需要手工启动
[hadoop@ruozedata002 hadoop]$ jps
3858 NodeManager
2675 NameNode
3987 Jps
3124 DataNode
2554 JournalNode
2798 DFSZKFailoverController
2430 QuorumPeerMain
# 手工启动
[hadoop@ruozedata002 hadoop]$ yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-resourcemanager-ruozedata002.out
# 验证手工启动结果
[hadoop@ruozedata002 hadoop]$ jps
3858 NodeManager
2675 NameNode
3124 DataNode
4101 Jps
4038 ResourceManager # 启动成功
2554 JournalNode
2798 DFSZKFailoverController
2430 QuorumPeerMain
- web页面访问
ResourceManager (active) 那台机器直接就是 ip:8088
⚠️ResourceManager (standby) 则需要 ip:8088/cluster/cluster 才能访问
3.4.启动jobhistory
作用:作业的历史记录查看
# 在001机器启动
[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
# 验证
[hadoop@ruozedata001 ~]$ jps
4064 NodeManager
2288 QuorumPeerMain
4530 Jps
2697 NameNode
3354 DataNode
3962 ResourceManager
2428 JournalNode
4463 JobHistoryServer # 启动成功
3007 DFSZKFailoverController
web页面访问:ip:19888
4.关闭集群
关闭顺序是跟启动顺序反着的
[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
网友评论