hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

在准备之前说一下本次搭建的各节点角色,进程。

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

nameNode 进程:NameNode

dataNode  进程:DataNode

resourceManager :ResourceManager

nodeManeger : NodeManager

zkfc:DFSZKFailoverController

journalnode: JournalNode

zookeeper: QuorumPeerMain

我的IP:

192.168.79.101   hadoop1

192.168.79.102   hadoop2

192.168.79.103   hadoop3

192.168.79.104   hadoop4 

一:准备

1.  修改Linux主机名:

命令:vim /etc/sysconfig/network  

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)
   HOSTNAME 主机名

2.  修改IP为静态IP:

(第一种方式)
   进入图形界面 -> 点击的俩个小电脑图标 -> 右键 -> edit connections -> ipv4 -> manual -> 点击add按钮 -> 添加IP,NETMASK, GATEWAY,如果可以的话建议使用第一种方式。
(第二种通过修改文件)   vim /etc/sysconfig/network-scripts/ifcfg-eth0
   
   DEVICE="eth0"
   BOOTPROTO="static"        ###
   HWADDR="00:0C:29:3C:BF:E7"
   IPV6INIT="yes"
   NM_CONTROLLED="yes"
   ONBOOT="yes"
   TYPE="Ethernet"
   UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
   IPADDR="192.168.1.119"    ###
   NETMASK="255.255.255.0"   ###
   GATEWAY="192.168.1.1"     ###

3.  配置主机名和IP的映射关系,每个机器都是这样一个文件。

命令:vim /etc/hosts

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

4.  关闭防火墙

service iptables stop

#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off

5.  配置各个节点之间的免登陆。

生成ssh免登陆密钥 : ssh-keygen -t rsa
为了简单,一直回车即可。各个节点都执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

我这里以hadoop1 到2,3,4为例。其余各节点操作一样。
将公钥拷贝到要免登陆的机器上
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 或
 ssh-copy-id -i hadoop1

将公钥拷贝到其他节点,包括自己(期间会提示输入密码):

ssh-copy-id -i hadoop1

ssh-copy-id -i hadoop2

ssh-copy-id -i hadoop3

ssh-copy-id -i hadoop4

其他节点同样操作。最后每个机器的 /root/.ssh 中 authorized_keys文件会有四个公钥。

在hadoop1上执行  ssh hadoop2 

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

二: 各节点安装JDK,hadoop,(hadoop1,hadoop2,hadoop3上安装zookeeper),并配置环境变量

1.  上传jdk,hadoop,zookeeper

2.  添加执行权限 

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

3.  解压。我把他们解压到 /usr/local/tools 下

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

4.  各个节点配置环境变量:

命令: vim /etc/profile

针对我自己的路径,配置如下:

export JAVA_HOME=/usr/local/tools/jdk1.7.0_75
export HADOOP_HOME=/usr/local/tools/hadoop-2.2.0
export ZK_HOME=/usr/local/tools/zookeeper-3.4.5
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

然后执行  source /etc/profile 使其生效。验证,例如执行  java -version

三:配置hadoop

基本要配置4个配置文件,core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml

1.  配置core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>  

    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
     
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>

fs.defaultFS:指定hdfs的nameservice为ns1

hadoop.tmp.dir:指定hadoop临时目录

ha.zookeeper.quorum:指定zookeeper地址

2.  配置hdfs-site.xml

<configuration>
    <property>
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>

    <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>nn1,nn2</value>
    </property>

    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>hadoop1:9</value>
    </property>
     
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>hadoop1:50070</value>
    </property>


    <property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>hadoop2:9</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>hadoop2:50070</value>
    </property>

    <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns1</value>
    </property>

    <property>
        <name>dfs.ha.automatic-failover.enabled.ns1</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.journalnode.edits.dir</name>
        <value>/usr/local/journal</value>
    </property>


    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>

    <property>
        <name>dfs.data.dir</name>
        <value>/usr/local/data</value>
    </property>

    <property>
        <name>dfs.datanode.socket.write.timeout</name>
        <value>0</value>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

</configuration>

dfs.nameservices: 指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致

dfs.ha.namenodes.ns1:ns1下面有两个NameNode,分别是nn1,nn2

dfs.namenode.rpc-address.ns1.nn1: nn1的RPC通信地址

dfs.namenode.http-address.ns1.nn1: nn1的http通信地址

dfs.namenode.shared.edits.dir:指定NameNode的元数据在JournalNode上的存放位置

dfs.journalnode.edits.dir : 指定JournalNode在本地磁盘存放数据的位置

dfs.ha.automatic-failover.enabled: true是开启NameNode失败自动切换

dfs.client.failover.proxy.provider.ns1:配置失败自动切换实现方式

dfs.ha.fencing.ssh.private-key-files:使用sshfence隔离机制时需要ssh免登陆

3.  配置yarn-site.xml

<configuration>

