继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

tachyon、spark、hdfs集群整合

慕村9548890
关注TA
已关注
手记 1296
粉丝 227
获赞 991

一、环境

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

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP