hadoop集群和HA搭建

一、搭建集群[hdfs/yarn]

1、规划

1.1 基本配置
java14java15java16
192.168.17.100192.168.17.101192.168.17.102
1 core1 core1 core
2G1G1.5G
20G20G20G
1.2 角色分配
java14java15java16
NameNode
DataNodeDataNodeDataNode
SecondaryNameNode
ResourceManager
NodeManagerNodeManagerNodeManager
HistoryServer

2、 环境准备

2.1 克隆主机
2.2 修改各自主机名和IP地址
2.3 创建普通用户,名称和密码与第一台保持一致[jerry:123456]
2.4 实现通过主机名互访
2.5 关闭防火墙

3、时间同步

a.互联网中的服务器进行时间同步
[root@java16 jerry]# ntpdate cn.pool.ntp.org

b.在集群中确定一台,然后其他服务器与这台进行时间同步【推荐】

[三台服务器]
#date -R --检查当前系统的时区
[root@java14 ~]# date -R

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3.1 选择java14作为时间服务器,那么需要在该机器中安装ntp服务器软件
        [root@java14 ~]# rpm -qa | grep ntp
3.2 修改ntp服务器的配置
[root@java14 ~]# vi /etc/ntp.conf 

* 1.1)文件中添加如下内容
restrict [本地的NAT子网IP] mask 255.255.255.0 nomodify notrap

* 1.2)注释以下三行内容
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
* 1.3)去掉这个两行前面的#
server  127.127.1.0 # local clock
fudge   127.127.1.0 stratum 10
3.3 配置如下内容,保证BIOS与系统时间同步
## 查看/etc/sysconfig/ntpd内容
[hadoop@hadoop-master opt]$ cat /etc/sysconfig/ntpd    
SYNC_HWCLOCK=yes ##添加的内容
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
3.4 启动java14中的时间服务器
[root@java14 ~]# service ntpd start
Starting ntpd: 
##查看状态
[root@java14 ~]# service ntpd status
ntpd (pid  1972) is running...
3.5 在java15和java16中通过ntpdate命令与java14进行定时同步
##添加定时任务
敲命令crontab -e
*/10 * * * * /usr/sbin/ntpdate java14.zhanghao.com 

4、部署分布式

4.1 将搭建的伪分布式中的数据清空
    data:目录中的数据全部清空
    logs:日志文件清空
    share/hadoop:帮助文档删除
4.2 配置HDFS集群
a)配置NameNode地址:core-site.xml文件中
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://java14.zhanghao.com:8020</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/modules/hadoop-2.5.0/data</value>
    </property> 

b) 配置DataNode地址:slaves
    java14.zhanghao.com
    java15.zhanghao.com
    java16.zhanghao.com

c) 配置SecondaryNameNode地址:在hdfs-site.xml文件中配置
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>java15.zhanghao.com:50090</value>
    </property>

e)将配置好的文件分发到其他服务器中
[jerry@java14 modules]$ scp -r hadoop-2.5.0/ java15:/opt/modules/

