学习笔记_Hadoop完全分布式搭建

集群规划

主机 master slave01 slave02
hdfs NameNode - SecondaryNameNode
DataNode DataNode DataNode
historyserver - -
yarn - - ResourceManager
NodeManager NodeManager NodeManager

环境准备

三台已配置过环境的主机

  • 我这里三台主机分别命名为master、slave01和slave02
  • 普通用户名hadoop,密码相同(方便以后操作)
  • 网络环境与java环境都已设置好
  • 设置主机名与ip映射,每台主机都需要设置所有三台主机的主机名与ip映射
# vi /etc/hosts

这里写图片描述

配置NTP时间服务器

  • 把master这台服务器配置为时间服务器,然后集群内其他服务器都来同步这台服务器的时间
  • 目的: 集群内部所有服务器时间一致

1.调整时间(三台)

  • 检查当前系统时区
# date -R
  • 修改时区(如果最后一位不是+0800)
# rm -rf /etc/localtime
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

master

1.同步时间

  • 关闭ntpd进程
# service ntpd stop
  • 同步当前服务器时间
# ntpdate cn.pool.ntp.org

2.检查软件包

  • 查看ntp软件包是否已安装
    ntp-4.2.4p8-3.el6.centos.x86_64
# rpm -qa | grep ntp
  • 安装ntp软件包(如果没有安装)
# yum -y install ntp

3.修改ntp配置文件

# vi /etc/ntp.conf
  • 去掉下面这行前的#,并将网段修改为自己的网段
restrict 192.168.93.0 mask 255.255.255.0 nomodify notrap
  • 注释掉以下几行
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
  • 去掉下面几行前的#,如果文件中没有这两行,需要手动添加
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
  • 重启ntp服务
# service ntpd start
# chkconfig ntpd on

slave01、slave02

1.关闭ntpd进程,设置默认关闭

# service ntpd stop
# chkconfig ntpd off

2.同步master1的服务器时间

# ntpdate master
  • 如果出现no server suitable for synchronization found错误,可等待一会儿再试

3.制定计划任务,周期性同步时间

# crontab -e
*/10 * * * * /usr/sbin/ntpdate master
# service crond restart

设置SSH免秘钥登录

  • 三台主机分别生成自己的一对公私钥对,并拷贝给所有主机(包括自己)
    公私钥对保存在/home/hadoop/.ssh/下,id_rsa.pub与id_rsa
    如果生成错误就删除这两个文件后重新生成
    拷贝后需要输入一次yes和密码
$ ssh-keygen -t rsa
$ ssh-copy-id master
$ ssh-copy-id slave01
$ ssh-copy-id slave02

配置Hadoop完全分布

master

1.上传压缩包到/opt/softwares

2.解压

$ tar -zxf /opt/softwares/hadoop-2.5.0-cdh5.3.6.tar.gz -C /opt/modules/

3.修改配置文件

  • hadoop-env.sh、yarn-env.sh、mapred-env.sh
export JAVA_HOME=/opt/modules/jdk1.7.0_79
  • core-site.xml
    <!--HDFS集群访问入口地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property>
    <!--声明存放数据的目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/modules/hadoop-2.5.0-cdh5.3.6/data</value>
    </property>
  • slaves
    声明哪些服务器是datanode
    每行一个主机名
master
slave01
slave02
  • hdfs-site.xml
    <property>
        <name>dfs.replication</name>
        <value>3</value>  <!--副本数-->
    </property>
    <!--secondarynamenode所在主机-->
      <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave02:50090</value>
    </property>
    <!--namenode所在主机-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>master:50070</value>
    </property>
    <!-- 关闭权限检查用户或用户组 -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
  • yarn-site.xml
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>slave01</value>
    </property>
    <!-- NodeManager获取数据的方式是shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--启用日志聚合功能-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!--日志保存时间-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
  • mapred-site.xml
    <!--mapreduce计算模型运行在yarn平台-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property> 
    <!--进程通信-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <!--客户端访问入口-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>

4.拷贝到其余主机

  • 可以删除doc帮助文档,减少scp copy文件的时间
$ rm -rf share/doc/
$ scp -r hadoop-2.5.0-cdh5.3.6/ slave01:/opt/modules/
$ scp -r hadoop-2.5.0-cdh5.3.6/ slave02:/opt/modules/

5.格式化NameNode

  • 在master上输入
$ bin/hdfs namenode -format

编写shell语句一键开启和关闭集群

  • start-cluster.sh
#!/bin/bash
echo "-------------------正在启动集群-------------------"
echo "-------------------正在启动NameNode-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode'
echo "-------------------正在启动SecodaryNameNode-------------------"
ssh hadoop@slave02 ' /opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start secondarynamenode'
echo "-------------------正在启动DataNode-------------------"
for i in hadoop@master  hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start datanode'
done
echo "-------------------正在启动yarn-------------------"
echo "-------------------正在启动ResourceManager-------------------"
ssh hadoop@slave01 '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start resourcemanager'
echo "-------------------正在启动NodeManager-------------------"
for i in hadoop@master  hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start nodemanager'
done
echo "-------------------正在启动JobHistory-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh start historyserver'
echo "-------------------集群已启动-------------------"
  • stop-cluster.sh
#!/bin/bash
echo "-------------------正在关闭JobHistory-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh stop historyserver'
echo "-------------------正在关闭yarn-------------------"
echo "-------------------正在关闭ResourceManager-------------------"
ssh hadoop@slave01 '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop resourcemanager'
echo "-------------------正在关闭NodeManager-------------------"
for i in hadoop@master  hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop nodemanager'
done
echo "-------------------正在关闭NameNode-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop namenode'
echo "-------------------正在关闭SecodaryNameNode-------------------"
ssh hadoop@slave02 ' /opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop  secondarynamenode'
echo "-------------------正在关闭DataNode-------------------"
for i in hadoop@master hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop datanode'
done
echo "-------------------集群已关闭-------------------"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章