CDH Hadoop 集群部署方案

1、 集群规划

主机名称    主机IP        安装软件    运行的进程
node1    10.1.19.100    zookeepr1    DataNode、NodeManager、JournalNode、QuorumPeerMain
node2    10.1.19.144    zookeepr2    DataNode、NodeManager、JournalNode、QuorumPeerMain
node3    10.1.19.146    zookeepr3    DataNode、NodeManager、JournalNode、QuorumPeerMain
node4    10.1.19.148                NameNode、DFSZKFailoverController(zkfc)
node5    10.1.19.149                NameNode、DFSZKFailoverController(zkfc)
node6    10.1.19.158                ResourceManager
node7    10.1.19.157                ResourceManager

2、 OS 配置信息
内存:4G

CPU:4核

OS: Linux RedHat 企业版64bit

JDK:1.7.1

Hadoop: hadoop-2.6.0-cdh5.5.1

3、准备工作

3.1 编译源码

编译源码过程: Hadoop学习笔记 6 Hadoop源码编译 编译好的源码见附件:

3.2 JDK配置安装

使用tar命令,将JDK解压到 /usr/目录下

配置/etc/profile,配置好JDK环境变量,使用source /etc/profile

使用which java 验证jdk环境变量配置信息是否成功

4、安装Hadoop

使用tar 命令将hadoop压缩文件解压到 /usr/hadoop/目录下

然后修改配置文件:hadoop-env.sh、core-site.xml、 hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves

4.1  hadoop-env.sh

配置JDK的根路径

export JAVA_HOME=/usr/java/jdk1.7.0_71

4.2 core-site.xml

<configuration>
    <!-- 指定hdfs的nameservice为ns1 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>
    <!-- 指定hadoop临时目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-2.7.1/tmp</value>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>
</configuration>

4.3  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>hadoop04:9000</value>
    </property>
    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>hadoop04:50070</value>
    </property>
    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>hadoop05:9000</value>
    </property>
    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>hadoop05:50070</value>
    </property>
    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns1</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop-2.7.1/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>

4.4  mapred-site.xml
<configuration>
    <!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

4.5 yarn-site.xml

<configuration>
     
       <!-- Resource Manager Configs -->
        <property>
                <name>yarn.resourcemanager.connect.retry-interval.ms</name>
                <value>2000</value>
        </property>
          <property>
             <name>yarn.resourcemanager.ha.enabled</name>
             <value>true</value>
          </property>
        <property>
                <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
        <property>
                <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
                <value>true</value>
        </property>
        <!-- 集群名称,确保HA选举时对应的集群 -->
        <property>
                 <name>yarn.resourcemanager.cluster-id</name>
                 <value>yrc</value>
          </property>
        <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2</value>
        </property>
      <property>
         <name>yarn.resourcemanager.hostname.rm1</name>
         <value>node6</value>
      </property>
      <property>
         <name>yarn.resourcemanager.hostname.rm2</name>
         <value>node7</value>
      </property>     
       <property>
                <name>yarn.resourcemanager.scheduler.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
        </property>
        <property>
                <name>yarn.resourcemanager.recovery.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
                <value>5000</value>
        </property>
        <!-- ZKRMStateStore 配置 -->
        <property>
                <name>yarn.resourcemanager.store.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>node1:2181,node2:2181,node3:2181</value>
        </property>
        <property>
                <name>yarn.resourcemanager.zk.state-store.address</name>
                <value>node1:2181,node2:2181,node3:2181</value>
        </property>
        <!-- Client访问RM的RPC地址 (applications manager interface) -->
        <property>
                <name>yarn.resourcemanager.address.rm1</name>
                <value>node6:23140</value>
        </property>
        <property>
                <name>yarn.resourcemanager.address.rm2</name>
                <value>node7:23140</value>
        </property>
        <!-- AM访问RM的RPC地址(scheduler interface) -->
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm1</name>
                <value>node6:23130</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm2</name>
                <value>node7:23130</value>
        </property>
        <!-- RM admin interface -->
        <property>
                <name>yarn.resourcemanager.admin.address.rm1</name>
                <value>node6:23141</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address.rm2</name>
                <value>node7:23141</value>
        </property>
        <!--NM访问RM的RPC端口 -->
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
                <value>node6:23125</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
                <value>node7:23125</value>
        </property>
        <!-- RM web application 地址 -->
        <property>
                <name>yarn.resourcemanager.webapp.address.rm1</name>
                <value>node6:23188</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.rm2</name>
                <value>node7:23188</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.https.address.rm1</name>
                <value>node6:23189</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.https.address.rm2</name>
                <value>node7:23189</value>
        </property>
       
        <property>
                         <name>yarn.nodemanager.aux-services</name>
                         <value>mapreduce_shuffle</value>
          </property>
</configuration>

4.6 slaves

 slaves是指定子节点的位置,
    在node4上启动:HDFS、journalnode
    在node6启动: yarn,
    所以node4上的slaves文件指定的是datanode的位置,
    node6上的slaves文件指定的是nodemanager的位置

    node1
    node2
    node3

5、 启动、初始化HDFS环境

5.1 启动zookeeper集群 (node1、node2、node3)

使用./zkServer.sh start 命令依次启动三个节点

5.2 启动journalnode

sbin/hadoop-daemons.sh start journalnode

#运行jps命令检验 是否启动成功

5.3 格式化HDFS

  #在node4上执行命令:
    hdfs namenode -format

#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/usr/hadoop/hadoop-2.6.0-cdh5.5.1/tmp,然后将/usr/hadoop/hadoop-2.6.0-cdh5.5.1/tmp拷贝到node5、node6、node7的/usr/hadoop/hadoop-2.6.0-cdh5.5.1/下。
    scp -r tmp/ node5:/itcast/hadoop-2.7.1/

5.4 格式化ZK(在node4上执行即可)

hdfs zkfc -formatZK

5.5启动HDFS(在node4上执行)
    sbin/start-dfs.sh

5.6 启动YARN(#####注意#####:是在node6上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
    sbin/start-yarn.sh

猜你喜欢

转载自muruiheng.iteye.com/blog/2265902