1.Tachyon简介

Tachyon是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和 MapReduce那样。通过利用信息继承,内存侵入,Tachyon获得了高性能。Tachyon工作集文件缓存在内存中,并且让不同的 Jobs/Queries以及框架都能内存的速度来访问缓存文件。因此,Tachyon可以减少那些需要经常使用的数据集通过访问磁盘来获得的次数。

2.Tachyon能解决什么问题:(摘自Tachyon 分布式内存文件系统

1.不同FrameWork之间共享内存数据Slow问题
     给定一个场景,MapReduce任务的输出结果会存入到Tachyon里,Spark的Job会从Tachyon里读取MapReduce任务的输出作为输入。如果把Disk当作文件的落地,那么写的性能是十分低下的。但是如果把Memory当作落地,写的性能是非常高的,fast write,以便Spark Job不会感觉到这是2个计算框架的操作,因为写和读的速度都非常快。同样的,你可以用Impala的输出结果当作Spark的输入。
2.Spark的Executor Crash问题
     Spark的执行引擎和存储引擎都是在Executor进程里,即在一个Executor内会有多个Task在运行,并且这个Executor的内存会放入cache的RDD里。
问题来了,一旦我的Executor挂了,那么Tasks会失败,并且这些cache的RDD的Block也会丢失,这就会有ReCompute的过程,重新去取数据,根据血缘关系递归的去计算丢失的数据,这当然会很耗费资源,而且性能低下。
3.内存冗余问题
     这里说的内存冗余是说,Spark中不同Job之间可能同时读取了同一个文件,比如:job1和job2的计算任务都需要读取到账号信息表中的数据,那么我们都在他们各自的Executor里都cache了这一张账号表,是不是就出现了一个数据,2个内存副本,其实这样做是完全没有必要的,是冗余的。
4.GC时间过长
     有时候影响程序执行的并不是代码本身,而是由于内存中存了太多的Java Objects,如果Executor这个Jvm里cache的对象太多,比如:达到80G UP,这个时候出现几次FULL GC,你就会很纳闷我的程序怎么不动了?你去看GC log,原来在GC。

3.基于Zookeeper的Fault Tolerant Tachyon Cluster 实现

3.0 配置前提

  • hadoop version:2.2.0.2.0.6.0-101
  • zookeeper version:2.3.5
  • Tachyon version: 0.4.1

集群情况:

Cluster  Masters Slaves
Tachyon bigdata001,bigdata002 bigdata001,bigdata002,bigdata003,bigdata004,bigdata005,bigdata006,bigdata007,bigdata008

zookeeper url: bigdata001:2181,bigdata002:2181,bigdata003:2181

3.1 HA架构

3.2 配置(conf/tachyon-env.sh )

1.参考官方文档Fault Tolerant Tachyon Cluster

①HDFS

  1. export TACHYON_UNDERFS_ADDRESS=hdfs://[namenodeserver]:[namenodeport]

②ZooKeeper:

Property Name Example Meaning
tachyon.usezookeeper true Whether or not Master processes should use ZooKeeper.
tachyon.zookeeper.address localhost:2181 The hostname and port ZooKeeper is running on.

③Master Node Configuration

  1. export TACHYON_MASTER_ADDRESS=[externally visible address of this machine]

TACHYON_JAVA_OPTS to include:

  1. -Dtachyon.master.journal.folder=hdfs://[namenodeserver]:[namenodeport]/tachyon/journal

④Worker Node Configuration

  1. export TACHYON_MASTER_ADDRESS=[address of one of the master nodes in the system]

2.集群配置

Master节点配置:bigdata001节点的tachyon/conf/tachyon-env.sh添加如下(下划线部分)

  1. export TACHYON_MASTER_ADDRESS=192.168.1.101
    export TACHYON_UNDERFS_ADDRESS=hdfs://192.168.1.101:8020
  2. export TACHYON_JAVA_OPTS+="
  3. -Dlog4j.configuration=file:$CONF_DIR/log4j.properties
  4. -Dtachyon.debug=false
  5. -Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS
  6. -Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL
  7. -Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data
  8. -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers
  9. -Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE
  10. -Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/
  11. -Dtachyon.master.worker.timeout.ms=
  12. -Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS
  13. -Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/
  14. -Dtachyon.master.pinlist=/pinfiles;/pindata
  15. -Dorg.apache.jasper.compiler.disablejsr199=true
  16. -Dtachyon.user.default.block.size.byte=
  17. -Dtachyon.user.file.buffer.bytes=
  18. -Dtachyon.usezookeeper=true
  19. -Dtachyon.zookeeper.address=bigdata001:2181,bigdata002:2181,bigdata003:2181
  20. "

配置同步到所有的slave节点:bigdata002,bigdata003,bigdata004,bigdata005,bigdata006,bigdata007,bigdata008

由于我们要将bigdata002作为另外一个master,因此,此节点的配置需要做修改TACHYON_MASTER_ADDRESS的值,如下

  1. export TACHYON_MASTER_ADDRESS=192.168.1.102
  2. export TACHYON_UNDERFS_ADDRESS=hdfs://192.168.1.101:8020
  3. export TACHYON_JAVA_OPTS+="
  4. -Dlog4j.configuration=file:$CONF_DIR/log4j.properties
  5. -Dtachyon.debug=false
  6. -Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS
  7. -Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL
  8. -Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data
  9. -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers
  10. -Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE
  11. -Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/
  12. -Dtachyon.master.worker.timeout.ms=
  13. -Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS
  14. -Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/
  15. -Dtachyon.master.pinlist=/pinfiles;/pindata
  16. -Dorg.apache.jasper.compiler.disablejsr199=true
  17. -Dtachyon.user.default.block.size.byte=
  18. -Dtachyon.user.file.buffer.bytes=
  19. -Dtachyon.usezookeeper=true
  20. -Dtachyon.zookeeper.address=bigdata001:,bigdata002:,bigdata003:
  21. "

3.启动集群

[root@bigdata001 tachyon]# ./bin/tachyon-stop.sh

  1. Killed processes
  2. Killed processes
  3. 192.168.1.103: Killed processes
  4. 192.168.1.101: Killed 0 processes
  5. 192.168.1.102: Killed processes
  6. 192.168.1.104: Killed processes
  7. 192.168.1.106: Killed processes
  8. 192.168.1.105: Killed processes
  9. 192.168.1.107: Killed processes
  10. 192.168.1.108: Killed processes

[root@bigdata001 tachyon]# ./bin/tachyon format

  1. 192.168.1.101: Formatting Tachyon Worker @ bigdata001
  2. 192.168.1.102: Formatting Tachyon Worker @ bigdata002
  3. 192.168.1.103: Formatting Tachyon Worker @ bigdata003
  4. 192.168.1.104: Formatting Tachyon Worker @ bigdata004
  5. 192.168.1.105: Formatting Tachyon Worker @ bigdata005
  6. 192.168.1.106: Formatting Tachyon Worker @ bigdata006
  7. 192.168.1.107: Formatting Tachyon Worker @ bigdata007
  8. 192.168.1.102: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  9. 192.168.1.101: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  10. 192.168.1.103: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  11. 192.168.1.104: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  12. 192.168.1.108: Formatting Tachyon Worker @ bigdata008
  13. 192.168.1.105: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  14. 192.168.1.106: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  15. 192.168.1.107: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  16. 192.168.1.108: Removing local data under folder: /mnt/ramdisk/tachyonworker/
  17. Formatting Tachyon Master @ 192.168.1.101
  18. Formatting JOURNAL_FOLDER: hdfs://192.168.1.101:8020/tachyon/journal/
  19. Formatting UNDERFS_DATA_FOLDER: hdfs://192.168.1.101:8020/tmp/tachyon/data
  20. Formatting UNDERFS_WORKERS_FOLDER: hdfs://192.168.1.101:8020/tmp/tachyon/workers

[root@bigdata001 tachyon]# ./bin/tachyon-start.sh all Mount

  1. Killed 0 processes
  2. Killed 0 processes
  3. 192.168.1.103: Killed 0 processes
  4. 192.168.1.101: Killed 0 processes
  5. 192.168.1.105: Killed 0 processes
  6. 192.168.1.102: Killed 0 processes
  7. 192.168.1.107: Killed 0 processes
  8. 192.168.1.106: Killed 0 processes
  9. 192.168.1.104: Killed 0 processes
  10. 192.168.1.108: Killed 0 processes
  11. Starting master @ 192.168.1.101
  12. 192.168.1.101: Formatting RamFS: /mnt/ramdisk (2gb)
  13. 192.168.1.102: Formatting RamFS: /mnt/ramdisk (2gb)
  14. 192.168.1.101: Starting worker @ bigdata001
  15. 192.168.1.103: Formatting RamFS: /mnt/ramdisk (2gb)
  16. 192.168.1.102: Starting worker @ bigdata002
  17. 192.168.1.103: Starting worker @ bigdata003
  18. 192.168.1.104: Formatting RamFS: /mnt/ramdisk (2gb)
  19. 192.168.1.105: Formatting RamFS: /mnt/ramdisk (2gb)
  20. 192.168.1.104: Starting worker @ bigdata004
  21. 192.168.1.105: Starting worker @ bigdata005
  22. 192.168.1.106: Formatting RamFS: /mnt/ramdisk (2gb)
  23. 192.168.1.106: Starting worker @ bigdata006
  24. 192.168.1.107: Formatting RamFS: /mnt/ramdisk (2gb)
  25. 192.168.1.107: Starting worker @ bigdata007
  26. 192.168.1.108: Formatting RamFS: /mnt/ramdisk (2gb)
  27. 192.168.1.108: Starting worker @ bigdata008

[root@bigdata001 tachyon]# jps

可以看到Master和Worker的进程号:8315 Master  8458 Worker

在另个master节点bigdata002上启动另外一个master:

[root@bigdata002 tachyon]# ./bin/tachyon-start.sh master

  1. Starting master @ 192.168.1.102

4.测试HA

web界面查看:http://bigdata001:19999

kill掉bigdata001的master进程,切换时间大概需要20s,再次查看新的Web UI:http://bigdata002:19999/home

5.Zk上查看

[root@bigdata002 conf]# zkCli.sh

[zk: localhost:2181(CONNECTED) 61] ls /election
[_c_ae6213f4-a2e3-46f9-8fc0-5c5c64d7e773-lock-0000000027, _c_12297d87-56fc-4cd9-8f8d-7312a6af4cc2-lock-0000000026]

[zk: localhost:2181(CONNECTED) 63] ls /leader
[bigdata001:19998, bigdata002:19998]

6.遇到的问题及解决

1 ./bin/tachyon format 报错

  1. Formatting Tachyon Master @ 0.0.0.0
  2. Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: Class not found
  3. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
  4. at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2415)
  5. at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428)
  6. at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88)
  7. at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467)
  8. at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449)
  9. at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367)
  10. at org.apache.hadoop.fs.Path.getFileSystem(Path.java:287)
  11. at tachyon.UnderFileSystemHdfs.<init>(UnderFileSystemHdfs.java:69)
  12. at tachyon.UnderFileSystemHdfs.getClient(UnderFileSystemHdfs.java:53)
  13. at tachyon.UnderFileSystem.get(UnderFileSystem.java:53)
  14. at tachyon.Format.main(Format.java:42)
  15. Caused by: java.lang.ClassNotFoundException: Class not found
  16. at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)
  17. at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718)
  18. ... 11 more

