手动搭建hadoop集群环境

Hadoop分布式集群部署安装
 
 
1 Hadoop分布式集群部署安装
在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步activenamenode的状态,以便能够在它失败时快速进行切换。
   hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
  这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当ActiveNameNode挂掉了,会自动切换Standby NameNode为active状态。

1.1 Hadoop分布式集群工作原理图
1.2 集群规划
主机名    IP    安装软件    运行进程
ha1    192.168.137.171    Jdk、Scala、Zookeep、Hadoop、Spark    NameNode、DataNode、JournalNode、QuorumPeerMain、DFSZKFailoverController、ResourceManager、NodeManager、Spark Worker
ha2    192.168.137.172    Jdk、Scala、Zookeep、Hadoop、Spark    NameNode、DataNode、JournalNode、QuorumPeerMain、DFSZKFailoverController、NodeManager、Spark Worker
ha3    192.168.137.173    Jdk、Scala、Zookeep、Hadoop、Spark    DataNode、JournalNode、QuorumPeerMain、ResourceManager、NodeManager、Spark Master、Spark Worker
 
1.3 相关软件
 1、jdk-8u131-linux-x64.tar.gz  
2、hadoop-2.6.4.tar.gz
3、zookeeper-3.4.5.tar.gz
4、scala-2.10.4.tgz
5、spark-1.6.1-bin-hadoop2.6.tgz


1.4 修改主机名称配置hosts文件

修改主机名
修改ha1虚拟机主机名:
执行命令: vi /etc/sysconfig/network
修改里面的HOSTNAME=ha1.ry600.com
同理,修改ha2为 ha2.ry600.com
同理,修改ha3为 ha3.ry600.com

配置ha1服务器,执行命令:vi /etc/hosts
127.0.0.1 localhost
192.168.137.171 ha1.ry600.com
192.168.137.172 ha2.ry600.com
192.168.137.173 ha3.ry600.com

其它服务器scp命令进行复制:
scp /etc/hosts 192.168.137.172:/etc/
scp /etc/hosts 192.168.137.173:/etc/
 
1.5 配置ssh免密码登录
产生密钥,执行命令:ssh-keygen -t rsa
按4回车,密钥文件位于~/.ssh文件
在ha1上生产一对钥匙,将公钥拷贝到其他节点,包括自己,执行命令:
   ssh-copy-id ha1.ry600.com
   ssh-copy-id ha2.ry600.com
   ssh-copy-id ha3.ry600.com
 (备选:还可以继续在ha2,ha3上生成密钥拷贝到其他节点)


1.6 关闭防火墙
关闭命令:  service iptables stop 
永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态 
 service iptables status 
 
1.7 上传服务器
ha1服务器创建hasoft目录后,
命令: mkdir /hasoft
再将相关软件进行上传
命令: cd /hasoft
解压JDK:
执行命令:tar -zxvf jdk-8u131-linux-x64.tar.gz
解压:Hadoop:
执行命令:tar -zxvf hadoop-2.6.4.tar.gz
解压Zookeeper:
执行命令:tar -zxvf zookeeper-3.4.5.tar.gz
解压Scala:
执行命令:tar -zxvf scala-2.10.4.tgz
解压Spark:
执行命令:tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz

