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集群,用于ZKFCDFSZKFailoverController)故障转移,当ActiveNameNode挂掉了,会自己主动切换Standby NameNodestandby状态。



1.1 Hadoop分布式集群工作原理图

1.2 集群规划

主机名

IP

安装软件

执行进程

Hadoop1

192.168.1.121

JdkHadoop

NameNodeDFSZKFailoverController

Hadoop2

192.168.1.122

JdkHadoop

NameNodeDFSZKFailoverController

Hadoop3

192.168.1.123

JdkHadoop

ResourceManager

Hadoop4

192.168.1.124

JdkHadoopZookeep

DataNodeNodeManagerJournalNodeQuorumPeerMain

Hadoop5

192.168.1.125

JdkHadoopZookeep

DataNodeNodeManagerJournalNodeQuorumPeerMain

Hadoop6

192.168.1.126

JdkHadoopZookeep

DataNodeNodeManagerJournalNodeQuorumPeerMain

 

1.3 相关下载

1、JDK下载地址:jdk-8u66-linux-x64.tar.gz

Linux安装JDK及环境变量配置,參见:http://blog.csdn.net/yuan_xw/article/details/49948285

 

2、Hadoop下载:hadoop-2.7.1.tar.gz

 

3、Zookeeper下载:zookeeper-3.4.5.tar.gz


1.4 配置hosts文件

配置Hadoop1server,运行命令:vi /etc/hosts

127.0.0.1    localhost

192.168.1.121   Hadoop1

192.168.1.122   Hadoop2

192.168.1.123   Hadoop3

192.168.1.124   Hadoop4

192.168.1.125   Hadoop5

192.168.1.126   Hadoop6

其他服务scp命令进行复制:

    scp /etc/hosts192.168.1.122:/etc/

    scp /etc/hosts192.168.1.123:/etc/

    scp /etc/hosts192.168.1.124:/etc/

scp /etc/hosts 192.168.1.125:/etc/

scp /etc/hosts 192.168.1.126:/etc/

 

1.5 配置ssh免password登录

产生密钥。运行命令:ssh-keygen-t rsa,4回车。密钥文件位于~/.ssh文件

Hadoop1上生产一对钥匙。将公钥复制到其它节点,包含自己,运行命令:

   ssh-copy-idHadoop1

   ssh-copy-idHadoop2

   ssh-copy-idHadoop3

   ssh-copy-idHadoop4

   ssh-copy-idHadoop5

   ssh-copy-idHadoop6

 

Hadoop3上生产一对钥匙,配置Hadoop3Hadoop4Hadoop5Hadoop6的免password登陆,运行命令:

产生密钥,运行命令:ssh-keygen-t rsa,4回车,密钥文件位于~/.ssh文件,将公钥复制到其它节点

   ssh-copy-idHadoop4

   ssh-copy-idHadoop5

   ssh-copy-idHadoop6

 

Hadoop2上生产一对钥匙,两个namenode之间要配置ssh免password登陆。运行命令:

产生密钥。运行命令:ssh-keygen-t rsa,4回车。密钥文件位于~/.ssh文件,将公钥复制到其它节点

ssh-copy-id -iHadoop1


1.6 关闭防火墙

1、关闭防火墙:

安装iptables-services命令:

systemctl stop firewalld.service     #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

 

验证:firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running

 

关闭防火墙自己主动执行:

运行命令:systemctl disable iptables.service

验证:systemctl list-unit-files |grep iptables

 

 用上述相同的方法在Hadoop2Hadoop3Hadoop4Hadoop5Hadoop6中如法炮制就可以。

 

1.7 上传server

Hadoop1server创建/usr/local/software/package文件夹后,再进行上传:


解压JDK

运行命令:tar -zxvfjdk-8u66-linux-x64.tar.gz  -C /usr/local/software/

解压:Hadoop:

        运行命令:tar -zxvfhadoop-2.7.1.tar.gz  -C /usr/local/software/

   重命名:mv hadoop-2.7.1/ hadoop_2.7.1/

 

Hadoop4server创建/usr/local/software/package文件夹后,再进行上传:


解压Zookeeper

运行命令:tar -zxvfzookeeper-3.4.5.tar.gz  -C /usr/local/software/

  重命名:mv zookeeper-3.4.5zookeeper_3.4.5

 

在server节点(Hadoop2Hadoop3Hadoop4Hadoop5Hadoop6),创建/usr/local/software文件夹。

