zoukankan      html  css  js  c++  java
  • tachyon 集群容错


    集群容错就是HA。这次顺带也练一下hadoop的HA


    环境:

    centos6.5+jdk1.7+hadoop2.2.0+tachyon0.5.0+zookeeper3.4.6

    hadoop 192.168.1.107

    slave1 192.168.1.108

    slave2 192.168.1.109

    (全虚拟机)


    1. 在三台机器上安装jdk,关闭SELINUX,关闭防火墙,配置SSH免密码登陆(hadoop到其他机器上的和slave1到其他机器上的),修改 hosts文件

    。。。 。。。


    2. 安装zookeeper

    2.1 下载解压

    。。。 。。。

    2.2 在zookeeper目录下创建 data 目录和 logs 目录

    mkdir data
    mkdir logs

    2.3 配置环境变量(root)

    vi /etc/profile
    export ZOO_HOME=/home/hadoop/zookeeper-3.4.6/
    export ZOO_LOG_DIR=/home/hadoop/zookeeper-3.4.6/logs
    export PATH=$PAHT:$ZOO_HOME/bin

    2.4 配置zoo.cfg(从zoo_sample.cfg复制)

    2.4.1 修改dataDir

    dataDir=/home/hadoop/zookeeper-3.4.6/data

    2.4.2 增加server

    server.1=hadoop:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888

    2.5 在/home/hadoop/zookeeper-3.4.6/data 下面新增一个文件myid,内容为1

    echo 1 > /home/hadoop/zookeeper-3.4.6/data/myid

    2.6 把zookeeper 文件夹复制到其他节点
    。。。 。。。

    2.7 把slave1上的myid文件内容改为2,把slave2上的myid文件内容改为3

    .。。 。。。

    2.8 启动测试,查看角色(三个都要启)

    zkServer.sh start
    zkServer.sh status

    3. 安装hadoop2.2.0
    3.1 下载解压

    。。。 。。。

    3.2 配置环境变量

    。。。 。。。

    3.3 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh 文件中的JAVA_HOME变量

    。。。 。。。

    3.4 修改core-site.xml

     1 <configuration>
     2    <!-- 指定hdfs的nameservice为ns1 -->
     3    <property>
     4       <name>fs.defaultFS</name>
     5       <value>hdfs://ns1</value>
     6    </property>
     7    <!-- 指定hadoop临时目录 -->
     8    <property>
     9       <name>hadoop.tmp.dir</name>
    10       <value>/home/hadoop/hadoop-2.2.0/tmp</value>
    11    </property>
    12    <!-- 指定zookeeper地址 -->
    13    <property>
    14      <name>ha.zookeeper.quorum</name>
    15       <value>hadoop:2181,slave1:2181,slave2:2181</value>
    16    </property>
    17 </configuration>

    3.5 修改hdfs-site.xml

     1 <configuration>
     2    <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
     3    <property>
     4       <name>dfs.nameservices</name>
     5       <value>ns1</value>
     6    </property>
     7    <!-- ns1下面有两个DataNode,分别是nn1,nn2 -->
     8    <property>
     9       <name>dfs.ha.namenodes.ns1</name>
    10       <value>nn1,nn2</value>
    11    </property>
    12    <!-- nn1的RPC通信地址 -->
    13    <property>
    14      <name>dfs.namenode.rpc-address.ns1.nn1</name>
    15       <value>hadoop:9000</value>
    16    </property>
    17    <!-- nn1的http通信地址 -->
    18    <property>
    19       <name>dfs.namenode.http-address.ns1.nn1</name>
    20       <value>hadoop:50070</value>
    21    </property>
    22    <!-- nn2的RPC通信地址 -->
    23    <property>
    24      <name>dfs.namenode.rpc-address.ns1.nn2</name>
    25       <value>slave1:9000</value>
    26    </property>
    27    <!-- nn2的http通信地址 -->
    28    <property>
    29      <name>dfs.namenode.http-address.ns1.nn2</name>
    30       <value>slave1:50070</value>
    31    </property>
    32    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    33    <property>
    34      <name>dfs.namenode.shared.edits.dir</name>
    35       <value>qjournal://hadoop:8485;slave1:8485;slave2:8485/ns1</value>
    36    </property>
    37    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    38    <property>
    39      <name>dfs.journalnode.edits.dir</name>
    40      <value>/home/hadoop/hadoop-2.2.0/journal</value>
    41    </property>
    42    <!-- 开启NameNode失败自动切换 -->
    43    <property>
    44      <name>dfs.ha.automatic-failover.enabled</name>
    45       <value>true</value>
    46    </property>
    47    <!-- 配置失败自动切换实现方式 -->
    48    <property>
    49      <name>dfs.client.failover.proxy.provider.ns1</name>
    50       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    51    </property>
    52    <!-- 配置隔离机制 -->
    53    <property>
    54      <name>dfs.ha.fencing.methods</name>
    55       <value>sshfence</value>
    56    </property>
    57    <!-- 使用隔离机制时需要ssh免登陆 -->
    58    <property>
    59      <name>dfs.ha.fencing.ssh.private-key-files</name>
    60       <value>/home/hadoop/.ssh/id_rsa</value>
    61    </property>
    62 </configuration>

    3.6 修改slaves

    hadoop
    slave1
    slave2

    3.7 修改yarn-site.xml

     1 <configuration>
     2    <!-- 指定resourcemanager地址 -->
     3    <property>
     4      <name>yarn.resourcemanager.hostname</name>
     5       <value>hadoop</value>
     6    </property>
     7    <!-- 指定nodemanager启动时加载server的方式为shuffle server -->
     8    <property>
     9      <name>yarn.nodemanager.aux-services</name>
    10       <value>mapreduce_shuffle</value>
    11    </property>
    12 </configuration>

    3.8 修改mapred-site.xml

    1 <configuration>
    2    <!-- 指定mr框架为yarn方式 -->
    3    <property>
    4      <name>mapreduce.framework.name</name>
    5       <value>yarn</value>
    6    </property>
    7 </configuration>

    3.9 把hadoop文件夹复制到其他两个节点
    。。。 。。。

    3.10 启动journalnode进程

    sbin/hadoop-daemons.sh start journalnode

    3.11 格式化 HDFS

    hadoop namenode -format
    scp /home/hadoop/hadoop-2.2.0/tmp/ hadoop@slave1:~/hadoop-2.2.0/

    3.12 格式化 ZK

    hdfs zkfc formatZK

    3.13 启动 HDFS

    sbin/start-dfs.sh

    3.14 启动 YARN

    sbin/start-yarn.sh

    3.15 在 slave1 上启动 namenode

    sbin/hadoop-daemon.sh start master

    4 安装 tachyon
    4.1 下载解压tachyon0.5.0-bin(如果hadoop版本不是2.4,则需要重新编译)

    .。。 。。。

    4.2 配置环境变量

    。。。 。。。

    4.3 修改 tachyon-env.sh

    JAVA_HOME=/home/hadoop/jdk1.7.0_71
    export JAVA="$JAVA_HOME/bin/java"
    export TACHYON_MASTER_ADDRESS=hadoop
    export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop:9000
    export TACHYON_WORKER_MEMORY_SIZE=512MB
    export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem
    
    CONF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    
    export TACHYON_JAVA_OPTS+="
      -Dlog4j.configuration=file:$CONF_DIR/log4j.properties
      -Dtachyon.debug=false
      -Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS
      -Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL
      -Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data
      -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers
      -Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE
      -Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/
      -Dtachyon.master.worker.timeout.ms=60000
      -Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS
      -Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/
      -Dtachyon.master.pinlist=/pinfiles;/pindata
      -Dorg.apache.jasper.compiler.disablejsr199=true
      -Dtachyon.user.default.block.size.byte=67108864
      -Dtachyon.user.file.buffer.bytes=8388608 
      -Dtachyon.usezookeeper=true
      -Dtachyon.zookeeper.address=hadoop:2181,slave1:2181,slave2:2181
    "

    4.4 复制到其他两个节点
    。。。 。。。

    4.5 修改 slave1 的 MASTER 地址

    JAVA_HOME=/home/hadoop/jdk1.7.0_71
    export JAVA="$JAVA_HOME/bin/java"
    export TACHYON_MASTER_ADDRESS=slave1
    export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop:9000
    export TACHYON_WORKER_MEMORY_SIZE=512MB
    export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem
    
    CONF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    
    export TACHYON_JAVA_OPTS+="
      -Dlog4j.configuration=file:$CONF_DIR/log4j.properties
      -Dtachyon.debug=false
      -Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS
      -Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL
      -Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data
      -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers
      -Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE
      -Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/
      -Dtachyon.master.worker.timeout.ms=60000
      -Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS
      -Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/
      -Dtachyon.master.pinlist=/pinfiles;/pindata
      -Dorg.apache.jasper.compiler.disablejsr199=true
      -Dtachyon.user.default.block.size.byte=67108864
      -Dtachyon.user.file.buffer.bytes=8388608 
      -Dtachyon.usezookeeper=true
      -Dtachyon.zookeeper.address=hadoop:2181,slave1:2181,slave2:2181
    "

    4.6 格式化 TACHYON

    tachyon format

    4.7 启动 TACHYON

    tachyon-start.sh all SudoMount

    (在其他tachyon的教程中一般命令都是"tachyon-start.sh all Mount" ,那是因为他们都是 root 用户,非 root 用户的话则要使用 “SudoMount” ,而且三个节点上的用户都应该是 sudoer )

    4.8 在 slave1 启动tachyon 的 master 进程

    tachyon-start.sh start master

    4.9 进程查看

    [hadoop@hadoop tachyon-0.5.0-bin]$ jps
    7710 DFSZKFailoverController
    7551 JournalNode
    9229 TachyonWorker
    7271 NameNode
    3361 NodeManager
    2574 QuorumPeerMain
    7374 DataNode
    9335 Jps
    3257 ResourceManager
    9106 TachyonMaster
    
    [hadoop@slave1 hadoop-2.2.0]$ jps
    2336 QuorumPeerMain
    5196 DataNode
    5283 JournalNode
    6367 TachyonWorker
    6436 TachyonMaster
    5361 DFSZKFailoverController
    2726 NodeManager
    6526 Jps
    4585 NameNode
    
    [hadoop@slave2 bin]$ jps
    10984 Jps
    8584 NodeManager
    8344 QuorumPeerMain
    10194 JournalNode
    10108 DataNode
    10931 TachyonWorker

    5 测试 HA

    先访问 http://hadoop:19999

    杀掉 hadoop 上的 master 进程(kill -9 9106)

    过几十秒后查看 http://slave1:19999


    SUCCESS

    欲为大树,何与草争;心若不动,风又奈何。
  • 相关阅读:
    2018年秋季个人阅读计划
    java当中JDBC当中JNDI用来查找dataSource的例子
    为什么要引入激活函数?
    为什么引入神经网络来做识别,判断,预测?
    给出一个生活中的最简单的两层神经网的实际例子
    MapReduce的输入文件是两个
    hadoop在eclipse当中如何添加源码?
    MapReduce的shuffle过程详解
    hadoop WordCount例子详解。
    Hadoop的eclipse的插件是怎么安装的?
  • 原文地址:https://www.cnblogs.com/admln/p/tachyon-fault-tolerant.html
Copyright © 2011-2022 走看看