探索Tachyon的内存数据存储

来源:互联网 发布:软件开发电脑配置 编辑:程序博客网 时间:2024/06/05 09:01

这是以前我刚学习使用时,写的一篇翻译

对大数据快速处理来说,内存是关键的环节。这已经被很多框架实现了,比如Spark已经利用了内存性能。随着数据集的继续增大,在许多大工作量中,存储正处于逐渐一个瓶颈的状态。

为了解决这个需求,我们有了成熟的Tachyon,一个中央内存的容错分布式文件系统,通过内存速度把可靠文件遍布共享在分布式的框架工作上,比如Spark和MapReduce。经历2年的研究结果,Tachyon通过强势的内存使用和系列的信息,实现内存速度和容错性。Tachyon把文件缓存到内存中工作,并通过内存速度把不同的任务/需求和框架工作来获取缓存文件。如此这样,Tachyon避免频繁的读硬盘加载数据集。

Tachyon是与Hadoop类似的。现在Spark和分布式项目不需要任何代码修改就可以运行在Tachyon上。Tachyon在Spark上是默认的off-heap配置,意味着RDDs能自动被存储在Tachyon中让Spark更具有弹性和避免垃圾回收消耗。这个工程是开源的,并已经部署在多个企业。另外,Tachyon有超过50个贡献者是来自20多个机构。包括雅虎,因特尔公司,红帽子,和Pivotal。这个工程是伯克利的存储层数据分析堆栈(DBAS)和Fedora发行版的一部分。

在这个章节,我们首先过一遍Tachyon的基本操作,然后在它上面运行一个Spark程序。Tachyon的website或Github项目,我们还定期举办聚会在海湾地区。

1.前提条件

1.1假定设想

你有一个笔记本电脑你的笔记本电脑有java 6 或 7 已经安装了Mac OS 或 Linux( window是不支持的)

1.2启动Tachyon

1.2.1.配置

所有系统的配置都在tachyon/conf文件夹下。找到它们,并且在每一个工作点可以看到有多少内存被配置。

$ grep "TACHYON_WORKER_MEMORY_SIZE=" conf/tachyon-env.shexport TACHYON_WORKER_MEMORY_SIZE=1GB

你也可以读这个文件并试着去理解这些参数。关于配置的更多信息,你可以看Tachyon的页面设置的配置。

1.2.2.格式化这个存储

如果你是运行Linux请注意,Tachyon将需要root权限来创建和使用一个RAM的磁盘,运行sudo su并输入你的密码。
在第一次启动Tachyon之前,我们需要格式化这个系统。在tachhyon/bin文件夹下用tachyon 脚本。请输入下列命令:

$ ./bin/tachyon formatConnection to localhost... Formatting Tachyon Worker @ HYMac-2.localRemoving local data under folder: /Users/haoyuan/Downloads/test/tachyon/libexec/../ramdisk/tachyonworker/Formatting Tachyon Master @ localhostFormatting JOURNAL_FOLDER: /Users/haoyuan/Downloads/test/tachyon/libexec/../journal/Formatting UNDERFS_DATA_FOLDER: /Users/haoyuan/Downloads/test/tachyon/libexec/../../data/tmp/tachyon/dataFormatting UNDERFS_WORKERS_FOLDER: /Users/haoyuan/Downloads/test/tachyon/libexec/../../data/tmp/tachyon/workers

1.2.3.开始这个系统管理

在格式化这个存储仓库后,我们可以尝试启动系统。这能通过 tachyon/bin/tachyon-start.sh 脚本来完成。

$ ./bin/tachyon-start.sh localKilled 0 processesKilled 0 processesConnection to localhost... Killed 0 processesStarting master @ localhostStarting worker @ HYMac-2.local

1.3用Tachyon交互

在这个部分,我们将使用3中方法来接触Tachyon:
1.命令行的交互
2.实际的应用程序交互
3.网页用户界面

1.3.1.命令行的接口

你能使用下列命令来交互Tachyon:

$ ./bin/tachyon tfs

之后,它将返回一个列表选项:

Usage: java TFsShell       [cat <path>]       [count <path>]       [ls <path>]       [lsr <path>]       [mkdir <path>]       [rm <path>]       [tail <path>]       [touch <path>]       [mv <src> <dst>]       [copyFromLocal <src> <remoteDst>]       [copyToLocal <src> <localDst>]       [fileinfo <path>]       [location <path>]       [report <path>]       [request <tachyonaddress> <dependencyId>]       [pin <path>]       [unpin <path>]

请试着用命令把本地文件tachyon/LICENSE放进Tachyon文件系统如 /LICENSE

$ ./bin/tachyon tfs copyFromLocal LICENSE /LICENSECopied LICENSE to /LICENSE

你也能用命令行界面来验证上面的结果:

$ ./bin/tachyon tfs ls /11.40 KB  02-07-2014 23:23:44:008  In Memory      /LICENSE

现在,你想要检出这个文件的内容就做下面操作:

$ ./bin/tachyon tfs cat /LICENSE                                 Apache License                          Version 2.0, January 2004                       http://www.apache.org/licenses/  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION....

1.3.2.应用程序界面

在使用命令行与Tachyon交互之后,你也能使用它的API。我们有几个样例的应用程序。例如,BasicOperations.java展示了用户文件创建,写入和读取操作。
你把这些放进我们的脚本,你能很简单的使用下列命令来运行这个样例程序。下列命令能运行[BasicOperations.java],,并且也验证Tachyon的安装。

$ ./bin/tachyon runTests$ /root/tachyon/bin/tachyon runTest Basic MUST_CACHE$ /BasicFile_MUST_CACHE has been removed$ 2014-02-07 23:46:57,529 INFO   (TachyonFS.java:connect) - Trying to connect master @ ec2-23-20-202-253.compute-1.amazonaws.com/10.91.151.150:19998$ 2014-02-07 23:46:57,599 INFO   (MasterClient.java:getUserId) - User registered at the master ec2-23-20-202-253.compute-1.amazonaws.com/10.91.151.150:19998 got UserId 6$ 2014-02-07 23:46:57,600 INFO   (TachyonFS.java:connect) - Trying to get local worker host : ip-10-91-151-150.ec2.internal$ 2014-02-07 23:46:57,618 INFO   (TachyonFS.java:connect) - Connecting local worker @ ip-10-91-151-150.ec2.internal/10.91.151.150:29998$ 2014-02-07 23:46:57,661 INFO   (CommonUtils.java:printTimeTakenMs) - createFile with fileId 3 took 133 ms.$ 2014-02-07 23:46:57,707 INFO   (TachyonFS.java:createAndGetUserTempFolder) - Folder /mnt/ramdisk/tachyonworker/users/6 was created!$ 2014-02-07 23:46:57,714 INFO   (BlockOutStream.java:<init>) - /mnt/ramdisk/tachyonworker/users/6/3221225472 was created!$ Passed the test!$ /root/tachyon/bin/tachyon runTest BasicRawTable MUST_CACHE$ /BasicRawTable_MUST_CACHE has been removed$ 2014-02-07 23:46:58,633 INFO   (TachyonFS.java:connect) - Trying to connect master @ ec2-23-20-202-253.compute-1.amazonaws.com/10.91.151.150:19998$ 2014-02-07 23:46:58,705 INFO   (MasterClient.java:getUserId) - User registered at the master ec2-23-20-202-253.compute-1.amazonaws.com/10.91.151.150:19998 got UserId 8$ 2014-02-07 23:46:58,706 INFO   (TachyonFS.java:connect) - Trying to get local worker host : ip-10-91-151-150.ec2.internal$ 2014-02-07 23:46:58,725 INFO   (TachyonFS.java:connect) - Connecting local worker @ ip-10-91-151-150.ec2.internal/10.91.151.150:29998$ 2014-02-07 23:46:58,859 INFO   (TachyonFS.java:createAndGetUserTempFolder) - Folder /mnt/ramdisk/tachyonworker/users/8 was created!$ 2014-02-07 23:46:58,866 INFO   (BlockOutStream.java:<init>) - /mnt/ramdisk/tachyonworker/users/8/8589934592 was created!$ 2014-02-07 23:46:58,904 INFO   (BlockOutStream.java:<init>) - /mnt/ramdisk/tachyonworker/users/8/9663676416 was created!$ 2014-02-07 23:46:58,914 INFO   (BlockOutStream.java:<init>) - /mnt/ramdisk/tachyonworker/users/8/10737418240 was created!$ Passed the test!$ ...

1.3.3.网页用户界面

在使用命令和API与Tachyon交互之后,让我们看看它的网页的用户界面。URI是http://localhost:19999

第一页是概述了系统的运行。第二页是系统的配置。

如果你在Browse File System点击,它会展示出你刚刚创建和赋值的所有文件。

你也能点击一个私人项目文件或文件夹。例如 /LICENSE file,之后你可以看到关于这个 LINCENSE 文件的详细信息

1.4.在Tachyon上运行Spark

1.4.1.用Tachyon输入输出

在这部分,我们运行一个Spark项目来与Tachyon交互。第一个是在 /LICENSE 文件上做一个单词计数。在/root/spark 文件夹里,执行下面命令来开始Spark shell。

$ ./bin/spark-shell
sc.hadoopConfiguration.set("fs.tachyon.impl", "tachyon.hadoop.TFS")var file = sc.textFile("tachyon://localhost:19998/LICENSE")val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)counts.saveAsTextFile("tachyon://localhost:19998/result")

这个结果被保存在 /result 文件夹里,你能通过网页界面或命令行来验证这个结果。因为 /LICENSE 是在内存里面,当一个新的Spark程序运行时,它将直接从Tachyon中加载到内存里。同时,我们也致力于其他特点来使Tachyon更能提高Spark的性能。

1.4.2.在Tachyon里存储RDD OFF_HEAP

在Tachyon里存储 RDD 作为 OFF_HEAP 存储器有几个优点(更多信息):
它允许多个执行者(worker)在Tachyon里共享同一个内存容器。
它对垃圾回收机制是有意义的。
如果个人的执行者(worker)崩溃掉,缓存数据不会丢失。
请试试下列例子:

sc.hadoopConfiguration.set("fs.tachyon.impl", "tachyon.hadoop.TFS")var file = sc.textFile("tachyon://localhost:19998/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)

你能注意到第二次 take(10) 比第一次更快,是因为在 Tachyon 里 RDD 的计数已经被存储为 OFF_HEAP 。

这接近Tachyon章节教程的结尾。我们鼓励你们继续用代码来娱乐并检出 project website,Github 项目,和 meetup group

欢迎提交 Bug 和 来询问了解Tachyon特点。

原创粉丝点击