原因及解决:配置文件tachyon/conf/tachyon-env.sh的此项未配置:export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem

Tachyon Cluster: 基于Zookeeper的Master High Availability(HA)高可用配置实现的更多相关文章

  1. Zookeeper(四)Hadoop HA高可用集群搭建

    一.高可就集群搭建 1.集群规划 2.集群服务器准备 (1) 修改主机名(2) 修改 IP 地址(3) 添加主机名和 IP 映射(4) 同步服务器时间(5) 关闭防火墙(6) 配置免密登录(7) 安装 ...

  2. 七、Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

    目录 前文 Hadoop3.3.1 HA 高可用集群的搭建 QJM 的 NameNode HA Hadoop HA模式搭建(高可用) 1.集群规划 2.Zookeeper集群搭建: 3.修改Hadoo ...

  3. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  4. linux -- 基于zookeeper搭建yarn的HA高可用集群

    linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...

  5. Spark:Master High Availability(HA)高可用配置的2种实现

    Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题.如何解决这个单点故障的问题,Spar ...

  6. 【转】Spark:Master High Availability(HA)高可用配置的2种实现

    原博文出自于: 感谢! Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题.如何解决这个 ...

  7. HBase Master HA高可用

    HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行. 所以这里要配置HBase高可用的话,只需要 ...

  8. zookeeper + LevelDB + ActiveMQ实现消息队列高可用

    通过集群实现消息队列高可用. 消息队列在项目中存储订单.邮件通知.数据分发等重要信息,故对消息队列稳定可用性有高要求. 现在通过zookeeper选取activemq leader的形式实现当某个ac ...

  9. 基于heartbeat的单播方式实现tomcat高可用

    1.节点规划 在master.backup节点上添加eth0.eth1两网卡,具体添加过程,参考“基于VMware为CentOS 6.5配置两个网卡” 2.IP规划   master backup e ...

