一、搭建集群[hdfs/yarn]
1、规划
1.1 基本配置
java14 | java15 | java16 |
---|
192.168.17.100 | 192.168.17.101 | 192.168.17.102 |
1 core | 1 core | 1 core |
2G | 1G | 1.5G |
20G | 20G | 20G |
1.2 角色分配
java14 | java15 | java16 |
---|
NameNode | | |
DataNode | DataNode | DataNode |
| SecondaryNameNode | |
| | ResourceManager |
NodeManager | NodeManager | NodeManager |
| | 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
</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