手记

Hadoop完全分布式集群安装

2018-04-23 15:59:405061浏览

叁金

3实战 · 33手记 · 1推荐

前面我们配置了伪分布式的Hadoop集群供我们学习Hadoop的基础操作,当我们对Hadoop的操作熟练之后肯定要部署到正式的环境,这个时候肯定就需要部署完全分布式的环境了。那么完全分布式的Hadoop集群如何配置呢?

我们配置伪分布式Hadoop集群的时候提到我们具体操作的步骤为:

  1. 配置免密登录
  2. 配置JDK环境
  3. 安装配置Hadoop
  4. Hadoop NameNode格式化及运行测试

当我们配置完全分布式的时候就意味着我们需要将 1 2 3 步循环N次,N等于你集群的机器数量。比如我们要配置一个拥有3个节点的小集群,我们需要在三台机器上都进行免密配置,JDK安装,Hadoop配置等等。最终进行格式化并且启动我们的集群。

前期准备

选择三台机器搭建我们的集群,我们将其分别命名为namenode-1,datanode-1,datanode-2
将它们的ip及hostname分别添加到各个机器的/etc/hosts文件:

192.168.1.x namenode-1
192.168.1.x datanode-1
192.168.1.x datanode-2

然后参考之前的文章进行免密,JDK配置。

Hadoop配置

hadoop的环境变量及hadoop-env.sh参考之前的文章。这里我们主要会提到hdfs-site.xml和core-site.xml。分布式的Hadoop集群我们有两种配置,一种是跟我们伪分布式集群一样具有SecondaryNameNode的。一种是HA(高可用)也就是具有两个NameNode的。


注:SecondaryNameNode的目的在于为Hadoop提供一个CheckPoint节点,它只是NameNode的一个助手节点,来帮助NameNode更好的工作,防止数据的丢失。它不能取代NameNode,也不是NameNode的备份。

具有SecondaryNameNode的分布式Hadoop集群配置

这类集群的hdfs-site.xml和core-site.xml配置与之前的伪分布式配置是一致的,大家可以参考一下。需要注意的是 我们的slaves文件,之前默认是只有localhost。现在我们有两个datanode节点所以我们的slaves文件要改为:

datanode-1
datanode-2

slaves位于Hadoop安装目录的etc/hadoop/目录下,每行都是datanode机器的hostname。将slaves更新到每个节点,同时在各个节点创建相关的目录即可。启动部分大家参考前面内容。

HA高可用的Hadoop分布式配置

假设我们拥有五台机器,分别为namenode-1,namenode-2,datanode-1,datanode-2,datanode-3。
zookeeper部署在datanode1,2,3上。

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/hadoop-2.7.3/tmp/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/hadoop-2.7.3/tmp/data</value>
    </property>

    <!-- HA 相关配置 -->
        <!-- 集群名称,可以随意起名称  -->
    <property>
        <name>dfs.nameservices</name>
        <value>clustername</value>
    </property>
        <!-- 定义namenode节点名称,名字任意,属性名与集群名称有关 -->
    <property>
        <name>dfs.ha.namenodes.clustername</name>
        <value>nn-1,nn-2</value>
    </property>
        <!--    定义相关端口 -->
    <property>
        <name>dfs.namenode.rpc-address.clustername.nn-1</name>
        <value>namenode-1:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.clustername.nn-2</name>
        <value>namenode-2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.clustername.nn-201</name>
        <value>namenode-1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.clustername.nn-155</name>
        <value>namenode-2:50070</value>
    </property>
        <!--    定义journalNode -->
    <property>                                                   
        <name>dfs.namenode.shared.edits.dir</name>

 <value>qjournal://datanode-1:8485;namenode-1:8485;namenode-2:8485/clustername</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.clustername</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>shell(/bin/true)</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/hadoop-2.7.3/tmp/qjournal</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled.clustername</name>
        <value>true</value>
    </property>
        <!--    定义zookeeper集群 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>datanode-1:2181,datanode-2:2181,datanode-3:2181</value>
    </property>
</configuration>

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-2.7.3/tmp</value>
    </property>
        <!--    与集群名称保持一致 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://clustername</value>
    </property>
</configuration>

然后更改slaves文件:

datanode-1
datanode-2
datanode-3

启动高可用的Hadoop集群:

# 格式化zk集群
./bin/hdfs zkfc -formatZK
# 格式化namenode
./bin/hdfs namenode -format
# 启动namenode
./bin/hdfs start-dfs.sh start
# 切换到root用户启动datanode
./bin/hdfs start-secure-dns.sh

# 以上命令在namenode上执行,执行完通过jps命令可见如下进程

# namenode机器
6163 DFSZKFailoverController
6289 NameNode
# datanode机器
6037 DataNode
5787 JournalNode

Yarn HA配置

mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

yarn-site.xml

<?xml version="1.0"?>
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>namenode-1</value>
        </property> 
        <property>
            <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>
        <name>yarn.resourcemanager.connect.retry-interval.ms</name>
        <value>2000</value>
    </property>

    <!-- HA -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>mytest-yarn</value>
    </property>                         
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.nn1</name>
        <value>namenode-1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.nn2</name>
        <value>namenode-2</value>
        </property>                                         
        <property>
            <name>yarn.resourcemanager.webapp.address.nn1</name>
            <value>namenode-1:8088</value>      
    </property>                  
    <property>
        <name>yarn.resourcemanager.webapp.address.nn2</name>
        <value>namenode-2:8088</value>  
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>datanode-1:2181,datanode-2:2181,datanode-3:2181</value>                      
    </property>
</configuration>

希望对大家有所帮助。如果大家有什么问题,可以去Hadoop的官网查看相关的配置示例。

6人推荐
随时随地看视频
慕课网APP

热门评论

有酬求教hadoop安装!!!

为啥zk不能部署到namenode节点呢?

笔记本上只能装伪分布式,完全分布式咋装呢?

查看全部评论