随机推荐

  1. Windows系统下搭建Jenkins环境

    1. 安装JDK JDK下载地址:  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...

  2. 自己写的demo---声明异常同时处理异常,或者继续抛出异常

    package exception; public class exception { public static void main(String args[]) { /*** * 不能对类型 ex ...

  3. hibernate中一对多Set的排序问题

    因为set是无序的,一旦涉及set排序,就需要配置hibernate的配置文件,参考如下博文 http://ykyfendou.iteye.com/blog/2094325

  4. oracle的购买价格研究

    如果你是一个架构师,在数据库选型上除了技术选型,更重要的可能是性价比的选择,而oracle是现今排名第一的数据库,因此对oracle的价格有所了解是必须的. 几个要点: 1.oracle授权(也就是购 ...

  5. ubuntu亮度无法自动调节终极解决方案

    友情链接:IT狂人博客 这个问题纠结了我快两年,主要是自己懒,写了个脚本来调节亮度,不过还是稍显不便.近日兴起折腾了一番,终于找到问题根结了. There are many ways to contr ...

  6. ACM HDU 2674 N! Again(数论)

    继续数论.. Problem Description WhereIsHeroFrom:            Zty,what are you doing ? Zty:                 ...

  7. 如何在本地安装测试ECSHOP 转载

    如何在本地安装测试ECSHOP 如何在本地(自己的电脑)上先安装ECShop 一.创建PHP环境 1.下载AppServ 因为ECShop在线网上商店系统是用PHP语言开发的,所以,在本地架设网店之前 ...

  8. [学习笔记]设计模式之Composite

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在Composite(组合)模式中,用户可以使用多个简单的组件以形成较大的组件,而这些组件还可能进一步组合成更大的.它重要的特性是能够 ...

  9. web版扫雷小游戏(四)

    ~~~接上篇,游戏的主体框架完成了,接下来我们对游戏中存在的两个主要实体进行分析,一个是雷点类BombObject(节点对象),一个是节点对象对应的图片对象BombImgObject,根据第一篇的介绍 ...

  10. Object之魔术函数__call() 处理错误调用

    在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用.上代码: <?php class Person{ function say(){ echo " ...