解压完后成后,分别在Hadoop1Hadoop4删除/usr/local/software/package文件夹:

运行命令:rm -rf/usr/local/software/package/

 

1.8 改动配置文件(Hadoop1)

2、改动hadoop-env.sh配置文件:

运行命令:

vi /usr/local/software/hadoop_2.7.1/etc/hadoop/hadoop-env.sh

改动内容:

export JAVA_HOME=/usr/local/software/jdk1.8.0_66

 

3、改动core-site.xml配置文件:

运行命令:

vi /usr/local/software/hadoop_2.7.1/etc/hadoop/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>/usr/local/software/hadoop_2.7.1/tmp</value>
        </property>
    
        <!-- Zookeeper地址 -->
        <property>
            <name>ha.zookeeper.quorum</name>
            <value>Hadoop4:2181,Hadoop5:2181,Hadoop6:2181</value>
        </property>
    </configuration>
4、改动hdfs-site.xml配置文件:

运行命令:

vi /usr/local/software/hadoop_2.7.1/etc/hadoop/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>Hadoop1:9000</value>
        </property>
        <!-- nn1的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.ns1.nn1</name>
            <value>Hadoop1:50070</value>
        </property>
        <!-- nn2的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.ns1.nn2</name>
            <value>Hadoop2:9000</value>
        </property>
        <!-- nn2的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.ns1.nn2</name>
            <value>Hadoop2:50070</value>
        </property>
        <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://Hadoop4:8485;Hadoop5:8485;Hadoop6:8485/ns1
            </value>
        </property>
        <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/itcast/hadoop-2.2.0/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配置文件:

运行命令:

   切换文件夹:cd /usr/local/software/hadoop_2.7.1/etc/hadoop/

重命名:mv 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 /usr/local/software/hadoop_2.7.1/etc/hadoop/yarn-site.xml

改动内容:

	<configuration>
		<!--指定YARN的master节点( ResourceManager) 的地址 -->
		<property>
			<name>yarn.resourcemanager.hostname</name>
			<value>Hadoop3</value>
		</property>
	
		<!-- NodeManager获取数据方式:shuffle -->
		<property>
			<name>yarn.nodemanager.aux-services</name>
			<value>mapreduce_shuffle</value>
		</property>
	</configuration>

7、改动slaves配置文件:

运行命令:

    vi /usr/local/software/hadoop_2.7.1/etc/hadoop/slaves

    Hadoop4

Hadoop5

Hadoop6

1.9 环境变量

1、Hadoop1改动profilie文件:运行命令:vi/etc/profile

export JAVA_HOME=/usr/local/software/jdk1.8.0_66

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/usr/local/software/hadoop_2.7.1

export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

 

2、Hadoop1拷贝文件到server:Hadoop2Hadoop3Hadoop4Hadoop5Hadoop6

Hadoop1复制JDK

scp -r  /usr/local/software/Hadoop2:/usr/local/

scp -r  /usr/local/software/ Hadoop3:/usr/local/

scp -r  /usr/local/software/ Hadoop4:/usr/local/

scp -r  /usr/local/software/ Hadoop5:/usr/local/

scp -r  /usr/local/software/ Hadoop6:/usr/local/

 

3、Hadoop1复制环境变量:Hadoop2Hadoop3

scp /etc/profile Hadoop2:/etc/

scp /etc/profile Hadoop3:/etc/

 

4、Hadoop4改动profilie文件:运行命令:vi/etc/profile

export JAVA_HOME=/usr/local/software/jdk1.8.0_66

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/usr/local/software/hadoop_2.7.1

export ZOOKEEPER_HOME=/usr/local/software/zookeeper_3.4.5

export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

 

5、Hadoop4拷贝文件到server:Hadoop5Hadoop6

Hadoop1复制zookeeper

scp -r zookeeper_3.4.5/Hadoop5:/usr/local/software/zookeeper_3.4.5/

scp -r zookeeper_3.4.5/ Hadoop6:/usr/local/software/zookeeper_3.4.5/

 

6、Hadoop4复制环境变量: Hadoop5Hadoop6

scp /etc/profile Hadoop5:/etc/

scp /etc/profile Hadoop6:/etc/

 

7、Hadoop1Hadoop2Hadoop3Hadoop4Hadoop5Hadoop6。分别刷新环境变量

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


