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