<property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

  </property>

 

  <property>

    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

    <value>org.apache.hadoop.mapred.ShuffleHandler</value>

  </property>

 

  <property>

    <name>yarn.nodemanager.local-dirs</name>

    <value>/opt/yarn/hadoop/nmdir</value>

  </property>

 

  <property>

    <name>yarn.nodemanager.log-dirs</name>

    <value>/opt/yarn/logs</value>

  </property>

 

  <property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

  </property> 

 

  <property>

    <description>Where to aggregate logs</description>

    <name>yarn.nodemanager.remote-app-log-dir</name>

    <value>hdfs://ns1/var/log/hadoop-yarn/apps</value>

  </property>

 

  <!-- Resource Manager Configs -->

  <property>

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

    <value>2</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>

 

  <property>

    <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>

    <value>true</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.cluster-id</name>

    <value>ns1</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.ha.rm-ids</name>

    <value>rm1,rm2</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.ha.id</name>

    <value>rm1</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.resourcemanager.zk.state-store.address</name>

    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

  </property>

 

  <property>

    <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>

    <value>5</value>

  </property>

 

  <!-- RM1 configs -->



  <property>

    <name>yarn.resourcemanager.address.rm1</name>

    <value>hadoop1:23140</value>

  </property>



  <property>

    <name>yarn.resourcemanager.scheduler.address.rm1</name>

    <value>hadoop1:23130</value>

  </property>



  <property>

    <name>yarn.resourcemanager.webapp.https.address.rm1</name>

    <value>hadoop1:23189</value>

  </property>



  <property>

    <name>yarn.resourcemanager.webapp.address.rm1</name>

    <value>hadoop1:23188</value>

  </property>


  <property>

    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>

    <value>hadoop1:23125</value>

  </property>



  <property>

    <name>yarn.resourcemanager.admin.address.rm1</name>

    <value>hadoop1:23141</value>

  </property>

 

<!-- RM2 configs -->

 

  <property>

    <name>yarn.resourcemanager.address.rm2</name>

    <value>hadoop2:23140</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.scheduler.address.rm2</name>

    <value>hadoop2:23130</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.webapp.https.address.rm2</name>

    <value>hadoop2:23189</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.webapp.address.rm2</name>

    <value>hadoop2:23188</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.resource-tracker.address.rm2</name>

    <value>hadoop2:23125</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.admin.address.rm2</name>

    <value>hadoop2:23141</value>

 

  </property>

 

<!-- Node Manager Configs -->

  <property>

    <description>Address where the localizer IPC is.</description>

    <name>yarn.nodemanager.localizer.address</name>

    <value>0.0.0.0:23344</value>

  </property>

 

  <property>

    <description>NM Webapp address.</description>

    <name>yarn.nodemanager.webapp.address</name>

    <value>0.0.0.0:23</value>

  </property>

 

  <property>

    <name>yarn.nodemanager.local-dirs</name>

    <value>/opt/yarn/nodemanager/yarn/local</value>

  </property>

 

  <property>

    <name>yarn.nodemanager.log-dirs</name>

    <value>/opt/yarn/nodemanager/yarn/log</value>

  </property>

 

  <property>

    <name>mapreduce.shuffle.port</name>

    <value>23080</value>

  </property>

 

  <property>

    <name>yarn.resourcemanager.zk-address</name>

    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

  </property>
</configuration>

 

4.  配置mapred-site.xml

<configuration>

 

  <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

  </property>

 

 

<!-- configure historyserver -->

  <property>

    <name>mapreduce.jobhistory.address</name>

    <value>hadoop4:10020</value>

  </property>

 

<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop4:19</value>
</property>


<property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>-1</value>
</property>

<property>
    <name>mapreduce.reduce.shuffle.parallelcopies</name>
    <value>20</value>
</property>
</configuration>

5.  配置slaves文件

和上述文件在同一个目录中的slaves文件,写入:

hadoop1
hadoop2
hadoop3
hadoop4

 

四:启动hadoop集群(步骤很重要)

1.  启动zookeeper集群(hadoop1,hadoop2,hadoop3上执行)

执行 : zkServer.sh start

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

三个节点都启动后查看状态,一个 leader  两个follower

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

此时执行jps查看进程,启动了QuorumPeerMain

 2.  启动journalnode (hadoop1,hadoop2,hadoop3上执行)

执行: hadoop-daemon.sh start journalnode

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

此时查看进程,多了JournalNode进程

3.  格式化HDFS(hadoop1上执行)

执行: hdfs namenode -format

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

4.  格式化ZK

执行:hdfs zkfc -formatZK

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

5.  启动hadoop1的namenode,zkfc

执行: hadoop-daemon.sh start namenode   , hadoop-daemon.sh start zkfc

此时查看进程,zkfc,namenode都启动了。

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

6.  hadoop2上数据同步格式化的hadoop1上的hdfs

执行: hdfs namenode -bootstrapStandby

然后同hadoop1一样启动namenode和zkfc。

7.  启动HDFS: 

执行:start-dfs.sh

8.  启动YARN

执行:start-yarn.sh

9.  hadoop4上启动 JobHistoryServer

执行: mr-jobhistory-daemon.sh start historyserver

 

现在全部启动好了。然后看看各节点功能和进程是否对应启动好。

 

至此。都已启动好。可通过浏览器访问:

