搜尋
首頁資料庫mysql教程Tachyon的配置和使用入门

Tachyon是一个基于内存的分布式文件系统(项目首页:tachyon-project.org),它是AmpLab的BDAS(berkeley data analytics stack)的一个重要组成。解决了丢失cache导致的重新计算,不同app(job),甚至是不同计算框架间重复的内存使用等问题。目前Spark 1.1默

Tachyon是一个基于内存的分布式文件系统(项目首页:tachyon-project.org),它是AmpLab的BDAS(berkeley data analytics stack)的一个重要组成。解决了丢失cache导致的重新计算,不同app(job),甚至是不同计算框架间重复的内存使用等问题。目前Spark 1.1默认支持0.5的版本。

bdas

特性

Java-like File API: Tachyon的原生API和Java文件系统非常相似,提供InputStream, OutputStream等接口, 以及高效的内存映射I/O,用这些API能够获得最好的性能。
Compatibility: Tachyon 实现了Hadoop FileSystem 接口, 因此Hadoop MapReduce和Spark可以不经过任何修改就能在使用Tachyon。
Native support for raw tables: Tachyon对列存储结构的数据提供了原生的支持,用户可以将某些访问量高的列选择性地放到内存中。
Pluggable underlayer file system: Tachyon 提供memory data到底层文件系统的方法。目前支持HDFS和单点的本地文件系统。
Web UI: 用户可以通过浏览器浏览文件系统,在debug模式下,管理员可以查看文件的位置等详细信息。
Command line interaction: 用户可以使用 ./bin/tachyon tfs和 Tachyon交互,例如将文件在Tachyon和本地文件系统中拷贝。

原理简述

参考Dr.浩源 6月30日的slide。Tachyon的架构是常见的Master/Worker结构,使用Zookeeper可以构建Master的HA。由Master节点负责管理维护文件系统MetaData(使用Journal image+edit log,详见参考1),而文件数据维护在Worker节点的内存中。Worker和Master的通讯依赖于thrift。另外,底层支持用户指定文件的持久化(保存到underlyHDFS中)。
tachyon-arch
Tachyon充分利用内存,在内存中只存一份数据(没有replica复制内存数据),并将lineage的设计应用到存储层,通过异步的向Tachyon的底层文件系统做Checkpoint。当我们向Tachyon里面写入文件的时候,Tachyon会在后台异步的把这个文件给checkpoint到它的底层存储。另外,Tachyon的重算如下图,如果File Set B丢失,则需要由File Set A通过Spark Job重新得到File Set B。
tachyon-recompute
Tachyon中定义了下面几种cache的类型

package tachyon.client
import java.io.IOException;
/**
 * Different write types for a TachyonFile.
 */