1.10 Zookeeper集群配置:

1、改动zoo.cfg文件:

运行命令:

cd /usr/local/software/zookeeper_3.4.5/conf

mv zoo_sample.cfgzoo.cfg

改动内容。运行命令:vi zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/local/software/zookeeper_3.4.5/data

clientPort=2181

server.4 = Hadoop4:2888:3888

server.5 = Hadoop5:2888:3888

server.6 = Hadoop6:2888:3888

 

2、server标识配置

     创建目录:mkdir data

     创建文件myid并填写内容为4vi myid (内容为server标识:4) 

     Hadoop5Hadoop6中的myid文件中的值改动为56路径(vi %ZOOKEEPER_HOME%/data/myid)

     依照同样的步骤,为其他机器都配置上zoo.cfgmyid文件。


1.11 启动Zookeeper

分别在Hadoop4Hadoop5Hadoop6server上启动zookeeper:

Hadoop4运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh start      #启动zookeeper

Hadoop5运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh start      #启动zookeeper

Hadoop6运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh start      #启动zookeeper

 

Hadoop4运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh status     #查看启动状态

Hadoop5运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh status     #查看启动状态

Hadoop6运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh status     #查看启动状态

 

1.12 启动journalnode

Hadoop1上启动全部journalnode。注意:是调用的hadoop-daemon.sh这个脚本:

    Hadoop4运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart journalnode     #启动journalnode

    Hadoop5运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart journalnode     #启动journalnode

    Hadoop6运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart journalnode     #启动journalnode

 

1.13 格式化文件系统:

Hadoop1server上进行:HDFS文件系统进行格式化,运行命令:

# hadoop namenode –formate(已过时)

hdfs namenode -format推荐使用

 

验证:提演示样例如以下信息表示成功:


INFO common.Storage: Storage directory/usr/local/software/hadoop_2.7.1/tmp/dfs/name has been successfully formatted.

 

Hadoop的执行时文件存放路径为:tmp文件夹,Hadoop2须要和Hadoop1一致,进行拷贝:

运行命令:scp -r/usr/local/software/hadoop_2.7.1/tmp Hadoop2:/usr/local/software/hadoop_2.7.1/


1.14 格式化formatZK

仅仅须要在Hadoop1上进行运行命名就可以:

运行命令:hdfs zkfc -formatZK

验证:

  打开Hadoop4serverzookeeperclient,查看是否存在hadoop-ha节点

  运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkCli.sh

  查看节点命令:ls  /

     

1.15 启动HDFS

1、仅仅须要在Hadoop1上启动HDFS

运行命令:/usr/local/software/hadoop_2.7.1/sbin/start-dfs.sh

验证启动HDFS

     

 JpsJDK提供查看当前java进程的小工具。

 NameNode:它是Hadoop中的主server,管理文件系统名称空间和对集群中存储的文件的訪问。

   DFSZKFailoverController会定期通过该rpc调用proxy.monitorHealth()来监測NN的健康状况。

1.16 启动YARN

1、仅仅须要在Hadoop3上启动YARN

运行命令:/usr/local/software/hadoop_2.7.1/sbin/start-yarn.sh

 

2、验证启动YARN:


JpsJDK提供查看当前java进程的小工具。

ResourceManager:接收client任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)

 

1.17 訪问Hadoop服务页面:

訪问地址验证启动服务。訪问地址:

HDFS管理界面:http://192.168.1.121:50070/


 

YARN管理界面:http://192.168.1.123:8088/


1.18 验证HDFS - HA主备切换:

1、验证Hadoop1serverNameNodeHadoop2serverNameNode数据文件能否够共享:

Hadoop1上传文件hosts文件:
运行命令:hadoop fs-put /etc/hosts /


 

杀掉Hadoop1 NameNode进程。运行命令:

查看进程:jps

Kill -9 6068


 

验证成功


2、启动Hadoop1上的NameNode进程。将Hadoop2server进行强制关机,验证能否够激活Hadoop1

启动Hadoop1serverNameNode进程:

运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart namenode


 

Hadoop2服务进行关机处理


 

主备切换对照图:



                --以上为《Hadoop教程(五)Hadoop分布式集群部署安装》,如有不当之处请指出。我兴许逐步完好更正。大家共同提高。

谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


posted on 2017-08-13 10:40  lxjshuju  阅读(378)  评论(0编辑  收藏  举报