微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hadoop集群搭建

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

防挖矿配置2.jpg

防挖矿配置3.jpg

防挖矿配置4.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 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