public enum WriteType {
  /**
   * Write the file and must cache it.
   */
  MUST_CACHE(1),
  /**
   * Write the file and try to cache it.
   */
  TRY_CACHE(2),
  /**
   * Write the file synchronously to the under fs, and also try to cache it,
   */
  CACHE_THROUGH(3),
  /**
   * Write the file synchronously to the under fs, no cache.
   */
  THROUGH(4),
  /**
   * Write the file asynchronously to the under fs (either must cache or must through).
   */
  ASYNC_THROUGH(5);
......

Tachyon集群配置

下载并解压Tachyon 0.5
wget http://tachyon-project.org/downloads/tachyon-0.5.0-bin.tar.gz
tar xvfz tachyon-0.5.0-bin.tar.gz
cd tachyon-0.5.0/conf
Tachyon官方文档Configuration Settings,除了设置正确的JAVA_HOME,我们要设置的参数如下:

#Basic
tachyon.home = /var/lib/spark/tachyon-0.5.0
tachyon.underfs.address = hdfs://hdp01:8020
tachyon.data.folder = /user/spark/tach_data
tachyon.workers.folder = /user/spark/tach_worker
# tachyon.underfs.hdfs.impl = "org.apache.hadoop.hdfs.DistributedFileSystem" #default
# tachyon.max.columns = 1000 #default
# tachyon.table.metadata.byte = 5242880 #default
#HA
tachyon.usezookeeper = true
tachyon.zookeeper.address = hdp02:2181, hdp03:2181, hdp04:2181
tachyon.zookeeper.election.path = "/tach_elect"
tachyon.zookeeper.leader.path = "/tach_leader"
#Master
# tachyon.master.journal.folder = "$TACHYON_UNDERFS_ADDRESS/user/spark/tach_journal/"  #default $tachyon.home + "/journal/"    
tachyon.master.hostname = hdp04
# tachyon.master.port = 19998    #default 
# tachyon.master.web.port = 19999    #default 
# tachyon.master.whitelist = "/"    #default 
#Worker
# tachyon.worker.port = 29998 #default 
# tachyon.worker.data.port = 29999 #default 
tachyon.worker.memory.size = 10G      #default 128M
tachyon.worker.data.folder = /mnt/ramdisk           #default /mnt/ramdisk
#User
# tachyon.user.failed.space.request.limits = 3    #default 
# tachyon.user.quota.unit.bytes = 8MB    #default 
# tachyon.user.file.buffer.bytes = 1MB    #default 
# tachyon.user.default.block.size.byte = 1GB    #default 
# tachyon.user.remote.read.buffer.size.byte = 1MB    #default

如果启用了基于ZooKeeper的master HA,除了设置underfs为分布式文件系统和zk之外,还需要设置所有master的tachyon.master.hostname为自身的地址(必须对所有worker节点可见)。根据模版,配置tachyon-env.sh.template文件,tachyon-env.sh的如下:

#!/usr/bin/env bash
# This file contains environment variables required to run Tachyon. Copy it as tachyon-env.sh and
# edit that to configure Tachyon for your site. At a minimum,
# the following variables should be set:
#
# - JAVA_HOME, to point to your JAVA installation
# - TACHYON_MASTER_ADDRESS, to bind the master to a different IP address or hostname
# - TACHYON_UNDERFS_ADDRESS, to set the under filesystem address.
# - TACHYON_WORKER_MEMORY_SIZE, to set how much memory to use (e.g. 1000mb, 2gb) per worker
# - TACHYON_RAM_FOLDER, to set where worker stores in memory data
# - TACHYON_UNDERFS_HDFS_IMPL, to set which HDFS implementation to use (e.g. com.mapr.fs.MapRFileSystem,
#   org.apache.hadoop.hdfs.DistributedFileSystem)
# The following gives an example:
export TACHYON_HOME=/var/lib/spark/tachyon-0.5.0
export HADOOP_HOME=/usr/lib/hadoop
if [[ `uname -a` == Darwin* ]]; then
  # Assuming Mac OS X
  export JAVA_HOME=${JAVA_HOME:-$(/usr/libexec/java_home)}
  export TACHYON_RAM_FOLDER=/var/lib/spark/tachyon-0.5.0
  export TACHYON_JAVA_OPTS="-Djava.security.krb5.realm= -Djava.security.krb5.kdc="
else
  # Assuming Linux
  if [ -z "$JAVA_HOME" ]; then
    export JAVA_HOME=/usr/java/latest
 fi
  export TACHYON_RAM_FOLDER=$TACHYON_HOME/ramdisk
fi
export JAVA="$JAVA_HOME/bin/java"
export TACHYON_MASTER_ADDRESS=hdp04
export TACHYON_UNDERFS_ADDRESS=hdfs://hdp01:8020
export TACHYON_WORKER_MEMORY_SIZE=10GB
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/user/spark/tach_data
  -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/user/spark/tach_worker
  -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/user/spark/tach_journal/  
  -Dorg.apache.jasper.compiler.disablejsr199=true
  -Dtachyon.usezookeeper=true
  -Dtachyon.zookeeper.address=hdp02:2181,hdp03:2181,hdp04:2181
  -Dtachyon.zookeeper.election.path="/tach_elect"
  -Dtachyon.zookeeper.leader.path="/tach_leader"
  -Djava.net.preferIPv4Stack=true
"
# Master specific parameters. Default to TACHYON_JAVA_OPTS.
export TACHYON_MASTER_JAVA_OPTS="$TACHYON_JAVA_OPTS"
# Worker specific parameters that will be shared to all workers. Default to TACHYON_JAVA_OPTS.
export TACHYON_WORKER_JAVA_OPTS="$TACHYON_JAVA_OPTS"
---------------------------------------------------------------------------------------------------------------
vim slaves
hdp01
hdp02
hdp03
hdp04

第一次运行需要format

$ tachyon format
......
#
Connection to hdp01... Formatting Tachyon Worker @ hdp01
Removing local data under folder: /var/lib/spark/tachyon-0.5.0/ramdisk/tachyonworker/
Connection to hdp01 closed.
Connection to hdp02... Formatting Tachyon Worker @ hdp02
Removing local data under folder: /var/lib/spark/tachyon-0.5.0/ramdisk/tachyonworker/
Connection to hdp02 closed.
Connection to hdp03... Formatting Tachyon Worker @ hdp03
Removing local data under folder: /var/lib/spark/tachyon-0.5.0/ramdisk/tachyonworker/
Connection to hdp03 closed.
Connection to hdp04... Formatting Tachyon Worker @ hdp04
Removing local data under folder: /var/lib/spark/tachyon-0.5.0/ramdisk/tachyonworker/
Connection to hdp04 closed.
......

启动tachyon,为了让ramFS能mount,需要使用root来启动。

tachyon-start.sh all Mount
Starting master @ hdp04
...
Connection to hdp04... Formatting RamFS: /var/lib/spark/tachyon-0.5.0/ramdisk (10gb)
Starting worker @ hdp04
...

打开web UI http://hdp04:19999/home, 可以看到可用内存为我们配置的TACHYON_WORKER_MEMORY_SIZE大小。
tachyon-ui

在Spark中使用Tachyon

首先在$SPARK_HOME/conf中新建core-site.xml文件

