tachyon、spark、hdfs集群整合

一、环境

spark 2.0.1
hadoop 2.7.1
tachyon 0.8.2

二、原理及参考文档

1.Spark入门实战系列–10.分布式内存文件系统Tachyon介绍及安装部署
2.Tachyon–Spark 缺省的 off-heap 内存框架
3.在Tachyon运行spark应用程序
4.《SPARK/TACHYON:基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)
5.Tachyon 项目官方网站

三、安装搭建tachyon集群

1.下载tachyon

官网上下载最新版本tachyon-0.8.2-bin.tar.gz

2.master上/home/cms下安装tachyon
tar xvfz tachyon-0.8.2-bin.tar.gz
3.conf创建配置文件,并配置
cp tachyon-env.sh.template tachyon-env.sh

修改配置文件

export JAVA="${JAVA_HOME}/bin/java"
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export TACHYON_MASTER_ADDRESS=master
export HADOOP_HOME=$HOME/hadoop-2.7.1
export TACHYON_UNDERFS_ADDRESS=hdfs://master:9000
#export TACHYON_UNDERFS_ADDRESS=${TACHYON_UNDERFS_ADDRESS:-hdfs://localhost:9000}
export TACHYON_WORKER_MEMORY_SIZE=0.5GB

《tachyon、spark、hdfs集群整合》

JAVA_HOME:系统中java的安装路径
TACHYON_MASTER_ADDRESS:启动TachyonMaster的地址,默认为localhost,所以在单机模式下不用更改
TACHYON_UNDERFS_ADDRESS:Tachyon使用的底层文件系统的路径,在单机模式下可以直接使用本地文件系统,如"/tmp/tachyon",也可以使用HDFS,如"hdfs://ip:port"
TACHYON_WORKER_MEMORY_SIZE:每个TachyonWorker使用的RamFS大小
```
#####4.在workers下添加work节点机器名
```
master
slave1
slave2
```
#####5.配置环境变量
/etc/profile
```
export TACHYON_HOME=$HOME/tachyon-0.8.2
path=$TACHYON_HOME/bin:$PATH
```
```
source /etc/profile
```
#####6.向slave1,slave2复制tachyon-0.8.2文件
```
sudo scp -r tachyon-0.8.2 cms@slave1:/home/cms/
sudo scp -r tachyon-0.8.2 cms@slave2:/home/cms/
```
#####7.配置slave1,slave2的环境变量
####四、测试tachyon集群
#####1.启动hdfs
```
start-all.sh
```
#####2.格式化tachyon
```
tachyon format
```
#####3.启动tachyon集群
```
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

#####4.验证启动
jps,没有TachyonWorker和TachyonMaster进程
查找tachyon-0.8.2下的logs
master.log
报个一个错
```
Exception thrown when trying to get FileSystem for hdfs://master:9000
org.apache.hadoop.ipc.RemoteException: Server IPC version 9 cannot communicate with client version 4
```
查看官网 当前的tachyon 0.8的版本与hadoop 2.7.1版本不兼容
解决办法:mvn 重新编译

![](http://upload-images.jianshu.io/upload_images/1908836-fabc76d9b4810191.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
方法一:
将```${ALLUXIO_HOME}/pom.xm```l中的```<hadoop.version>1.4.0</hadoop.version>```改为```<hadoop.version>2.7.1</hadoop.version>```
然后执行:
```
 mvn clean package -DskipTests
```
方法二:
```
mvn -Dhadoop.version=2.7.1 clean package -DskipTests
```
此过程需要的时间非常漫长。。。
重新format 然后启动 然后 jps
master:

![](http://upload-images.jianshu.io/upload_images/1908836-7f91333d5d3ab9eb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
slave:

![](http://upload-images.jianshu.io/upload_images/1908836-3a294ea427ae2e07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/1908836-162095b49870339e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以在浏览器内打开Tachyon的WebUI,如 http://hadoop1:19999,查看整个Tachyon的状态,各个TachyonWorker的运行情况、各项配置信息和浏览文件系统等。

![](http://upload-images.jianshu.io/upload_images/1908836-ecaf89e2055e79ce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/1908836-2800d3bb587fdf18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####五、tachyon命令行的使用
例如
```tachyon tfs mkdir /tmp```

![](http://upload-images.jianshu.io/upload_images/1908836-09fb21ff1a0526f7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####六、在Tachyon运行spark
#####1.添加core-site.xml
具体操作是在$SPARK_HOME/conf目录下创建core-site.xml文件
```
$cd /app/hadoop/spark-1.1.0/conf
$touch core-site.xml
$vi core-site.xml
```
在该配置文件中添加如下内容:
```
<configuration>
  <property>
    <name>fs.tachyon.impl</name>
    <value>tachyon.hadoop.TFS</value>
  </property>
</configuration>
```
#####2.启动spark集群
#####3.准备文件
现在在hdfs先上传一个文件
```
hadoop fs -put u.data tmp/ml-100k/u.data
```
这个时候,可以通过tachyon来获取u.data文件
#####4.代码 tatest.py
```
from pyspark import SparkContext, SparkConf
appName="shashibiya"
conf=SparkConf().setAppName(appName).setMaster("local")
sc = SparkContext(conf=conf)
user_data=sc.textFile("tachyon://master:19998/tmp/ml-100k/u.data")
user_fields=user_data.map(lambda line:line.split("|"))
print user_fields.take(5)
```
shell的形式我运行暂时失败
总是找不到blabla  class
我就采用 独立应用的方式 并把jar包 包含进去
```
spark-submit --jars /home/cms/tachyon-0.8.2/clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar tatest.py
```
运行结果:

![](http://upload-images.jianshu.io/upload_images/1908836-950fd9b8f4d7d815.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
其中,tachyon://master:19998就是你的tachyon的通信地址,那怎么获取得到hdfs上的文件的呢?因为通过```export TACHYON_UNDERFS_ADDRESS=hdfs://master:9000```配置,就可通过tachyon找到那个文件了
查看tachyon下的目录


![](http://upload-images.jianshu.io/upload_images/1908836-b2a8581dba74d048.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**然而。。。**
直接从hdfs上读取文件
```
user_data=sc.textFile("hadoop://master:9000/tmp/ml-100k/u.data")
```
运行时间4s多,远比tachyon快,why?待探索

![](http://upload-images.jianshu.io/upload_images/1908836-93ac75b355421a2f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    原文作者:玄月府的小妖在debug
    原文地址: https://www.jianshu.com/p/087b9e97c1b9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