1.  http://192.168.79.101:50070
     NameNode 'hadoop1:9' (standby)

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

 


 2.   http://192.168.79.102:50070
          NameNode 'hadoop2:9' (active)

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

 

3.  http://192.168.79.104:19/ 

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

 4.  http://192.168.79.102:8088/

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

 

五. 验证

1.  验证hdfs HA

首先向hdfs上传一个文件:    hadoop fs -put /usr/local/soft/jdk-7u75-linux-x64.gz /soft

然后查看: hadoop fs -ls /

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

然后再kill掉active的NameNode。然后浏览器访问 看到  hadoop1变成active的了。

在执行命令:hadoop fs -ls /

文件还在。然后再启动刚才停掉的namenode 。然后访问,变成standby的了。

2.  验证YARN

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

自己写了个word.txt  写入几个单词测试 :

hello jerry
hello tom
hello world

上传word.txt 到hdfs:  hadoop fs -put /home/word.txt /input

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

然后运行: hadoop jar /usr/local/tools/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /input /out

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

 

成功后查看:  按照自己的目录,我的命令是写入到out 目录 。

  hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

hadoop2.x 完全分布式详细集群搭建(图文:4台机器)

 

 

OK,至此就完成hadoop学习的第一课了。

 

更多相关文章
  • 在学内存分配的问题的时候,malloc和calloc都要指定需要分配内存的大小,但是free的就不需要,我就纳闷free是咋知道从指针地址开始的多少长度是被分配了的? 当时就想,在malloc或者calloc的时候,编译器应该把大小的数值放到哪个地方了,当free的时候就去找那个数值,释放掉数值大小 ...
  • 最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后,可以迅速开发出一个可扩展的应用程序.   简 介 MEF(Managed Extensibilit ...
  • 本章实验测试环境说明如表13-1所示. 表13-1   测试环境 备 注 操作系统 Binwalk 2.0   文件系统提取工具 Ubuntu 12.04   调试器 IDA 6.1   利用代码解释器 Python 2.7     13.1 漏洞介绍 Linksys WRT54G是一款SOHO无线 ...
  • 近期,Google开源了强大的自动化构建工具Bazel.正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理和使用方法.以下是分享的目录: Google Bazel原理篇:Google分布式构建软件之第一部分: ...
  • 在运行模拟器的时候.LogCat 输出很多Unexpected value from nativeGetEnabledTags: 0 提示,导致很多本来需要输出的信息被瞬间覆盖了,查询后得知是sdk的一个bug.解决方法:在 LogCat 左面有一个filter按钮,点开在by log messag ...
  • 上海警方3日披露,成功破获诈骗网络汽车租赁公司汽车系列案件,捣毁以韩某为首的诈骗团伙,抓获8名涉案犯罪嫌疑人,追缴12辆涉案车辆,挽回经济损失300余万元.警方披露,2014年12月18日,某租车公司工作人员带了一名青年男子周某到浦东警方报案.这名工作人员称,周某通过手机APP软件租赁过该公司1辆奔 ...
一周排行
  • XE6中项目文件为DPR,查看方法请参考一下以前写过的博文: "Delphi项目构成之项目文件DPR" 项目文件DPR 通过主菜单Project View Source],就可以看到缺省的 VCL ...
  • <%@ page import="java.util.Date,yava.fileapp.*,java.sql.*;"         contentType="text/html ...
  • 字符,字节和编码[原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm]级别:中级摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解.举例说明了一些实际 ...
  • 导 读:PING 是一个用来检测网络连接速度的使用工具,下面的文章将介绍在C#中利用System.Net.Sockets 来创建一个自己的PING 工具. -- PING 是一个用来检测网络连接速度的工具,它会在本机 ...
  • 题目1:序列123...N,N介于3和9之间,在其中加入+.-或者空格,使其和为0.如123456  5+6 7 等价于5+67=0.请问,如何获得所有组合? 题目2:求数组的子数组之和最 ...
  •   c#程序是通过安装.net安装包才能运行的,因此有时候很不方便,必须要用户安装一个.net安装包,虽然系统会带有这个,但是还有相当的电脑是不装这个的.这样我们怎么才能避免这个问题呢.查了很多资料和网上的同行们的说 ...
  • 一.ColorImageFormat:彩色图像帧的格式 RawYuvResolution640x480Fps15 原始YUV格式,分辨率是640x480,每秒15帧: RgbResolution1280x960Fps ...
  • #include<iostream> using namespace std; int book[51][51]={0}; int a[51][51]; int sum; int n,m; void df ...
  • ubuntu可以联网但是apt下载不了东西怎么办?使用ubuntu下载v4l库的时候,下载不了数据:那是因为linux长期不上网更新了,下面我们一起来看看解决办法 使用ubuntu下载v4l库的时候,下载不了数据: ...
  • 引: 在数据仓库项目中 有一类和生产或者外围系统交互的接口称为FTP文件接口, 用kettle开发.实现这种接口 配置脚本时,经常需要用时间变量来取或者上传FTP里面 固定格式文件名的文本,例如 生产系统定时 每天推 ...