描述:鉴于本地电脑内存限制,采用三台虚机安装此环境。 主机名,分别为master、slave1、slave2. zookeeper分别安装这三台机器上,master和slave1做主从备份, slave1和slave2是DataNode, slave1充当了master和slave的角色。

集群规划:

主机名 IP 安装的软件 运行的进程
master 192.168.1.201 jdk、hadoop、zookeeper NameNode、ResourceManager、DFSZKFailoverController(zkfc)、QuorumPeerMain
slave1 192.168.1.202 jdk、hadoop、zookeeper NameNode、ResourceManager、DFSZKFailoverController(zkfc)、          DataNode、  NodeManager、JournalNode、QuorumPeerMain

slave2 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

说明:
1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
关键搭建步骤:
  1.安装配置zooekeeper集群(在master上)
1.1解压
tar -zxvf zookeeper-3.4.10.tar.gz -C /zookeeper/
1.2修改配置
cd /itcast/zookeeper-3.4.10/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=dataDir=/home/zookeeper/data
在最后添加:
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=master:2888:3888
保存退出
然后创建一个data文件夹
mkdir /home/zookeeper/data
再创建一个空文件
touch /home/zookeeper/data/myid
里面保存相应的id值,即3
1.3将配置好的zookeepe整个目录拷贝到其他节点(slave1,slave2)
scp -r/home/zookeeper/ root@slave1:/home/
scp -r/home/zookeeper/ root@slave2:/home/
注意:修改slave1、slave2对应/home/zookeeper/myid内容分别为1,2
   2.安装配置hadoop集群(在master上操作)
2.1解压
tar -zxvf hadoop-2.7.4.tar.gz -C /usr/local/hadoop/
2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
#将hadoop添加到环境变量中
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_144
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /usr/local/hadoop/etc/hadoop

2.2.1修改hadoo-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_144

2.2.2修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp2</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>slave1:2181,slave2:2181,master:2181</value>
</property>
</configuration>

2.2.3修改hdfs-site.xml
  <configuration>
      <property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp2/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp2/dfs/data</value>
</property>

<!--指定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>master:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>master:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>slave1:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>slave2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave1:8485;slave2:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/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>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>

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

2.2.5修改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>yrc</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>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181<</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

2.2.6修改slaves
slave1
slave2

2.2.7配置免密码登陆
#首先要配置master到slave1,slave2的免密码登陆
#在master上生产一对钥匙
ssh-keygen -t rsa
#将公钥拷贝到其他节点,包括自己
ssh-coyp-id slave1
ssh-coyp-id slave2

2.4将配置好的hadoop拷贝到其他节点
scp -r /usr/local/hadoop/ root@slave1:/usr/local/
scp -r /usr/local/hadoop/ root@slave2:/usr/local/
###注意:严格按照下面的步骤
2.5启动zookeeper集群(分别在master,slave1,slave2上启动zk)
cd /home/zookeeper/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status

2.6启动journalnode(分别在在slave1,slave2上执行)
cd /usr/local/hadoop
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,slave1,slave2上多了JournalNode进程
注意:通常配置奇数个JournalNode,否则格式化HDFS时会给出Warn, client.QuorumJournalManager: Quorum journal URI 'qjournal://slave1:8485;slave2:8485/ns1' has an even number of Journal Nodes specified. This is not recommended!

2.7格式化HDFS
#在master上执行命令:
bin/hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/usr/local/hadoop/tmp2,然后将/usr/local/hadoop/tmp2拷贝到slave1,slave2下
scp -r tmp2/ root@slave1:/usr/local/hadoop/

2.8格式化ZK(在master上执行即可)
bin/hdfs zkfc -formatZK

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

2.10启动YARN
sbin/start-yarn.sh

到此,hadoop-2.7.4配置完毕,可以统计浏览器访问:
http://master的IP:50070
NameNode 'master:9000' (active)
http://ip:50070
NameNode 'salve1的:9000' (standby)

查看各节点(master、slave1、slave2)的进程:
[root@master hadoop]# jps
32195 QuorumPeerMain
32723 DFSZKFailoverController
356 ResourceManager
1175 Jps
32441 NameNode
[root@master hadoop]#

[root@slave1 ~]# jps
26320 JournalNode
27060 Jps
26245 QuorumPeerMain
26470 DataNode
26726 NodeManager
26409 NameNode
26623 DFSZKFailoverController
[root@slave1 ~]#

[root@slave2 ~]# jps
11185 QuorumPeerMain
11266 JournalNode
11493 NodeManager
11356 DataNode
11646 Jps
[root@slave2 ~]#

验证HDFS HA,首先向hdfs上传一个文件

[root@master hadoop]# bin/hdfs dfs -put test/a.txt /c.txt
[root@master hadoop]# bin/hdfs dfs -ls /
Found 1 items
-rw-r--r-- 3 root supergroup 67 2017-11-10 16:38 /c.txt

然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://slave1:50070
NameNode 'slave1:9000' (active)
这个时候slave1上的NameNode变成了active
在执行命令:

