探索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特点。
- 探索Tachyon的内存数据存储
- Tachyon---基于内存的分布式存储系统
- Tachyon---基于内存的分布式存储系统
- 探索组合索引的数据存储
- 大数据时代——分布式内存文件系统:Tachyon
- Tachyon 分布式内存文件系统
- Tachyon 分布式内存文件系统
- 分布式内存文件系统Tachyon
- 分布式内存文件系统:Tachyon
- 分布式内存文件系统Tachyon
- 分布式内存文件系统:Tachyon
- Tachyon内存文件系统
- Tachyon:Spark生态系统中的分布式内存文件系统的使用
- 【BDTC讲师】Tachyon作者:大数据存储以及处理框架经验分享
- 【BDTC讲师】Tachyon作者:大数据存储以及处理框架经验分享
- 内存中数据的存储方式
- double数据的内存存储方式
- c中数据的存储(内存)
- 第三届讯飞测试技术嘉年华视频上线
- KMP基本模板理解
- day25之布隆过滤器的实现和优缺点以及扩展
- 浅析Spring事务传播行为和隔离级别
- [C++] 右值引用:移动语义与完美转发
- 探索Tachyon的内存数据存储
- Just a Hook(区间更新)
- 线程安全与不安全
- Scrum认证体系培训和新CSP成长路径所需的SEU
- [RK3288][Android6.0] SoftMAC和FullMAC区别
- LeetCode 77 Combinations (Python详解及实现)
- 配置 GitHub Pages 发布源
- 是时候来一波干货了!
- jqGrid API 及用法