    fs.tachyon.impl
    tachyon.hadoop.TFS

然后$SPARK_HOME/conf/spark-env.sh中设置
export SPARK_CLASSPATH=/var/lib/spark/tachyon-0.5.0/client/target/tachyon-client-0.5.0-jar-with-dependencies.jar:$SPARK_CLASSPATH
下面在Spark程序中需要指定:
spark.tachyonStore.url
spark.tachyonStore.BaseDir
例如:

vim $SPARK_HOME/conf/spark-defaults.conf
spark.tachyonStore.url tachyon://hdp4:19998
spark.tachyonStore.baseURL /data/tach_tmp
#打开Spark-Shell,通过tachyon来加载underfs(HDFS)中的数据/user/spark/1.txt
scala> val mydata = sc.textfile("tachyon-fs://hdp04:19998/user/spark/1.txt")
scala> data.count
...
res0: Long = 52
# 以in-memory保存到tachyon,可供其他应用使用
scala> mydata.saveAsTextFile("tachyon-fs://hdp04:19998/my/1.txt")
这个文件就以in-memory file保存到tft中,可以在web UI中查看,并通过命令进行删除
tachyon tft rm /my/1.txt
#使用tachyon持久化RDD,由于之前已经设置了spark.tachyonStore.url和spark.tachyonStore.baseDir,可以直接使用spark sc的persist(StorageLevel.OFF_HEAP)来持久化,当该Spark SC结束时,RDD会被自动清理。
scala> mydata.persist(StorageLevel.OFF_HEAP)

underfs和ramfs之间的数据同步

当TACHYON启动时,Tachyon不会知道已经存在的数据文件。需要使用下面的同步数据命令
$ ./bin/tachyon loadufs [TACHYON_PATH] [UNDERLYING_FILESYSTEM_PATH] [Optional EXCLUDE_PATHS]
例如:
$ tachyon loadufs tachyon://hdp04:19998 hdfs://hdp01:8020/user/spark/tach_data
第三个可选参数指的是UNDERLYING_FILESYSTEM_PATH下的这个PATH列表会除外,不加载到tfs中。
例如”tachyon;spark”表示hdfs://hdp01:8020/user/spark/tach_data下的tachyon和spark目录不会被加载。

tachyon的命令行参数

参照官方文档:http://tachyon-project.org/Command-Line-Interface.html
tachyon的命令行操作和hdfs类似,除了文件系统操作ls, lsr, mkdir, rm, mv, copyFromLocal, copyToLocal还一些工具命令cat, count(Display the number of folders and files matching the specified prefix in “path”.), tail(Print the last 1KB of the specified file to the console.), touch, fileinfo(Print the information of the blocks of a specified file.)之外,还有特有的pin和unpin命令:
command: pin
usage:pin “path”
Description:Pins the given file, such that Tachyon will never evict it from memory. If called on a folder, it recursively pins all contained files and any new files created within this folder.
command: unpin
usage: unpin “path”
Description:Unpins the given file to allow Tachyon to start evicting it again. If called on a folder, it recursively unpins all contained files and any new files created within this folder.

^o^

参考

Tachyon Docs
Tachyon架构分析和现存问题讨论
?CrazyJVM老师的Spark课程

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)Apr 10, 2025 am 09:36 AM

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL:開發人員的基本技能MySQL和SQL:開發人員的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

描述MySQL異步主奴隸複製過程。描述MySQL異步主奴隸複製過程。Apr 10, 2025 am 09:30 AM

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

mysql:簡單的概念,用於輕鬆學習mysql:簡單的概念,用於輕鬆學習Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL:數據庫的用戶友好介紹MySQL:數據庫的用戶友好介紹Apr 10, 2025 am 09:27 AM

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDB緩衝池如何工作,為什麼對性能至關重要?InnoDB緩衝池如何工作,為什麼對性能至關重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL:初學者的數據管理易用性MySQL:初學者的數據管理易用性Apr 09, 2025 am 12:07 AM

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

與MySQL中使用索引相比,全表掃描何時可以更快?與MySQL中使用索引相比,全表掃描何時可以更快?Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中