hadoop 2.5.2 完全分布式集群环境搭建 (3)

经过一番艰辛的过程,搭建好hadoop2.5.2的完全分布式集群环境,本文描述环境的搭建,后续文章将描述开发环境及HDFS API 及MapReduce例程编写及运行过程,转载请注明出处(http://blog.csdn.net/kylindai/article/details/46584637)

上一篇文章描述了 zookeeper 集群的安装,本文描述 hadoop 服务器的安装过程

1. 安装 hadoop

回顾集群规划
hadoop01: NameNode
hadoop02: NameNode
hadoop03: ResourceManager
hadoop04: DataNode, JournalNode, NodeManager
hadoop05: DataNode, JournalNode, NodeManager
hadoop06: DataNode, JournalNode, NodeManager

1.1 安装软件

在hadoop01上解压hadoop,并做 /usr/local/hadoop 链接

# tar xvfz hadoop-2.5.2.tar.gz -C /opt
# ln -s /opt/hadoop-2.5.2 /usr/local/hadoop
1.2 修改配置文件

修改hadoop配置文件,配置文件都位于 /usr/local/hadoop/etc/hadoop 目录下,一共要修改6个配置文件:
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slave

(1) hadoop-env.sh
这是 hadoop 命令脚本需要用到的环境变量脚本
需要修改里面的 JAVA_HOME 环境变量(奇怪的是为啥不直接取已经设置好的环境变量)
用 vi 打开 hadoop-env.sh 文件,在第25行,将 JAVA_HOME 设置为正的值:

export JAVA_HOME = /usr/local/java

如下图:
这里写图片描述

(2) core-site.xml
说明:
a. 指定 hdfs 默认的 url,其中 nameservice id 在 hdfs-site.xml 中定义
b. 指定 hdfs 元数据及edits文件的目录,这个目录需要在 namenode 上创建,也就是在 hadoop01 和 hadoop02 上都要创建,这里创建的目录为: /data/hadoop.data
c. 指定 zookeeper 服务器地址及端口,namenode ha 需要使用
最终内容如下:

<configuration>
    <!-- 指定hdfs的默认url, cluster1 为集群的 nameservice id -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster1</value>
    </property>
    <!-- 指定hadoop临时目录,存放hdfs元数据及edits文件的目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop.data</value>
    </property>
    <!-- 指定zookeeper地址,NameNode HA 需要用到 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
    </property>
</configuration>

(3) hdfs-site.xml
说明:
a. 指定 nameservices,一个集群有一个id,这里定义为 cluster1
b. 指定 cluster1 的 namenode 节点,namenode1, namenode2
c. 两个 namenode 的 rpc 及 http 访问地址及端口
d. 指定 cluster1 的 journalnode 的地址和端口
e. 指定 journalnode 本地同步文件路径
f. 设置 namenode failover 自动切换
g. 设置 namenode failover 自动切换的 provider 程序
h. 设置 namenode failover 自动切换时需要用到的 ssh key 的目录位置
最终内容如下:

<configuration>
    <!-- nameservices id -->
    <property>
        <name>dfs.nameservices</name>
        <value>cluster1</value>
    </property>
    <!-- cluster1 namenod: namenode1, namenode2 -->
    <property>
        <name>dfs.ha.namenodes.cluster1</name>
        <value>namenode1,namenode2</value>
    </property>
    <!-- cluster1 namenode1 rpc-address -->
    <property>
        <name>dfs.namenode.rpc-address.cluster1.namenode1</name>
        <value>hadoop01:9000</value>
    </property>
    <!-- cluster1 namenode1 http-address -->
    <property>
        <name>dfs.namenode.http-address.cluster1.namenode1</name>
        <value>hadoop01:50070</value>
    </property>
    <!-- cluster1 namenode2 rpc-address -->
    <property>
        <name>dfs.namenode.rpc-address.cluster1.namenode2</name>
        <value>hadoop02:9000</value>
    </property>
    <!-- cluster1 namenode2 http-address -->
    <property>
        <name>dfs.namenode.http-address.cluster1.namenode2</name>
        <value>hadoop02:50070</value>
    </property>
    <!-- cluster1 journalnode 的地址和端口 - namenode1 & namenode2 元数据实时同步 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/cluster1</value>
    </property>
    <!-- cluster1 journalnode log 文件存放目录 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/hadoop.journal</value>
    </property>
    <!-- namenode ha -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- failover proxy -->
    <property>
        <name>dfs.client.failover.proxy.provider.cluster1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 隔离机制 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!-- 使用隔离机制时需要ssh免登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
</configuration>

(4) mapred-site.xml
说明:
a. 指定 mapreduce 的运行框架为 yarn
最终内容如下:

<configuration>
    <!-- 指定 mapreduce 的运行框架为 yarn -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

(5) yarn-site.xml
说明:
a. 指定 resourcemanager 的地址(还是有单点隐患)
最终内容如下:

<configuration>
    <!-- 指定 resourcemanager 地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop03</value>
    </property>
    <!-- nodemanager 启动时加载 services 的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

(6) slaves
说明:
a. 指定 cluster1 的 datanode 的机器名,我们规划在 hadoop04, hadoop05, hadoop06 上
最终内容如下:

hadoop04
hadoop05
hadoop06
1.3 复制hadoop到其他节点
# scp -r /opt/hadoop-2.5.2 hadoop02:/opt
# scp -r /opt/hadoop-2.5.2 hadoop03:/opt
# scp -r /opt/hadoop-2.5.2 hadoop04:/opt
# scp -r /opt/hadoop-2.5.2 hadoop05:/opt
# scp -r /opt/hadoop-2.5.2 hadoop06:/opt

复制好后,在 namenode (hadoop01, hadoop02) 和 datanode (hadoop04, hadoop05, hadoop06) 上创建目录

# mkdir /data
# mkdir /data/hadoop.data

接下来,在 journode (hadoop04, hadoop05, hadoop06) 上创建目录

# mkdir /data
# mkdir /data/hadoop.journal

2. 启动 hadoop

hadoop安装配置完毕后,接下来就可以准备启动了

2.1 启动 zookeeper

上一篇文章中我们已经安装并启动了 zookeeper,这里就略过。

2.2 在 zookeeper 中创建 hadoop_ha 节点

严格按下述步骤:

在 hadoop01 上执行下面的命令:

# hdfs zkfc –formatZK

执行结果如下:

这里写图片描述

可以看到 Successfully created /hadoop-ha/cluster1,创建成功。

到 hadoop03 上看一下 zookeeper znode 的情况:

# zkCli.sh

这里写图片描述

看到 /hadoop-ha/cluster1 节点创建成功

2.3 启动 journalnode

在 hadoop01 上,执行下述命令:

# hadoop-daemons.sh start journalnode

看到输出:

这里写图片描述

journalnode 分别在 hadoop04, hadoop05, hadoop06 上启动了。

到 hadoop04 上看一下进程:

# jps 

这里写图片描述

可以看到 JournalNode 进程如期启动。

2.4 格式化 namenode

在 hadoop01 上执行:

# hdfs namenode -format -clusterid cluster1

看到输出:

这里写图片描述

说明格式化成功,接下来将 /data/hadoop.data 目录复制到 namenode2 上

# scp -r /data/hadoop.data hadoop02:/data

可以看到刚刚格式化后生成的 fsimage 文件被复制到 namenode2 上

这里写图片描述

2.5 启动 namenode 和 datanode

在 hadoop01 上运行:

# start-dfs.sh 

输出如下:

这里写图片描述

可以看到 namenode, datanode, journalnode, zkfc 都如期启动了。

2.6 启动 yarn

在 hadoop03 上运行:

# start-yarn.sh

输出如下:

这里写图片描述

可以看到 resourcemanager, nodemanager 都如期启动了

下一篇文章,我们来操作 hdfs, 并搭建 hadoop 开发环境,编写 hdfs api 及 mapreduce 的例子。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值