为了账号安全,请及时绑定邮箱和手机立即绑定

tachyon、spark、hdfs集群整合

标签:
Spark

一、环境

spark 2.0.1
hadoop 2.7.1
tachyon 0.8.2

二、原理及参考文档

三、安装搭建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-amd64export TACHYON_MASTER_ADDRESS=masterexport HADOOP_HOME=$HOME/hadoop-2.7.1export TACHYON_UNDERFS_ADDRESS=hdfs://master:9000#export TACHYON_UNDERFS_ADDRESS=${TACHYON_UNDERFS_ADDRESS:-hdfs://localhost:9000}export TACHYON_WORKER_MEMORY_SIZE=0.5GB

webp

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?imageM



作者:玄月府的小妖在debug
链接:https://www.jianshu.com/p/087b9e97c1b9

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消