获取Tachyon上的数据去执行Hadoop的MapReduce程序

本文档介绍如何获取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

你可能感兴趣的:(获取Tachyon上的数据去执行Hadoop的MapReduce程序)