Ubuntu 15.10, Java 1.7, Hadoop 2.6.0 HA, Spark-1.4.0html
三台机器java
spark-1423-0001: Master, Workergit
spark-1423-0002: Master, Workergithub
spark-1423-0003: Workershell
源码:https://github.com/Alluxio/alluxioapache
可执行文件:https://github.com/Alluxio/alluxio/releasesoracle
我下载的是0.7.0:https://github.com/amplab/tachyon/archive/v0.7.0.zipjvm
本身用Maven编译,固然也能够使用官网编译好的。oop
mvn -Dhadoop.version=2.6.0 clean package -DskipTests=true
由于Spark-1.4.0中已经集成了Tachyon(0.6.*),因此这里使用Tachyon-0.7.0是没有问题的。测试
下面的配置都是在spark-1423-001上进行的。
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 if [[ `uname -a` == Darwin* ]]; then # Assuming Mac OS X export JAVA_HOME=${JAVA_HOME:-$(/usr/libexec/java_home)} export TACHYON_RAM_FOLDER=/Volumes/ramdisk export TACHYON_JAVA_OPTS="-Djava.security.krb5.realm= -Djava.security.krb5.kdc=" else # Assuming Linux if [ -z "$JAVA_HOME" ]; then if [ -d /usr/lib/jvm/java-7-oracle ]; then export JAVA_HOME=/usr/lib/jvm/java-7-oracle else # openjdk will set this if [ -d /usr/lib/jvm/jre-1.7.0 ]; then export JAVA_HOME=/usr/lib/jvm/jre-1.7.0 fi fi fi export TACHYON_RAM_FOLDER=/mnt/ramdisk fi if [ -z "$JAVA_HOME" ]; then export JAVA_HOME="$(dirname $(which java))/.." fi export JAVA="$JAVA_HOME/bin/java" export TACHYON_MASTER_ADDRESS=spark-1423-0001 export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop-cluster #export TACHYON_UNDERFS_ADDRESS=hdfs://localhost:9000 export TACHYON_WORKER_MEMORY_SIZE=10GB 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" # Prepend Tachyon classes before classes specified by TACHYON_CLASSPATH # in the Java classpath. May be necessary if there are jar conflicts #export TACHYON_PREPEND_TACHYON_CLASSES="yes" # Where log files are stored. $TACHYON_HOME/logs by default. #export TACHYON_LOGS_DIR=$TACHYON_HOME/logs CONF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" export TACHYON_JAVA_OPTS+=" -Dlog4j.configuration=file:$CONF_DIR/log4j.properties -Dtachyon.debug=false -Dtachyon.worker.tieredstore.level.max=1 -Dtachyon.worker.tieredstore.level0.alias=MEM -Dtachyon.worker.tieredstore.level0.dirs.path=$TACHYON_RAM_FOLDER -Dtachyon.worker.tieredstore.level0.dirs.quota=$TACHYON_WORKER_MEMORY_SIZE -Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS -Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL -Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data -Dtachyon.worker.max.worker.threads=$TACHYON_WORKER_MAX_WORKER_THREADS -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers -Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE -Dtachyon.worker.data.folder=/tachyonworker/ -Dtachyon.master.max.worker.threads=$TACHYON_MASTER_MAX_WORKER_THREADS -Dtachyon.master.worker.timeout.ms=60000 -Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS -Dtachyon.master.journal.folder=$TACHYON_UNDERFS_ADDRESS/tachyon/journal/ -Dorg.apache.jasper.compiler.disablejsr199=true -Djava.net.preferIPv4Stack=true -Dtachyon.usezookeeper=true -Dtachyon.zookeeper.address=spark-1421-0000:2181,spark-1421-0003:2181,spark-1421-0004:2181,spark-1421-0005:2181,spark-1421-0006:2181 " # 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"
这里须要设置Master IP,Hadoop 地址,我这里Hadoop是高可用的
spark-1423-0001
spark-1423-0002
spark-1423-0003
配置完成以后,将Tachyon分发到Spark-1421-0002,spark-1423-0003,同时修改spark-1423-0002 tachyon-env.sh中的MasterIP,其余不变
下面的操做都是在spark-1423-0001上进行的,首次启动前须要格式化
tachyon format
而后启动
tachyon-start.sh all SudoMount
启动Tachyon有了更多的选项:
l./tachyon-start.sh all Mount在启动前自动挂载TachyonWorker所使用的RamFS,而后启动TachyonMaster和全部TachyonWorker。因为直接使用mount命令,因此须要用户为root;
l./tachyon-start.sh all SudoMount在启动前自动挂载TachyonWorker所使用的RamFS,而后启动TachyonMaster和全部TachyonWorker。因为使用sudo mount命令,因此须要用户有sudo权限;
l./tachyon-start.sh all NoMount认为RamFS已经挂载好,不执行挂载操做,只启动TachyonMaster和全部TachyonWorker
所以,若是不想每次启动Tachyon都挂载一次RamFS,能够先使用命令./tachyon-mount.sh Mount workers 或./tachyon-mount.sh SudoMount workers挂载好全部RamFS,而后使用./tachyon-start.sh all NoMount 命令启动Tachyon。
单机和集群式模式的区别就在于节点配置和启动步骤,事实上,也能够在集群模式下只设置一个TachyonWorker,此时就成为伪分布模式。
由于Tachyon设置了高可用,那么在spark-1423-002上须要启动Master
./tachyon-start.sh master
启动以后能够在:http://spark-1423-0001:19999上面看到Tachyon的启动状况
为了验证高可用,能够将spark-1423-0001中的Master进程杀死,系统会自行进行切换,大概须要花15秒
<configuration> <property> <name>fs.tachyon-ft.impl</name> <value>tachyon.hadoop.TFSFT</value> </property> </configuration>
export SPARK_JAVA_OPTS=" -Dtachyon.zookeeper.address=spark-1421-0000:2181,spark-1421-0003:2181,spark-1421-0004:2181,spark-1421-0005:2181,spark-1421-0006:2181 -Dtachyon.usezookeeper=true $SPARK_JAVA_OPTS"
val s = sc.textFile("tachyon-ft://spark-1423-0001:19999/X") s.count() s.saveAsTextFile("tachyon-ft://spark-1423-0002:19999/Y")
这里须要注意一点,Tachyon读取文件的顺序是先从本机内存中读取,若是本机内存中没有,Tachyon会从集群中其余Worker节点中寻找,若是集群中Worker节点内存中也没有,那么Tachyon会从UnderFS中寻找,例如HDFS中。
在使用Spark-shell测试时,若是是用的Local模式,那么tachyon-ft://spark-1423-0002:19998 只能读取本机内存中的数据,Tachyon集群其余节点中内存的数据都读不到,HDFS中的数据也是读不到。
http://www.cnblogs.com/shishanyuan/p/4775400.html
http://www.sxt.cn/u/756/blog/5410
http://www.tachyonproject.org/documentation/v0.7.1/Running-Spark-on-Tachyon.html