hadoop2

(1)hadoop2课程内容

1.体系结构、源码编译
  HDFS+MapReduce。共同点都是分布式的,主从关系结构。
  HDFS是包括主节点NameNode,只有一个;还有从节点DataNode,有很多个。
  NameNode含有我们用户存储的文件的元数据信息。把这些数据存放在硬盘上,但是在运行时是加载在内存中的。
  hadoop1中的hdfs的缺点:
(1)当我们的NameNode无法在内存中加载全部元数据信息的时候,集群的寿命到头了。
(2)权限设计是不够彻底的
(3)大量小文件的存储的话,会造成NameNode的内存压力骤增。
改进:
(1)2个NameNode一起共存,组成hdfs federation。
(2)HA(高可靠) 自动、手工  

  MapReduce包括主节点JobTracker,只有一个;还有从节点TaskTracker,有很多个。
  JobTracker主要的工作是管理用户提交的作业和分配资源。

hadoop1中的MapReduce的 缺点:
(1)对于实时性作业和批处理作业,需要搭建不同的集群环境,每个集群的资源利用率是不高的。
(2)MapReduce职责过多,需要分解。
  Yarn是一个平台,用于处理资源分配和运行任务的。
2.HDFS部署安装
3.Yarn



(2)hadoop2集群搭建过程

在这里我们选用4台机器进行示范,各台机器的职责如下表格所示

 

hadoop0

hadoop1

hadoop2

hadoop3

NameNode?

是,属集群cluster1

是,属集群cluster1

是,属集群cluster2

是,属集群cluster2

DataNode吗?

JournalNode吗?

ZooKeeper吗?

ZKFC?

 

 

1. 搭建自动HA

1.1. 复制编译后的hadoop项目到/usr/local目录下

1.2. 修改位于etc/hadoop目录下的配置文件

1.2.1. hadoop-env.sh

export JAVA_HOME=/usr/local/jdk

1.2.2. core-site.xml

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

【这里的值指的是默认的HDFS路径。当有多个HDFS集群同时工作时,用户如果不写集群名称,那么默认使用哪个哪?在这里指定!该值来自于hdfs-site.xml中的配置在节点hadoop0hadoop1中使用cluster1,在节点hadoop2hadoop3中使用cluster2
<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/hadoop/tmp</value>
</property>

【这里的路径默认是NameNodeDataNodeJournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。】
<property>
  <name>ha.zookeeper.quorum</name>
  <value>hadoop0:2181,hadoop1:2181,hadoop2:2181</value>
</property>

【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】
</configuration>

1.2.3. hdfs-site.xml   

该文件只配置在hadoop0hadoop1上。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

【指定DataNode存储block的副本数量。默认值是3个,我们现在有4DataNode,该值不大于4即可。】
    <property>
        <name>dfs.nameservices</name>
        <value>cluster1,cluster2</value>
    </property>

【使用federation时,使用了2HDFS集群。这里抽象出两个NameService实际上就是给这2HDFS集群起了个别名。名字可以随便起,相互不重复即可】
    <property>
        <name>dfs.ha.namenodes.cluster1</name>
        <value>hadoop0,hadoop1</value>
    </property>

【指定NameServicecluster1时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可】
    <property>
        <name>dfs.namenode.rpc-address.cluster1.hadoop0</name>
        <value>hadoop0:9000</value>
    </property>

【指定hadoop0RPC地址】
    <property>
        <name>dfs.namenode.http-address.cluster1.hadoop0</name>
        <value>hadoop0:50070</value>
    </property>

【指定hadoop0http地址】
    <property>
        <name>dfs.namenode.rpc-address.cluster1.hadoop1</name>
        <value>hadoop1:9000</value>
    </property>

【指定hadoop1RPC地址】

<property>
        <name>dfs.namenode.http-address.cluster1.hadoop1</name>
        <value>hadoop1:50070</value>
    </property>

【指定hadoop1http地址】
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop0:8485;hadoop1:8485;hadoop2:8485/cluster1</value>
    </property>
【指定cluster1的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】

<property>
        <name>dfs.ha.automatic-failover.enabled.cluster1</name>
        <value>true</value>
    </property>
【指定cluster1是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode

<property>
        <name>dfs.client.failover.proxy.provider.cluster1</name>
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

【指定cluster1出故障时,哪个实现类负责执行故障切换】

 

 

 


    <property>
        <name>dfs.ha.namenodes.cluster2</name>
        <value>hadoop2,hadoop3</value>
    </property>

