文档章节

Tachyon简要调研日志

于洋2015
 于洋2015
发布于 2015/12/11 14:54
字数 2274
阅读 20
收藏 0

 前言

    Tachyon是一种基于内存的分布式存储系统,它可以使数据在诸如SparkMapReduce这样的集群框架中以内存级速度进行可靠的传输。通过利用lineage information和积极的使用内存系统,Tachyon表现了极佳的性能。Tachyon将工作文件集缓存在内存中,从而避免了因频繁读操作而需去硬盘中载入数据的流程。这一特性使得不同的任务/查询及框架类工具能够以内存级速度存取缓存中的文件。

二 Tachyon安装运行及测试

 

本次调研中使用Tachyon0.6.4&java1.7&hadoop2.6.0,而在Tachyon-0.6.4版本中,默认依赖的java版本为1.6, 默认依赖的hadoop版本为1.0.4,如果要更改这些依赖的版本号可以在编译时加入选项,由于Tachyon项目采用Maven进行管理,因此可以采用 mvn package 命令进行编译打包,如本次调研环境使用java1.7hadoop2.6.0则使用如下命令:

 

mvn -DproxySet=true-DproxyHost=myproxy.com -DproxyPort=3128 -Djava.version=1.7 -Dhadoop.version=2.6.0 clean install

 

得到了能够运行在本地环境的Tachyon后,开始安装Tachyon

 

     介绍。本集群为三个节点,分别为masterslave1slave2。三个节点都运行TachyonWorkermaster运行TachyonMaster。以防其他异常原因,安装全程使用root用户。

     配置与运行(Master上)。

A:将$TACHYON_HOME/conf/tachyon-env.sh.template cpconf/tachyon-env.sh,并在其中根据自身环境增加以下配置

export JAVA="$JAVA_HOME/bin/java"

export TACHYON_MASTER_ADDRESS=192.168.100.7

export TACHYON_UNDERFS_ADDRESS=hdfs://master:9000

export TACHYON_WORKER_MEMORY_SIZE=4GB

export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem

export TACHYON_WORKER_MAX_WORKER_THREADS=2048

export TACHYON_MASTER_MAX_WORKER_THREADS=2048

 

export TACHYON_SSH_FOREGROUND="yes"

export TACHYON_WORKER_SLEEP="0.02"

export TACHYON_MASTER_JAVA_OPTS="$TACHYON_JAVA_OPTS"

export TACHYON_HDFS_ADDRESS=hdfs://master:9000

export TACHYON_USER_DEFAULT_BLOCK_SIZE_BYTE=300MB

export TACHYON_USER_FILE_WRITETYPE_DEFAULT=ASYNC_THROUGH

 

配置含义及详情在后面章节会有阐述。

 

B:在conf/workers文件中配置需要启动TachyonWorker的节点,即

 

192.168.100.6

192.168.100.5

192.168.100.4

 

C:完成配置文件的修改后,将整个tachyon文件夹打成tar.gz后发到从节点上并解压到同主节点相同路径下的文件中。

 

       D:启动运行。

首次启动前先进行格式化操作:$TACHYON_HOME/bin/tachyon format

然后启动:

$TACHYON_HOME/bin/tachyon-start.sh all Mount  //all Mount,首次启动需要挂载内存文件系统,以后则使用all NoMount(默认已挂载好RamFS

Tachyon的启动参数

  all MOPT         Start master and all workers.

  local               Start a master and worker locally

  master            Start the master on this node

          safe               Script will run continuously and start the master if it's not running

  worker MOPT    Start a worker on this node

  workers MOPT   Start workers on worker nodes

  restart_worker   Restart a failed worker on this node

    restart_workers      Restart any failed workers on worker nodes

 

  MOPT is one of:

  Mount              Mount the configured RamFS

  SudoMount       Mount the configured RamFS using sudo

  NoMount          Do not mount the configured RamFS

 

      测试

使用 jps 命令查看进程

也可以在浏览器内打开TachyonWebUI,如 http://master:19999(端口19999tachyon默认的webUI端口,可在$TACHYON_HOME/conf/tachyon-env.sh下修改tachyon.master.web.port属性,配置自定义的端口),查看整个Tachyon的状态,各个TachyonWorker的运行情况,各项配置信息,浏览文件系统等

此外,还能在任一启动了TachyonWorker的节点上执行

 $TACHYON_HOME/bin/tachyon runTest 1 2 命令来测试Tachyon是否运行正常。该命令定义了使用Tachyon的一些实际用例,也可以用来检测Tachyon安装是否正确。

1<Basic|BasicRawTable|BasicCheckpoint|BasicNonByteBuffer>

2<MUST_CACHE|TRY_CACHE|CACHE_THROUGH|THROUGH|ASYNC_THROUGH>

参数1释义依次为基础测试(基本运行),tachyonRawTable测试,心跳测试及读写测试,参数2为测试文件的写(存储)类型,分别为写时必定缓存,写时尝试缓存,写时尝试缓存并同步写入UnderFS ,仅写入UnderFS ,一定缓存且同步或异步写入UnderFS 。见到“Passed the test!”字样则代表该项测试成功。


三 Tachyon配置(见官网配置页)

四 Tachyon的使用

4.1 tachyon命令介绍

·        # tachyon

·        Usage: tachyon COMMAND 

·        where COMMAND is one of:

·          format [-s]           格式化Format Tachyon (如果指定 -s 参数,表示在 underfs 不存在时进行)

·          bootstrap-conf     生成一个配置文件,如果不存在

·          tfs                     命令行客户端

·          loadufs              加载三、Tachyon命令行操作现有的底层文件系统到Tachyon

·          runTest              运行一个终端到终端的测试中的Tachyon集群

·          runTests            运行所有的终端到终端的测试中的Tachyon集群上

·          killAll <WORD>    杀死包WORD进程(未测)

·          copyDir <PATH>  复制PATH到所有节点(未测)

·          clearCache          清除操作系统缓存

·          thriftGen            生成所有 thrift 代码(未测)

·          version              打印Tachyon版本

 

4.2 Tachyon命令行客户端

·               [root@master  bin]# ./tachyon tfs

·               Usage: java TFsShell

·               [cat <path>]          linux”cat”

·               [count <path>] 显示符合在路径匹配指定前缀的文件&文件夹数量

·               [ls <path>]            linux”lst”

·               [lsr <path>]          递归的展示path下所有文件信息

·               [mkdir <path>]      linux” mkdir”

·               [rm <path>]          linux” rm”

·               [rmr <path>]         删除文件或文件目录及目录下所有文件

·               [tail <path>]          打印文件内容到控制台(内容最后1KB)

·               [touch <path>] 在指定位置上创建一个0字节大小的文件

·               [mv <src> <dst>]  linux” mv”

·               [copyFromLocal <src> <dst>]    复制src下的文件到dst中,若dst已存在该文件则该操作会失败 src为本地路径 dstTachyon路径

·               [copyToLocal <src> <localDst>] 与上一条相反,若有同名文件会产生覆盖

·               [fileinfo <path>]                 打印出指定路径文件的块信息

·               [location <path>]               显示指定路径文件数据所在的主机信息

·               [report <path>]                 告知主机指定路径的文件已经丢失

·               [request <tachyonaddress> <dependencyId>] 根据dependencyId请求文件

·               [pin <path>]                       pin指定路径的文件(pin后文件永驻内存),如果path是一个文件目录则目录下所有文件及新创建在该目录下的文件享受pin效果

·               [unpin <path>]             与上条反之

·               [free <file path|folder path>]           把指定路径的文件清出内存

五 Running Spark on Tachyon

·        示例1spark读取tachyon上的文件并写回tachyon

$ ./spark-shell

$ val s = sc.textFile("tachyon://master:19998/X")

$ s.count()

$ s.saveAsTextFile("tachyon://master:19998/Y")

 

 WEBUI上(http://master:19999)可以看到Y文件,文件内容为X文件的单词统计次数

 

 

·        示例2:将SparkRDD文件持久化到Tachyon中(spark官方文档提示此功能尚处于试验阶段)

配置:在spark-defaults.conf($SPARK_HOME/conf)中添加两条参数

 

    spark.externalBlockStore.url    tachyon://master:19998

    spark.externalBlockStore.baseDir   tachyon://master:19998/spark

    其中urltachyon文件系统地址,baseDirtachyon文件系统存储 RDDs的路径

    添加后重启spark 执行以下语句

 

    var file = sc.textFile("tachyon://master:19998/yuyangTest/LICENSE")

    val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)

    counts.persist(org.apache.spark.storage.StorageLevel.OFF_HEAP)

    counts.take(10)

    counts.take(10)



    可以看到rdd文件成功被持续化到新生成的spark文件夹下,spark文件夹即为spark.externalBlockStore.baseDir配置的路径。

第一遍使用take语句可以看出执行了

1.49s,第二次再次take则花费了

0.13秒,可以看出以及驻留在内存中的rdd的取出速度是非常快的。

六 Fault Tolerant Tachyon Cluster

6.1简介

Tachyon的容错模式是基于运行多个master节点而实现的,多个master中的其中一个master节点会被选举为leader,所有worker节点以及客户端将会以这个节点作为首要节点进行通讯,其他master节点以备选节点方式运行。为了确保不同master节点维护相同的文件系统元数据以及当master节点进程意外停止时新的leader可以迅速将任务接管过来,这些备用节点使用共享的日志体系。如果tachyonleader进程意外终止掉,新的leader会从备选master节点中自动选举出来并且tachyon会像平时一样正常运行。注意,当切换到备用master节点时可能会经历短暂的延迟或瞬间发生一些错误。

6.1前置准备

   ZooKeeper(安装见附录)

   一个用来放置日志(journal)的共享且可靠的底层文件系统(本次案例使用hdfs,可选项:HDFS, Amazon S3, GlusterFS

 

6.2安装与配置

Tachyon使用zookeeper(需要独立安装)来实现master节点的容错模式,同时它也需要一个共享存储系统来记录日志和images (tachyon的快照文件,用于恢复)

$TACHYON_HOME/conf/tachyon-env.sh中的TACHYON_JAVA_OPTS下添加参数:

-Dtachyon.usezookeeper=true

-Dtachyon.zookeeper.address=localhost:2181(此处地址为ZooKeeper 运行的hostnameport,地址用逗号分隔)

 

并在所有的master节点中的TACHYON_JAVA_OPTS加入

-Dtachyon.master.journal.folder=hdfs://[namenode]:[port]/tachyon/journal


最后在所有的worker节点中加入

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

 

6.3运行与验证

配置完成后重新格式化并运行tachyon,在leadermaster日志中看到如下信息代表配置成功。


为了实验tachyon的灾难恢复,我们将leader所在master kill掉,可以发现,在备选master的日志中发生了变化:

新的leader已经被选举出来并且以master身份正常运行,在webUI中,我们打开http://newmaster:19999  ,(”newmaster”为新选举出来leader的地址)可以发现原来在tachyon文件系统中的各文件依然存在。

至此, Fault Tolerant Tachyon Cluster已经搭建完毕。


© 著作权归作者所有

共有 人打赏支持
上一篇: zookeeper的安装
于洋2015
粉丝 0
博文 7
码字总数 5475
作品 0
朝阳
程序员
私信 提问
本地运行Tachyon(译)

本地运行Tachyon 单机运行 Tachyon 在一台机器上. 这部分的先决条件数已经安装Java(JDK 6 或者以上版本) 下载Tachyon 0.7.1二进制发行版本: $ wget https://github.com/amplab/tachyon/r...

Ryan-瑞恩
2015/10/19
31
0
集群中运行Tachyon(译)

集群中运行Tachyon 单机集群 首先下载 Tachyon tar 文件,并且解压: $ wget https://github.com/amplab/tachyon/releases/download/v0.7.1/tachyon-0.7.1-bin.tar.gz$ tar xvfz tachyon-0.7......

Ryan-瑞恩
2015/10/20
56
0
集群中运行Tachyon(译)

集群中运行Tachyon 单机集群 首先下载 Tachyon tar 文件,并且解压: 在 目录中, 复制 . 确保 指向有效的 Java 6/7 安装。给tachyon/conf/workers 文件中增加所有 worker 节点的IP地址。最后...

Ryan-瑞恩
2015/10/19
47
0
Tachyon 0.7.1伪分布式集群安装与测试

Tachyon是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和 MapReduce那样。通过利用信息继承,内存侵入,Tachyon获得了高性能。Tachyon工作集文件...

stark_summer
2015/09/10
187
0
分布式内存文件系统Tachyon介绍

1、Tachyon介绍 1.1 Tachyon简介 随着实时计算的需求日益增多,分布式内存计算也持续升温,怎样将海量数据近乎实时地处理,或者说怎样把离线批处理的速度再提升到一个新的高度是当前研究的重...

莫问viva
2016/02/16
301
0

没有更多内容

加载失败,请刷新页面

加载更多

JDK 12又来了,我学不动了...

写在前面 看到 JDK 12又发布了,萌新不知不觉感觉瑟瑟发抖,从 Java 1.8的函数式编程思维和范式 到 Java 1.9的模块化特性的加持 以及还没来得及深切感受一下 Java 1.11 的 ZGC强大之后,这次...

CodeSheep
13分钟前
0
0
解决在gradle构建project时,发生peer not authenticated错误的方法

问题: FAILURE: Build failed with an exception.* What went wrong:Could not resolve all dependencies for configuration ':wl01-service:compile'.> Could not resolve com.ali......

Benz001
23分钟前
1
0
Apache Ignite上的TensorFlow

任何深度学习都是从数据开始的,这是关键点。没有数据,就无法训练模型,也无法评估模型质量,更无法做出预测,因此,数据源非常重要。在做研究、构建新的神经网络架构、以及做实验时,会习惯...

李玉珏
48分钟前
6
0
Java记录日志附带请求标识

起因 系统是web接口服务,排查故障的时候经常需要记录某次请求调用链路日志。这样我们拉日志的时候只要匹配这个traceid就行了 第一版解决方案 原来我们一直用了个很low的办法,在请求开始的时...

Tree
51分钟前
3
0
使用split_size优化的ODPS SQL的场景

使用split_size优化的ODPS SQL的场景 首先有两个大背景需要说明如下: 说明1:split_size,设定一个map的最大数据输入量,单位M,默认256M。用户可以通过控制这个变量,从而达到对map端输入的...

阿里云官方博客
57分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部