1.8 设置环境变量
ha1修改profilie文件:
执行命令:vi /etc/profile
在文件尾端添加:
export JAVA_HOME=/hasoft/jdk1.8.0_131
export SCALA_HOME=/hasoft/scala-2.10.4
export HADOOP_HOME=/hasoft/hadoop-2.6.4
export SPARK_HOME=/hasoft/spark-1.6.1-bin-hadoop2.6
export PATH=${JAVA_HOME}/bin:${SCALA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH
 


1.9 Zookeeper集群配置:
1、ha1修改zoo.cfg文件:
执行命令:
cd /hasoft/zookeeper-3.4.5/conf
cp zoo_sample.cfg zoo.cfg
修改内容,执行命令: vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/hasoft/zookeeper-3.4.6/data
dataLogDir=/hasoft/zookeeper-3.4.6/logs
server.1 = ha1.ry600.com:2888:3888
server.2 = ha2.ry600.com:2888:3888
server.3 = ha3.ry600.com:2888:3888
 
2、服务器标识配置
     创建文件夹,
命令: cd /hasoft/zookeeper-3.4.5
命令:mkdir data
命令i
(相当于创建myid文件,内容为服务器标识:1)。 
 
1.10 hadoop配置文件(ha1):
1、修改hadoop-env.sh配置文件:
执行命令:
vi /hasoft/hadoop-2.6.4/etc/hadoop/hadoop-env.sh
修改内容:
export JAVA_HOME=/hasoft/jdk1.8.0_131
2、切换目录
执行命令:cd /hasoft/hadoop-2.6.4/etc/hadoop
 
3、修改core-site.xml配置文件:
执行命令:
vi core-site.xml
修改内容:

    <configuration>  
        <!--指定hdfs的nameService1节点URL地址 -->  
        <property>  
            <name>fs.defaultFS</name>  
            <value>hdfs://ns1</value>  
        </property>  
      
        <!-- Hadoop的运行时文件存放路径,如果不存在此目录需要格式化 -->  
        <property>  
            <name>hadoop.tmp.dir</name>  
            <value>/hasoft/hadoop-2.6.4/tmp</value>  
        </property>  
      
        <!-- Zookeeper地址 -->  
        <property>  
            <name>ha.zookeeper.quorum</name>  
            <value>ha1.ry600.com:2181,ha2.ry600.com:2181,ha3.ry600.com:2181</value>  
        </property>  
    </configuration>  
4、修改hdfs-site.xml配置文件:
执行命令:
vi hdfs-site.xml
修改内容:

  <configuration>  
        <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->  
        <property>  
            <name>dfs.nameservices</name>  
            <value>ns1</value>  
        </property>  
        <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->  
        <property>  
            <name>dfs.ha.namenodes.ns1</name>  
            <value>nn1,nn2</value>  
        </property>  
        <!-- nn1的RPC通信地址 -->  
        <property>  
            <name>dfs.namenode.rpc-address.ns1.nn1</name>  
            <value>ha1.ry600.com:9000</value>  
        </property>  
        <!-- nn1的http通信地址 -->  
        <property>  
            <name>dfs.namenode.http-address.ns1.nn1</name>  
            <value>ha1.ry600.com:50070</value>  
        </property>  
        <!-- nn2的RPC通信地址 -->  
        <property>  
            <name>dfs.namenode.rpc-address.ns1.nn2</name>  
            <value>ha2.ry600.com:9000</value>  
        </property>  
        <!-- nn2的http通信地址 -->  
        <property>  
            <name>dfs.namenode.http-address.ns1.nn2</name>  
            <value>ha2.ry600.com:50070</value>  
        </property>  
        <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->  
        <property>  
            <name>dfs.namenode.shared.edits.dir</name>  
            <value>qjournal://ha1.ry600.com:8485;ha2.ry600.com:8485;ha3.ry600.com:8485/ns1</value>  
        </property>  
        <!-- 指定JournalNode在本地磁盘存放数据的位置 -->  
        <property>  
            <name>dfs.journalnode.edits.dir</name>  
            <value>/hasoft/hadoop-2.6.4/journal</value>  
        </property>  
        <!-- 开启NameNode失败自动切换 -->  
        <property>  
            <name>dfs.ha.automatic-failover.enabled</name>  
            <value>true</value>  
        </property>  
        <!-- 配置失败自动切换实现方式 -->  
        <property>  
            <name>dfs.client.failover.proxy.provider.ns1</name>  
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
        </property>  
        <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->  
        <property>  
            <name>dfs.ha.fencing.methods</name>  
            <value>  
                sshfence  
                shell(/bin/true)  
            </value>  
        </property>  
        <!-- 使用sshfence隔离机制时需要ssh免登陆 -->  
        <property>  
            <name>dfs.ha.fencing.ssh.private-key-files</name>  
            <value>/root/.ssh/id_rsa</value>  
        </property>  
        <!-- 配置sshfence隔离机制超时时间 -->  
        <property>  
            <name>dfs.ha.fencing.ssh.connect-timeout</name>  
            <value>30000</value>  
        </property>  
    </configuration>  
5、修改mapred-site.xml配置文件:
执行复制命令:cp mapred-site.xml.template  mapred-site.xml
        修改文件:vi mapred-site.xml
修改内容:

    <configuration>  
        <!-- 指定Hadoop的MapReduce运行在YARN环境 -->  
        <property>  
            <name>mapreduce.framework.name</name>  
            <value>yarn</value>  
        </property>  
    </configuration>  
6、修改yarn-site.xml配置文件:
执行命令:
    vi yarn-site.xml
修改内容:

<configuration>       
      <!-- 开启RM高可靠 -->
    <property>
       <name>yarn.resourcemanager.ha.enabled</name>
       <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
       <name>yarn.resourcemanager.cluster-id</name>
       <value>YarnCluster</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
       <name>yarn.resourcemanager.ha.rm-ids</name>
       <value>rm1,rm2</value>
    </property>
    <!-- 分别指定RM的地址 -->
    <property>
       <name>yarn.resourcemanager.hostname.rm1</name>
       <value>ha1.ry600.com</value>
    </property>
    <property>
       <name>yarn.resourcemanager.hostname.rm2</name>
       <value>ha3.ry600.com</value>
    </property>

 <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
 <property>
    <name>yarn.resourcemanager.store.class</name> 
   <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
 </property>

    <!-- 指定zk集群地址 -->
    <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>ha1.ry600.com:2181,ha2.ry600.com:2181,ha3.ry600.com:2181</value>
    </property>
    <!-- NodeManager获取数据方式:shuffle --> 
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
</configuration>  
7、修改slaves配置文件:
执行命令:vi slaves
修改内容为:
ha1.ry600.com
ha2.ry600.com
ha3.ry600.com

1.11 Spark配置文件(ha1)

1 配置spark-env.sh
执行命令: cd /hasoft/spark-1.6.1-bin-hadoop2.6/conf
执行命令:cp spark-env.sh.template spark-env.sh
执行命令: vi spark-env.sh
在spark-env.sh文件中添加如下内容:
export JAVA_HOME=/hasoft/jdk1.8.0_131
export SCALA_HOME=/hasoft/scala-2.10.4
export HADOOP_CONF_DIR=/hasoft/hadoop-2.6.4/etc/hadoop

2 配置slaves
执行命令: cp slaves.template slaves
执行命令: vi slaves

slaves文件内容修改如下:
# A Spark Worker will be started on each of the machines listed below.
ha1.ry600.com
ha2.ry600.com
ha3.ry600.com

1.12 ha1 拷贝程序及配置文件到其它服务器(ha2、ha3)
1 复制文件
执行命令:scp -r /etc/profile ha2.ry600.com:/etc/
执行命令:scp -r /etc/profile ha3.ry600.com:/etc/
执行命令:scp -r /hasoft ha2.ry600.com:/
执行命令:scp -r /hasoft ha3.ry600.com:/


2 修改配置文件
执行命令:vi /hasoft/zookeeper-3.4.6/data/myid
将ha2的myid内容修改为2
将ha3的myid内容修改为3

3 刷新环境变量
执行命令:source /etc/profile   刷新环境变量


 1.13 启动Zookeeper:
1 分别在ha1、ha2、ha3启动zookeeper
执行命令:/hasoft/zookeeper-3.4.6/bin/zkServer.sh start    

 2 所有机器启动完毕,查看启动状态
执行命令:/hasoft/zookeeper-3.4.6/bin/zkServer.sh status    

1.14 启动journalnode:
分别在ha1、ha2、ha3上启动journalnode,注意:是调用的hadoop-daemon.sh这个脚本:
    分别执行命令:/hasoft/hadoop-2.7.3/sbin/hadoop-daemon.sh start journalnode     

 
1.15 格式化文件系统:
在ha1服务器上进行:HDFS文件系统进行格式化,执行命令:
hdfs namenode -format
 
验证:提示如下信息表示成功:

INFO common.Storage: Storage directory/usr/local/software/hadoop_2.7.1/tmp/dfs/name has been successfully formatted.
 
Hadoop的运行时文件存放路径为:tmp目录,ha1需要和ha2一致,进行拷贝(nameNode元数据):
执行命令:scp -r /hasoft/hadoop-2.7.3/tmp ha2.ry600.com:/hasoft/hadoop-2.7.3/

1.16 格式化formatZK:
只需要在ha1上进行执行命名即可:
执行命令:hdfs zkfc -formatZK
验证:
  打开ha1服务器zookeeper客户端,查看是否存在hadoop-ha节点
  执行命令:/hasoft/zookeeper-3.4.6/bin/zkCli.sh
  查看节点命令:ls  /
      

1.17 启动HDFS:
1、只需要在ha1上启动HDFS,
执行命令:/hasoft/hadoop-2.7.3/sbin/start-dfs.sh
验证启动HDFS:
      

Java Jps:JDK提供查看当前进程的小工具。
 NameNode:它是Hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问。
   DFSZKFailoverController会定期通过该rpc调用proxy.monitorHealth()来监测NN的健康状况。
1.18 启动YARN:
1、只需要在ha1上启动YARN,
执行命令:/hasoft/hadoop-2.7.3/sbin/start-yarn.sh
 
2、验证启动YARN:

Jps:JDK提供查看当前java进程的小工具。
ResourceManager:接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。

1.19 启动Spark
ha1执行命令: /hasoft/spark-2.2.0-bin-hadoop2.7/sbin/start-all.sh 

1.20 访问服务页面:
访问地址验证启动服务,访问地址:
HDFS管理界面:http://192.168.137.171:50070/

 
YARN管理界面:http://192.168.137.171:8088/
 
http://192.168.137.171:8080/SPARK管理界面: :

1.21 验证HDFS - HA主备切换:
1、验证ha1服务器NameNode和ha2服务器NameNode数据文件是否可以共享:
在ha1上传文件hosts文件:
执行命令:hadoop fs -put /etc/hosts /

 
杀掉ha1 NameNode进程,执行命令:
查看进程:jps
Kill -9 6068

 
验证成功

2、启动ha1上的NameNode进程,将ha2服务器进行强制关机,验证是否可以激活ha1:
启动ha1服务器NameNode进程:
执行命令:/hasoft/hadoop-2.6.4/sbin/hadoop-daemon.sh start namenode

 
将ha2服务进行关机处理:

 
主备切换对比图:
                                                                            

1.22 日常启动步骤:
分别在ha1、ha2、ha3启动zookeeper
执行命令:/hasoft/zookeeper-3.4.5/bin/zkServer.sh start     

只需要在ha1或ha2上启动HDFS,
执行命令:/hasoft/hadoop-2.6.4/sbin/start-dfs.sh

只需要在ha1或ha3上启动YARN,
执行命令:/hasoft/hadoop-2.6.4/sbin/start-yarn.sh
启动另外一台机器的ResourceManager
执行命令: /hasoft/hadoop-2.6.4/sbin/yarn-daemon.sh start resourcemanager

只需要在ha1或ha2或ha3启动Spark:
执行命令:  /hasoft/spark-1.6.1-bin-hadoop2.6/sbin/start-all.sh 

猜你喜欢

转载自my.oschina.net/u/3012047/blog/1796191