【指定NameServicecluster2时,两个NameNode是谁,这里是逻辑名称,不重复即可。以下配置与cluster1几乎全部相似,不再添加注释】
    <property>
        <name>dfs.namenode.rpc-address.cluster2.hadoop2</name>
        <value>hadoop2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.cluster2.hadoop2</name>
        <value>hadoop2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.cluster2.hadoop3</name>
        <value>hadoop3:9000</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.cluster2.hadoop3</name>
        <value>hadoop3:50070</value>
    </property>
    <!--
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop0:8485;hadoop1:8485;hadoop2:8485/cluster2</value>
    </property>

【这段代码是注释掉的,不要打开】
    -->
<property>
        <name>dfs.ha.automatic-failover.enabled.cluster2</name>
        <value>true</value>
    </property>
<property>
        <name>dfs.client.failover.proxy.provider.cluster2</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

 

 


<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/tmp/journal</value>
</property>

【指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径】
<property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

【一旦需要NameNode切换,使用ssh方式进行操作】
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>

【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】

</configuration>

 

1.2.4. slaves

hadoop1

hadoop2

hadoop2

1.3. 把以上配置的内容复制到hadoop1hadoop2hadoop3节点上

1.4. 修改hadoop1hadoop2hadoop3上的配置文件内容

1.4.1. 修改hadoop2上的core-site.xml内容

fs.defaultFS的值改为hdfs://cluster2

1.4.2. 修改hadoop2上的hdfs-site.xml内容

cluster1中关于journalnode的配置项删除,增加如下内容

<property>

    <name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://hadoop0:8485;hadoop1:8485;hadoop2:8485/cluster2</value>

</property>

1.4.3. 开始启动

1.4.3.1. 启动journalnode

hadoop0hadoop1hadoop2上执行sbin/hadoop-daemon.sh start journalnode

1.4.3.2. 格式化ZooKeeper

hadoop0hadoop2上执行bin/hdfs  zkfc  -formatZK

1.4.3.3. 对hadoop0节点进行格式化和启动

bin/hdfs  namenode  -format

sbin/hadoop-daemon.sh  start  namenode

1.4.3.4. 对hadoop1节点进行格式化和启动  

bin/hdfs  namenode  -bootstrapStandby

sbin/hadoop-daemon.sh  start  namenode

1.4.3.5. 在hadoop0hadoop1上启动zkfc

sbin/hadoop-daemon.sh   start   zkfc

我们的hadoop0hadoop1有一个节点就会变为active状态。

1.4.3.6. 对于cluster2执行类似操作

1.4.4. 启动datanode

hadoop0上执行命令sbin/hadoop-daemons.sh   start   datanode

1.5. 配置Yarn

1.5.1. 修改文件mapred-site.xml

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

1.5.2.  修改文件yarn-site.xml

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop0</value>
 </property>   

【自定ResourceManager的地址,还是单点,这是隐患】

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
 </property>

 

1.5.3. 启动yarn

在hadoop0上执行sbin/start-yarn.sh          






扩展:如何编译Apache+Hadoop2?

如何编译Apache Hadoop2.2.0源代码  

hadoop2的学习资料很少,只有官网的少数文档。如果想更深入的研究hadoop2,除了仅看官网的文档外,还要学习如何看源码,通过不断的调试跟踪源码,学习hadoop的运行机制。

 

1.安装CentOS

我使用的是CentOS6.5,下载地址是http://mirror.neu.edu.cn/centos/6.5/isos/x86_64/,选择CentOS-6.5-x86_64-bin-DVD1.iso 下载,注意是64位的,大小是4GB,需要下载一段时间的。其实6.x的版本都可以,不一定是6.5。

我使用的是VMWare虚拟机,分配了2GB内存,20GB磁盘空间。内存太小,会比较慢;磁盘太小,编译时可能会出现空间不足的情况。上述不是最低配置,根据自己的机器配置修改吧。还有,一定要保持linux联网状态。

 

以下是按照各种软件,我把软件下载后全部复制到/usr/local目录下,以下命令执行的路径是在/usr/local目录下。请读者在阅读时,一定要注意路径。

 

2.安装JDK

hadoop是java写的,编译hadoop必须安装jdk。

从oracle官网下载jdk,下载地址是http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,选择 jdk-7u45-linux-x64.tar.gz下载。

 

执行以下命令解压缩jdk

    tar -zxvf  jdk-7u45-linux-x64.tar.gz

会生成一个文件夹jdk1.7.0_45,然后设置环境变量中。

执行命令 vi /etc/profile,增加以下内容到配置文件中,结果显示如下

image

 

 

3.安装maven