f) 启动HDFS文件
    格式化:[jerry@java14 hadoop-2.5.0]$ ./bin/hdfs namenode -format

    [jerry@java14 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start namenode
    [jerry@java14 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start datanode

    [jerry@java15 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start datanode
    [jerry@java15 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start secondarynamenode

    [jerry@java16 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start datanode

 测试:
    [jerry@java16 hadoop-2.5.0]$ ./bin/hdfs  dfs -put hadoop-2.5.0.tar.gz  /hadoop-2.5.0.tar.gz
4.3 搭建YARN平台
a) 在yarn-site.xml文件中添加配置,指定resourcemanager运行的服务器地址
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>java16.zhanghao.com</value>
</property>

b) 配置historyserver,在mapred-site.xml文件中配置
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>java16.zhanghao.com:10020</value>
</property>

<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>java16.zhanghao.com:19888</value>
</property>


c) 将修改后的配置文件分发到其他服务器中
[jerry@java14 hadoop-2.5.0]$ scp -r etc/hadoop/yarn-site.xml java15:/opt/modules/hadoop-2.5.0/etc/hadoop/
[jerry@java14 hadoop-2.5.0]$ scp -r etc/hadoop/mapred-site.xml java15:/opt/modules/hadoop-2.5.0/etc/hadoop/

[jerry@java14 hadoop-2.5.0]$ scp -r etc/hadoop/yarn-site.xml java16:/opt/modules/hadoop-2.5.0/etc/hadoop/ 

[jerry@java14 hadoop-2.5.0]$ scp -r etc/hadoop/mapred-site.xml java16:/opt/modules/hadoop-2.5.0/etc/hadoop/


c) 启动服务器
[jerry@java14 hadoop-2.5.0]$ ./sbin/yarn-daemon.sh start nodemanager

[jerry@java15 hadoop-2.5.0]$ ./sbin/yarn-daemon.sh start nodemanager

[jerry@java16 hadoop-2.5.0]$ ./sbin/yarn-daemon.sh start resourcemanager

[jerry@java16 hadoop-2.5.0]$ ./sbin/mr-jobhistory-daemon.sh start historyserver


各个服务器启动的进程有:
[jerry@java14 hadoop-2.5.0]$ jps
4799 NodeManager
3796 DataNode
3709 NameNode
4821 Jps

[jerry@java15 hadoop-2.5.0]$ jps
6555 NodeManager
6711 Jps
5452 DataNode
5560 SecondaryNameNode

[jerry@java16 hadoop-2.5.0]$ jps
5918 DataNode
7652 Jps
7210 ResourceManager
7466 NodeManager
7615 JobHistoryServer

二、HDFS的HA方案[High Availability]

通过备份实现HA
a.冷备份:手动切换
b.热备份:自动切换

High Availability With QJM:通过日志服务实现
High Availability With NFS:通过网络文件实现
1) hdfs-site.xml 
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>
    </property>

    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>
    </property>

    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>java14.zhanghao.com:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>java15.zhanghao.com:8020</value>
    </property>

    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>java14.zhanghao.com:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>java15.zhanghao.com:50070</value>
    </property>

    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://java14.zhanghao.com:8485;java15.zhanghao.com:8485;java16.zhanghao.com:8485/mycluster</value>
    </property>

    ##通过代理访问active状态的namenode
    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    ##两个namenode之间的隔离
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>

    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/jerry/.ssh/id_rsa</value>
    </property>

2) core-site.xml文件
    ##访问入口
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>

    ##journalnode数据存储的位置
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/opt/modules/hadoop-2.5.0/data/jn</value>
    </property>


3) 将java14修改的配置文件分发到 java15,java16对应目录中
    [jerry@java14 hadoop-2.5.0]$ scp -r etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml java15:/opt/modules/hadoop-2.5.0/etc/hadoop/

    [jerry@java14 hadoop-2.5.0]$ scp -r etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml java16:/opt/modules/hadoop-2.5.0/etc/hadoop/

4) 启动
step1:分别在java14,java15,java16服务器上启动journalnode进程
    [jerry@java14 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start journalnode
    [jerry@java15 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start journalnode
    [jerry@java16 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start journalnode

Step2:在[nn1]上,对其进行格式化,并启动:
    [jerry@java14 hadoop-2.5.0]$ ./bin/hdfs namenode -format
    [jerry@java14 hadoop-2.5.0]$ ./sbin/hadoop-daemon.sh start namenode

Step3:在[nn2]上,同步nn1的元数据信息:
    $ ./bin/hdfs namenode -bootstrapStandby

Step4:启动[nn2]:
    $ ./sbin/hadoop-daemon.sh start namenode
Step5:将[nn1]切换为Active
    $ ./bin/hdfs haadmin -transitionToActive nn1
Step6:在[nn1]上,启动所有datanode
    $ ./sbin/hadoop-daemons.sh start datanode

补充:实现SSh协议的免秘钥登录过程
http://blog.youkuaiyun.com/gsnumen/article/details/7293266[参考]

[jerry@java14 hadoop-2.5.0]$ ssh java15
jerry@java15's password: 
Last login:  2017 from java14.zhanghao.com
[jerry@java15 ~]$ ls

1.生成公钥私钥对
[jerry@java14 hadoop-2.5.0]$ ssh-keygen -t rsa

2.拷贝公钥给对方
[jerry@java14 .ssh]$ ssh-copy-id jerry@java15

在java14-》java14,java14-》java15、java14-》java16实现免秘钥验证
[jerry@java14 .ssh]$ ssh-copy-id jerry@java14
[jerry@java14 .ssh]$ ssh-copy-id jerry@java15
[jerry@java14 .ssh]$ ssh-copy-id jerry@java16  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值