[root@slave1 hadoop]# bin/hdfs dfs -ls /
Found 1 items
-rw-r--r-- 3 root supergroup 67 2017-11-10 16:38 /c.txt
[root@slave1 hadoop]#

手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://master:50070
NameNode 'master:9000' (standby)

验证YARN:运行一下hadoop提供的demo中的WordCount程序:

[root@slave1 hadoop]# bin/hdfs dfs -put test/a.txt /input [root@slave1 hadoop]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /input/a.txt /mrout 17/11/13 09:51:25 INFO input.FileInputFormat: Total input paths to process : 1

17/11/13 09:51:25 INFO mapreduce.JobSubmitter: number of splits:1
17/11/13 09:51:26 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1510302622448_0009
17/11/13 09:51:27 INFO impl.YarnClientImpl: Submitted application application_1510302622448_0009
17/11/13 09:51:27 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1510302622448_0009/
17/11/13 09:51:27 INFO mapreduce.Job: Running job: job_1510302622448_0009

hadoop 分布式机群搭建的更多相关文章

  1. 攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)

    一.环境说明: 操作系统:Centos6.5 Linux node1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 ...

  2. hadoop分布式快速搭建

    hadoop分布式快速搭建 1.配置主节点与从节点的ssh互信:[其中在主从节点主机的/etc/hosts文件中需绑定主机名ip间的映射关系; 如,192.168.1.113 node0 192.16 ...

  3. [大数据学习研究] 3. hadoop分布式环境搭建

    1. Java安装与环境配置 Hadoop是基于Java的,所以首先需要安装配置好java环境.从官网下载JDK,我用的是1.8版本. 在Mac下可以在终端下使用scp命令远程拷贝到虚拟机linux中 ...

  4. Hadoop 分布式环境搭建

    一.前期环境 安装概览 IP Host Name Software Node 192.168.23.128 ae01 JDK 1.7 NameNode, SecondaryNameNode, Data ...

  5. WMware 中CentOS系统Hadoop 分布式环境搭建(一)——Hadoop安装环境准备

    1.创建3台虚拟机并装好系统,这里使用64位CentOS. 2.Ping测试[确保两两能ping通]: [ping xxx.xxx.xxx.xxx] 3.安装SSH:[yum install ssh ...

  6. Hadoop分布式平台搭建

    环境:CentOS 7.4 (1708  DVD) 工具:MobaXterm 一. 安装 1. 将hadoop安装包上传到/usr/local目录下,将其解压并重命名. 2. 配置hadoop的环境变 ...

  7. hadoop伪分布式平台搭建(centos 6.3)

    最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...

  8. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  9. 超快速使用docker在本地搭建hadoop分布式集群

    超快速使用docker在本地搭建hadoop分布式集群 超快速使用docker在本地搭建hadoop分布式集群 学习hadoop集群环境搭建是hadoop入门的必经之路.搭建分布式集群通常有两个办法: ...

随机推荐

  1. Visual Studio项目的生成事件代码

    我们打开vs的项目属性可以看到有生成事件,如下图: 可以看到有两块空白区域,这个空白区域可以让我们写代码或脚本来处理编译生成前后的时候,处理一些事情,今天就简单的来说说这两块. 生成前事件命令行 我想 ...

  2. ~ # himm -sh: himm: not found的解决方法

    ls /bin发现没有himm 海思根文件默认没有把himm工具集成在bin里,但是在sdk中 /home/swann/Hi3516CV300_SDK_V1.0.3.0/osdrv/tools/boa ...

  3. node nightmare 网页自动化测试 sample

    安装nightmare 编写1.js 运行 node 1.js var Nightmare = require('nightmare');var nightmare = Nightmare({ sho ...

  4. html 简单的table样式

    效果预览: 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  5. Python Scrapy环境配置教程+使用Scrapy爬取李毅吧内容

    Python爬虫框架Scrapy Scrapy框架 1.Scrapy框架安装 直接通过这里安装scrapy会提示报错: error: Microsoft Visual C++ 14.0 is requ ...

  6. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  7. C++和extern C

    http://blog.csdn.net/gongmin856/article/details/44228453 C语言中的可变参数:va_list ,va_start,va_arg,va_end h ...

  8. 利用curl 模拟多线程

    所谓多线程就是多个 程序同时运行,单线程:执行一段逻辑,等待完成后 在执行另外一个. 多线程:几个逻辑同时进行处理,不需要相互等待,提高了总的执行时间 接下来就用curl实现多线程 实现逻辑 1. f ...

  9. PREV-2_蓝桥杯_打印十字图

    问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示: ..$$$$$$$$$$$$$....$...........$..$$$.$$$$$$$$$.$$$$...$...... ...

  10. Memcached 集群架构方面的问题 [z]

    集群架构方面的问题       memcached是怎么工作的? Memcached的神奇来自两阶段哈希(two-stage hash).Memcached就像一个巨大的.存储了很多<key,v ...