hadoop源码是使用maven组织管理的,必须下载maven。从maven官网下载,下载地址是http://maven.apache.org/download.cgi,选择 apache-maven-3.0.5-bin.tar.gz 下载,不要选择3.1下载。

执行以下命令解压缩jdk

    tar -zxvf  apache-maven-3.0.5-bin.tar.gz

会生成一个文件夹apache-maven-3.0.5,然后设置环境变量中。

执行命令vi  /etc/profile,编辑结果如下图所示

image

 

 

4.安装findbugs(可选步骤)

findbugs是用于生成文档的。如果不需要编译生成文档,可以不执行该步骤。从findbugs官网下载findbugs,下载地址是http://sourceforge.jp/projects/sfnet_findbugs/releases/,选择findbugs-3.0.0-dev-20131204-e3cbbd5.tar.gz下载。

 

执行以下命令解压缩jdk

    tar -zxvf  findbugs-3.0.0-dev-20131204-e3cbbd5.tar.gz

会生成一个文件夹findbugs-3.0.0-dev-20131204-e3cbbd5,然后设置环境变量中。

执行命令vi  /etc/profile,编辑结果如下图所示

image

 

5.安装protoc

hadoop使用protocol buffer通信,从protoc官网下载protoc,下载地址是https://code.google.com/p/protobuf/downloads/list,选择protobuf-2.5.0.tar.gz 下载。

 

为了编译安装protoc,需要下载几个工具,顺序执行以下命令

    yum install gcc  
    yum intall gcc-c++  
    yum install make

如果操作系统是CentOS6.5那么gcc和make已经安装了。其他版本不一定。在命令运行时,需要用户经常输入“y”。

 

然后执行以下命令解压缩protobuf

    tar -zxvf  protobuf-2.5.0.tar.gz

会生成一个文件夹protobuf-2.5.0,执行以下命令编译protobuf。

    cd protobuf-2.5.0  
    ./configure --prefix=/usr/local/protoc/  
    make && make install

只要不出错就可以了。

执行完毕后,编译后的文件位于/usr/local/protoc/目录下,我们设置一下环境变量

执行命令vi  /etc/profile,编辑结果如下图所示

image

 

6.安装其他依赖

顺序执行以下命令

    yum install cmake  
    yum install openssl-devel  
    yum install ncurses-devel

安装完毕即可。

 

7.编译hadoop2.2源码

从hadoop官网下载2.2稳定版,下载地址是http://apache.fayea.com/apache-mirror/hadoop/common/stable2/,下载hadoop-2.2.0-src.tar.gz   下载。

 

执行以下命令解压缩jdk

    tar -zxvf hadoop-2.2.0-src.tar.gz

会生成一个文件夹 hadoop-2.2.0-src。源代码中有个bug,这里需要修改一下,编辑目录/usr/local/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth中的文件pom.xml,执行以下命令

gedit pom.xml

在第55行下增加以下内容

     <dependency>
         <groupId>org.mortbay.jetty</groupId>
         <artifactId>jetty-util</artifactId>
         <scope>test</scope>
    </dependency>

保存退出即可。

 

上述bug详见https://issues.apache.org/jira/browse/HADOOP-10110,在hadoop3中修复了,离我们太遥远了。

 

好了,现在进入到目录/usr/local/hadoop-2.2.0-src中,执行命令

mvn package -DskipTests -Pdist,native,docs

如果没有执行第4步,把上面命令中的docs去掉即可,就不必生成文档了。

该命令会从外网下载依赖的jar,编译hadoop源码,需要花费很长时间,你可以吃饭了。

在等待n久之后,可以看到如下的结果:

[INFO] Apache Hadoop Main ................................ SUCCESS [6.936s]
[INFO] Apache Hadoop Project POM ......................... SUCCESS [4.928s]
[INFO] Apache Hadoop Annotations ......................... SUCCESS [9.399s]
[INFO] Apache Hadoop Assemblies .......................... SUCCESS [0.871s]
[INFO] Apache Hadoop Project Dist POM .................... SUCCESS [7.981s]
[INFO] Apache Hadoop Maven Plugins ....................... SUCCESS [8.965s]
[INFO] Apache Hadoop Auth ................................ SUCCESS [39.748s]
[INFO] Apache Hadoop Auth Examples ....................... SUCCESS [11.081s]
[INFO] Apache Hadoop Common .............................. SUCCESS [10:41.466s]
[INFO] Apache Hadoop NFS ................................. SUCCESS [26.346s]
[INFO] Apache Hadoop Common Project ...................... SUCCESS [0.061s]
[INFO] Apache Hadoop HDFS ................................ SUCCESS [12:49.368s]
[INFO] Apache Hadoop HttpFS .............................. SUCCESS [41.896s]
[INFO] Apache Hadoop HDFS BookKeeper Journal ............. SUCCESS [41.043s]
[INFO] Apache Hadoop HDFS-NFS ............................ SUCCESS [9.650s]
[INFO] Apache Hadoop HDFS Project ........................ SUCCESS [0.051s]
[INFO] hadoop-yarn ....................................... SUCCESS [1:22.693s]
[INFO] hadoop-yarn-api ................................... SUCCESS [1:20.262s]
[INFO] hadoop-yarn-common ................................ SUCCESS [1:30.530s]
[INFO] hadoop-yarn-server ................................ SUCCESS [0.177s]
[INFO] hadoop-yarn-server-common ......................... SUCCESS [15.781s]
[INFO] hadoop-yarn-server-nodemanager .................... SUCCESS [40.800s]
[INFO] hadoop-yarn-server-web-proxy ...................... SUCCESS [6.099s]
[INFO] hadoop-yarn-server-resourcemanager ................ SUCCESS [37.639s]
[INFO] hadoop-yarn-server-tests .......................... SUCCESS [4.516s]
[INFO] hadoop-yarn-client ................................ SUCCESS [25.594s]
[INFO] hadoop-yarn-applications .......................... SUCCESS [0.286s]
[INFO] hadoop-yarn-applications-distributedshell ......... SUCCESS [10.143s]
[INFO] hadoop-mapreduce-client ........................... SUCCESS [0.119s]
[INFO] hadoop-mapreduce-client-core ...................... SUCCESS [55.812s]
[INFO] hadoop-yarn-applications-unmanaged-am-launcher .... SUCCESS [8.749s]
[INFO] hadoop-yarn-site .................................. SUCCESS [0.524s]
[INFO] hadoop-yarn-project ............................... SUCCESS [16.641s]
[INFO] hadoop-mapreduce-client-common .................... SUCCESS [40.796s]
[INFO] hadoop-mapreduce-client-shuffle ................... SUCCESS [7.628s]
[INFO] hadoop-mapreduce-client-app ....................... SUCCESS [24.066s]
[INFO] hadoop-mapreduce-client-hs ........................ SUCCESS [13.243s]
[INFO] hadoop-mapreduce-client-jobclient ................. SUCCESS [16.670s]
[INFO] hadoop-mapreduce-client-hs-plugins ................ SUCCESS [3.787s]
[INFO] Apache Hadoop MapReduce Examples .................. SUCCESS [17.012s]
[INFO] hadoop-mapreduce .................................. SUCCESS [6.459s]
[INFO] Apache Hadoop MapReduce Streaming ................. SUCCESS [12.149s]
[INFO] Apache Hadoop Distributed Copy .................... SUCCESS [15.968s]
[INFO] Apache Hadoop Archives ............................ SUCCESS [5.851s]
[INFO] Apache Hadoop Rumen ............................... SUCCESS [18.364s]
[INFO] Apache Hadoop Gridmix ............................. SUCCESS [14.943s]
[INFO] Apache Hadoop Data Join ........................... SUCCESS [9.648s]
[INFO] Apache Hadoop Extras .............................. SUCCESS [5.763s]
[INFO] Apache Hadoop Pipes ............................... SUCCESS [16.289s]
[INFO] Apache Hadoop Tools Dist .......................... SUCCESS [3.261s]
[INFO] Apache Hadoop Tools ............................... SUCCESS [0.043s]
[INFO] Apache Hadoop Distribution ........................ SUCCESS [56.188s]
[INFO] Apache Hadoop Client .............................. SUCCESS [10.910s]
[INFO] Apache Hadoop Mini-Cluster ........................ SUCCESS [0.321s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 40:00.444s
[INFO] Finished at: Thu Dec 26 12:42:24 CST 2013
[INFO] Final Memory: 109M/362M
[INFO] ------------------------------------------------------------------------

好了,编译完成了。

编译后的代码在/usr/local/hadoop-2.2.0-src/hadoop-dist/target下面,如下图。

<a href="http://www.superwu.cn/wp-content/uploads/2013/12/image12.png" class="cboxElement" rel="example4" 913"="" style="text-decoration: none; color: rgb(1, 150, 227);">image

 

如果有的同学操作失败,可以直接下载我已经安装好的镜像文件,链接:http://pan.baidu.com/share/link?shareid=956286972&uk=2032187724 密码:n0kf







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值