本文档介绍如何获取Tachyon上的数据去执行Hadoop的MapReduce程序。
1. 前提条件
l 安装好Java JDK 6及以上
l 安装并正常运行Hadoop环境
l 安装并正常运行Tachyon环境(本地模式或集群模式)
2. 使用Hadoop 1.x
如果你使用Hadoop 1.x集群环境,那么需要确保core-site.xml文件配置如下内容:
<property>
<name>fs.tachyon.impl</name>
<value>tachyon.hadoop.TFS</value>
</property>
<property>
<name>fs.tachyon-ft.impl</name>
<value>tachyon.hadoop.TFSFT</value>
</property>
通过上面的配置项可以让你的MapReduce作业使用Tachyon作为输入或输出的文件系统。如果你使用HDFS作为Tachyon的底层存储系统,那么有必要将上面的配置内容也添加到hdfs-site.xml文件中。
3. 使用Hadoop 2.x
如果你使用Hadoop 2.x集群环境,你没有必要将上面的配置内容添加到core-site.xml文件中。然而,在某些特殊情况下,你可能会遇到如下的错误:
error: java.io.IOException: NoFileSystem for scheme: tachyon.
例如,这可能会在使用Yarn去访问Tachyon文件时发生这种错误。如果这种错误发生,那么就需要将上面的配置内容添加到core-site.xml 中,并重启Yarn。
<property>
<name>fs.tachyon.impl</name>
<value>tachyon.hadoop.TFS</value>
</property>
<property>
<name>fs.tachyon-ft.impl</name>
<value>tachyon.hadoop.TFSFT</value>
</property>
4. 编译Tachyon客户端
为了使用Tachyon匹配你的Hadoop版本号,你需要重新编译Tachyon的客户端jar包程序,在编译时指定Hadoop版本号。
比如,我使用的Tachyon版本号为0.8.2,则如下操作:
[hadoop@gpmasterclients]$ pwd
/home/hadoop/tachyon-0.8.2/clients
[hadoop@gpmasterclients]$ mvn install -Dhadoop.version=2.6.0
[INFO] Scanningfor projects...
[INFO]------------------------------------------------------------------------
[INFO] ReactorBuild Order:
[INFO]
[INFO] TachyonClients
[INFO] TachyonClients - Implementation
[INFO] TachyonClients - Distribution
[INFO]
[INFO]------------------------------------------------------------------------
[INFO] BuildingTachyon Clients 0.8.2
[INFO]------------------------------------------------------------------------
……………………………………..
[INFO]------------------------------------------------------------------------
[INFO] ReactorSummary:
[INFO]
[INFO] TachyonClients .................................... SUCCESS [ 18.456 s]
[INFO] TachyonClients - Implementation ................... SUCCESS [01:46 min]
[INFO] TachyonClients - Distribution ..................... SUCCESS [ 44.406 s]
[INFO]------------------------------------------------------------------------
[INFO] BUILDSUCCESS
[INFO]------------------------------------------------------------------------
[INFO] Total time:02:49 min
[INFO] Finishedat: 2016-01-10T13:43:47+08:00
[INFO] FinalMemory: 41M/137M
[INFO] ------------------------------------------------------------------------
编译成功后,可以进入如下目录查看生成的jar包:
[hadoop@gpmasterclients]$ cd client/target/
[hadoop@gpmastertarget]$ ll
总用量 85904
-rw-r--r-- 1hadoop hadoop 87 1月 10 13:43checkstyle-cachefile
-rw-r--r-- 1hadoop hadoop 8985 1月 10 13:43checkstyle-checker.xml
-rw-r--r-- 1hadoop hadoop 80 1月 10 13:43checkstyle-result.xml
drwxr-xr-x 2hadoop hadoop 4096 1月 10 13:10javadoc-bundle-options
drwxr-xr-x 2hadoop hadoop 4096 1月 10 13:10maven-archiver
drwxr-xr-x 3 hadoophadoop 4096 1月 10 13:10 maven-status
-rw-r--r-- 1hadoop hadoop 2291291 1月 10 13:10original-tachyon-client-0.8.2.jar
-rw-r--r-- 1hadoop hadoop 41927880 1月 10 13:10 original-tachyon-client-0.8.2-jar-with-dependencies.jar
-rw-rw-r-- 1hadoop hadoop 2291291 1月 10 13:43tachyon-client-0.8.2.jar
-rw-rw-r-- 1hadoop hadoop 41405478 1月 10 13:43 tachyon-client-0.8.2-jar-with-dependencies.jar
-rw-r--r-- 1hadoop hadoop 2919 1月 10 13:10tachyon-client-0.8.2-javadoc.jar
-rw-r--r-- 1hadoop hadoop 519 1月 10 13:10tachyon-client-0.8.2-sources.jar
[hadoop@gpmastertarget]$
5. 配置Hadoop
为了Tachyon客户端的jar包能够被JobClient使用,你需要修改 Hadoop配置文件hadoop-env.sh中的参数HADOOP_CLASSPATH:
exportHADOOP_CLASSPATH=/home/hadoop/tachyon-0.8.2/clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar
这将允许使用Tachyon的URIs去创建和提交作业。
6. 分发Tachyon的客户端jar包
为了确保MapReduce的作业可以运行在Tachyon之上,我们需要将Tachyon的部署包tachyon-client*.jar安装在Hadoop所在的所有主从节点上。这将使得TaskTracker和JobClient能够拥有所有需要的可执行文件与Tachyon进行交互。
注释:
下面描述分发jar包文件的常用的两种方法,具体方法可以参考Tachyon文档中的引用的帮助文档。
方法一:最为简单的直接的方法是将Tachyon的客户端jar包存放在每一个Hadoop的部署节点上。对于安装的Tachyon节点,你需要放置Tachyon的客户端jar包,也在Hadoop每个节点的$HADOOP_HOME/lib(也可能是$HADOOP_HOME/share/hadoop/common/lib)目录下,然后重启所有的TaskTracker。这个方法的缺点是,每当有新的发布版本时,jar包需要重新安装。
方法二:推荐的方法是可以使用-libjars命令选项来运行一个任务。该命令需要指定tachyon-client-版本号-jar-with-dependencies.jar包的绝对路径作为参数,将jar包放置在Hadoop分布式缓存中,如果经常需要更新Tachyon的Jar包,这项操作尤其必要。但是,该方法会在Hadoop的任务执行时由于jar包的分发而引入额外的网络开销。
hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount -libjars ${TACHYON_HOME}/clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar <INPUT FILES> <OUTPUT DIRECTORY>
`
7. 以Tachyon本地模式运行Hadoop的wordcount
l 重启Hadoop
stop-yarn.sh
stop-dfs.sh
start-dfs.sh
start-yarn.sh
l 配置Tachyon使用HDFS作为底层存储系统
1. 修改conf/tachyon-env.sh文件:
export TACHYON_UNDERFS_ADDRESS=hdfs://gpmaster:9000
2. 以本地模式重启Tachyon
tachyon-stop.sh
tachyon-start.sh local
l 添加测试文件到Tachyon文件系统
[hadoop@gpmaster input]$ tachyon tfs mkdir/wordcount/
Successfullycreated directory /wordcount
[hadoop@gpmasterinput]$ tachyon tfs copyFromLocal word1.txt /wordcount/
Copied word1.txtto /wordcount
[hadoop@gpmasterinput]$ tachyon tfs copyFromLocal word2.txt /wordcount/
Copied word2.txtto /wordcount
[hadoop@gpmasterinput]$ tachyon tfs cat /wordcount/*
Hello Spark
Hello Hadoop
Hello Tachyon
Hello Scala
HelloJiangshouzhuang
Hello Scala
Hello Tachyon
Hello Zhangyun
l 在Tachyon内存文件系统上运行WordCount程序
hadoop jar/home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jarwordcount -libjars/home/hadoop/hadoop-2.6.0/share/hadoop/common/lib/tachyon-client-0.8.2-jar-with-dependencies.jar-Dtachyon.user.file.understoragetype.default=SYNC_PERSISTtachyon://192.168.1.128:19998/wordcount/tachyon://192.168.1.128:19998/wordcount/output
l 查看结果
[hadoop@gpmasterinput]$ tachyon tfs ls /wordcount/output
72.00B 01-10-2016 15:31:36:846 In Memory /wordcount/output/part-r-00000
0.00B 01-10-2016 15:31:38:954 In Memory /wordcount/output/_SUCCESS
[hadoop@gpmasterinput]$ tachyon tfs cat /wordcount/output/part-r-00000
Hadoop 1
Hello 8
Jiangshouzhuang 1
Scala 2
Spark 1
Tachyon 2
Zhangyun 1