• hadoop2.2.0集群安装和配置


    hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。

    注意:apache提供的hadoop-2.2.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,

    所以如果在64位的操作上安装hadoop-2.2.0就需要重新在64操作系统上重新编译





    集群规划:

    主机名 IP 安装的软件 运行的进程

    cloud1 192.168.61.128jdk、hadoopNameNode、DFSZKFailoverController

    cloud2 192.168.61.129jdk、hadoopNameNode、DFSZKFailoverController

    cloud3 192.168.61.130jdk、hadoopResourceManager

    cloud4 192.168.61.131jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、

    QuorumPeerMain

    cloud5 192.168.61.132jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、

    QuorumPeerMain

    cloud6 192.168.61.133jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、

    QuorumPeerMain



    以上所有机器使用的用户均为cloud


    说明:

    在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。

    Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态

    ,以便能够在它失败时快速进行切换。hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的

    QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数

    JournalNode即认为写入成功。通常配置奇数个JournalNode

    这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active 

    NameNode挂掉了,会自动切换Standby NameNode为standby状态


    修改主机名和IP的映射关系

    使用的服务器是云主机(如华为用主机、阿里云主机等)映射的ip地址要填写内网地址

    vi /etc/hosts

    192.168.61.128 cloud1

    192.168.61.129 cloud2

    192.168.61.130 cloud3

    192.168.61.131 cloud4

    192.168.61.132 cloud5

    192.168.61.133 cloud6

    关闭系统防火墙

    service iptables stop

    chkconfig iptables off

    reboot



    安装jdk:

    使用root用户

    在usr目录下新建java目录。

    将jdk上传到linux中

    在/usr/java下

    chmod 755 jdk-6u45-linux-i586.bin

    ./jdk-6u45-linux-i586.bin

    mv jdk1.6.0_45 jdk

    vi /etc/profile

    export JAVA_HOME=/usr/java/jdk

    export HADOOP_HOME=/home/cloud/hadoop

    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

    source /etc/profile

    先把hadoop的环境变量也 配置上(注意每个HADOOP_HOME的路径)

    使用ssh将安装好的jdk传到其他的机器上,在再其他的机器上修改profile文件即可

    以上安装步骤所有机器都要执行


    安装Zookeeper集群

    将zk上传到linux中安装

    tar -zxvf zookeeper-3.4.5.tar.gz

    修改配置

    mv zookeeper-3.4.5 zookeeper

    cd ~/zookeeper/conf/

    cp zoo_sample.cfg zoo.cfg

    vi zoo.cfg

    修改:dataDir=/home/cloud/zookeeper/tmp

    在最后添加:

    server.1=cloud4:2888:3888

    server.2=cloud5:2888:3888

    server.3=cloud6:2888:3888

    保存退出

    然后创建一个tmp文件夹

    mkdir ~/zookeeper/tmp

    再创建一个空文件

    touch ~/zookeeper/tmp/myid

    最后向该文件写入ID

    echo 1 > ~/zookeeper/tmp/myid


    将配置好的zookeeper拷贝到其他节点

    scp -r ~/zookeeper/ cloud5:/home/cloud/

    scp -r ~/zookeeper/ cloud6:/home/cloud/

    注意:修改cloud5、cloud6对应/cloud/zookeeper/tmp/myid内容

    cloud5:

    echo 2 > ~/zookeeper/tmp/myid

    cloud6:

    echo 3 > ~/zookeeper/tmp/myid



    安装hadoop集群(先在cloud1上安装完毕之后再通过ssh传递到其他机器):

    tar -zxvf hadoop-2.2.0-64bit.tar.gz

    mv hadoop-2.2.0 hadoop

    cd ~/hadoop/etc/hadoop


    修改hadoop-env.sh

    加入

    export JAVA_HOME=/usr/java/jdk


    修改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>/home/cloud/hadoop/tmp</value>

    </property>

    <!-- 指定zookeeper地址 -->

    <property>

    <name>ha.zookeeper.quorum</name>

    <value>cloud4:2181,cloud5:2181,cloud6:2181</value>

    </property>

    </configuration>


    修改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>cloud1:9000</value>
    </property>
    <!-- nn1的http通信地址 -->
    <property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>cloud1:50070</value>

    </property>

    <!-- nn2的RPC通信地址 -->

    <property>

    <name>dfs.namenode.rpc-address.ns1.nn2</name>

    <value>cloud2:9000</value>

    </property>

    <!-- nn2的http通信地址 -->

    <property>

    <name>dfs.namenode.http-address.ns1.nn2</name>

    <value>cloud2:50070</value>

    </property>

    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

    <property>

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

    <value>qjournal://cloud4:8485;cloud5:8485;cloud6:8485/ns1</value>

    </property>

    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->

    <property>

    <name>dfs.journalnode.edits.dir</name>

    <value>/home/cloud/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/cloud/.ssh/id_rsa</value>

    </property>

    <!-- 配置sshfence隔离机制超时时间 -->

    <property>

    <name>dfs.ha.fencing.ssh.connect-timeout</name>

    <value>30000</value>

    </property>

    </configuration>



    修改mapred-site.xml

    <configuration>

    <!-- 指定mr框架为yarn方式 -->

    <property>

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

    <value>yarn</value>

    </property>

    </configuration>



    修改yarn-site.xml

    <configuration>

    <!-- 指定resourcemanager地址 -->

    <property>

    <name>yarn.resourcemanager.hostname</name>

    <value>cloud3</value>

    </property>

    <!-- 指定nodemanager启动时加载server的方式为shuffle server -->

    <property>

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

    <value>mapreduce_shuffle</value>

    </property>

    </configuration>



    修改slaves

    cloud4

    cloud5

    cloud6

    slaves是指定子节点的位置,因为要在cloud1上启动HDFS、

    在cloud3启动yarn,所以cloud1上的slaves文件指定的是datanode的位置,cloud3上的slaves文件指定的

    是nodemanager的位置



    配置ssh免密码登陆

    在每台机器上都执行下列命令

    chmod -R 755 /home/cloud
    mkdir ~/.ssh
    ssh-keygen -t rsa
    ssh-keygen -t dsa

    之后在cloud1上收集各个机器的公钥
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


    ssh cloud2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud4 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud5 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud6 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    将公钥拷贝到其他节节点



    scp ~/.ssh/authorized_keys cloud2:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud3:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud4:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud5:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud6:~/.ssh/authorized_keys

    在每台机器上都执行(很重要,注意配置ssh的时候要使用cloud用户来配置)

    chmod -R 700 ~/.ssh

    将配置好的hadoop拷贝到其他节点

    scp -r ~/hadoop/ cloud2:~/
    scp -r ~/hadoop/ cloud3:~/
    scp -r ~/hadoop/ cloud4:~/
    scp -r ~/hadoop/ cloud5:~/
    scp -r ~/hadoop/ cloud6:~/


    启动zookeeper集群(分别在cloud4、cloud5、cloud6上启动zk)

    cd ~/zookeeper/bin/

    ./zkServer.sh start

    #查看状态:一个leader,两个follower

    ./zkServer.sh status


    启动journalnode(在cloud1上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)

    cd ~/hadoop

    ~/hadoop/sbin/hadoop-daemons.sh start journalnode

    #运行jps命令检验,cloud4、cloud5、cloud6上多了JournalNode进程


    格式化HDFS(在bin目录下)

    #在cloud1上执行命令:

    ./hdfs namenode -format

    #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里

    我配置的是~/hadoop/tmp,然后将~/hadoop/tmp拷贝到cloud2的~/hadoop/下。

    scp -r ~/hadoop/tmp/ cloud2:~/hadoop/


    格式化ZK(在cloud1上执行即可,在bin目录下)

    ./hdfs zkfc -formatZK


    启动HDFS(在cloud1上执行)

    ~/hadoop/sbin/start-dfs.sh


    启动YARN(#####注意#####:是在cloud3上执行start-yarn.sh,把namenode和

    resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就

    要分别在不同的机器上启动)

    ~/hadoop/sbin/start-yarn.sh

    到此,hadoop2.2.0配置完毕,可以统计浏览器访问:

    http://192.168.61.128:50070

    NameNode 'cloud1:9000' (active)

    http://192.168.61.129:50070
    NameNode 'cloud2:9000' (standby)



    验证HDFS HA

    首先向hdfs上传一个文件

    hadoop fs -put /etc/profile /profile

    hadoop fs -ls /

    然后再kill掉active的NameNode

    kill -9 <pid of NN>

    通过浏览器访问:http://192.168.1.202:50070

    NameNode 'cloud2:9000' (active)

    这个时候cloud02上的NameNode变成了active

    在执行命令:

    hadoop fs -ls /

    -rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile

    刚才上传的文件依然存在!!!

    手动启动那个挂掉的NameNode

    sbin/hadoop-daemon.sh start namenode

    通过浏览器访问:http://192.168.1.201:50070

    NameNode 'cloud1:9000' (standby)

    验证YARN:

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

    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar 

    wordcount /profile /out

    OK,大功告成!!!



  • 相关阅读:
    ubuntu server编译安装nginx
    XPath具体解释
    windows下安装,配置gcc编译器
    给字符数组赋值的方法
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    MiinCMP1.0 SAE 新浪云版公布, 开源企业站点系统
    Mac下cocos2dx-3.0打包Android时,提示&quot;SimpleAudioEngine.h&quot;not found的解决方法
    GG同步到sqlserver报错一例 Invalid date format
    分布式文件系统
    动画clip仅仅读的解决的方法,以及动画关键帧回调的办法
  • 原文地址:https://www.cnblogs.com/jchubby/p/4429692.html
Copyright © 2020-2023  润新知