如果你正在使用2.x版本的Hadoop集群,你应该不需要像上面那样在core-site.xml
文件中添加属性。可是,有些情况下可能会遇到java.io.IOException: No FileSystem for scheme: tachyon
的错误。例如,当YARN(与Hadoop相对)尝试去访问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>
为了使Tachyon和你的Hadoop版本相对应,你必须重新编译Tachyon Client的Jar包,指明你的Hadoop版本。你可以在Tachyon目录下运行如下命令:
$ mvn install -Dhadoop.version=<YOUR_HADOOP_VERSION>
<YOUR_HADOOP_VERSION>
版本支持很多不同的Hadoop发行版。例如:mvn install -Dhadoop.version=2.7.1
将会编译出适合Apache Hadoop 2.7.1版本的Tachyon。 请访问构建Tachyon主分支页面来获取其他发行版本的支持信息。
编译成功后,新的Tachyon客户端Jar包可以在如下目录中找到:
./clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar
下面的内容将利用这个jar包进行展示。
为了可以使Tachyon客户端Jar包对JobClient生效,你可以在
hadoop-env.sh
文件中将HADOOP_CLASSPATH
修改为:$ export HADOOP_CLASSPATH=/<PATH_TO_TACHYON>/
clients/client/target
/tachyon-client-0.8.2-jar-with-dependencies.jar(当然,也可以将该jar包放在其他地方,修改成相应的路径)
该配置让代码可以使用Tachyon的URI来创建和提交作业。
为了让MapRedude作业可以在Tachyon上读写文件,Tachyon客户端Jar包必须被分发到集群的所有节点上。这使得TaskTracker和JobClient包含所有与Tachyon进行交互访问所需要的可执行文件。
如何从Cloudera上加入第三方库这篇文档介绍了分发Jar包的多种方式。文档中建议通过使用命令行的-libjars
选项,使用分布式缓存来分发Tachyon客户端Jar包。另一种分发客户端Jar包的方式就是手动将其分发到Hadoop节点上。下面就是这两种主流方法的介绍:
1.使用-libjars命令行选项 你可以在使用hadoop jar ...
的时候加入-libjars命令行选项,指定/<PATH_TO_TACHYON>/core/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar
为参数。这条命令会把该Jar包放到Hadoop的DistributedCache中,使所有节点都可以访问到。例如,下面的命令就是将Tachyon客户端Jar包添加到-libjars
选项中。
$ hadoop jar hadoop-examples-1.2.1.jar wordcount -libjars /<PATH_TO_TACHYON>/core/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar <INPUT FILES> <OUTPUT DIRECTORY>`
2.手动将Jar包分发到所有节点 为了在每个节点上安装Tachyon,你必须将客户端Jar包tachyon-client-0.8.2-jar-with-dependencies.jar
(位于/<PATH_TO_TACHYON>/core/client/target/
目录)放到每个MapReduce节点的$HADOOP_HOME/lib
(由于版本不同也可能是$HADOOP_HOME/share/hadoop/common/lib
)目录下,然后重新启动所有的TaskTracker。该方法要注意的是所有Jar包必须再次安装,因为每个Jar包都更新到了最新版本。另一方面,当该Jar包已经在每个节点上的时候,就没有必要使用-libjars
命令行选项了。
首先,编译相应Hadoop版本的Tachyon:
$ mvn clean install -Dhadoop.version=<YOUR_HADOOP_VERSION>
为了方便,我们假设是伪分布式的集群,通过运行如下命令启动:
$ cd$HADOOP_HOME$ ./bin/stop-all.sh
$ ./bin/start-all.sh
配置Tachyon,将本地HDFS集群作为其底层存储系统。你需要修改conf/tachyon-env.sh
,加入如下语句:
export TACHYON_UNDERFS_ADDRESS=hdfs://localhost:9000
以本地模式启动Tachyon:
$ ./bin/tachyon-stop.sh all
$ ./bin/tachyon-start.sh local
你可以在Tachyon中加入两个简单的文件来运行wordcount。在你的Tachyon目录中运行:
$ ./bin/tachyon tfs copyFromLocal LICENSE /wordcount/input.txt
该命令将LICENSE
文件复制到Tachyon的文件命名空间中,并指定其路径为/wordcount/input.txt
。
现在我们运行一个用于wordcount的MapReduce作业。
$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount -libjars /<PATH_TO_TACHYON>/core/client/target/tachyon-core-client-0.8.2-jar-with-dependencies.jar -Dtachyon.user.file.understoragetype.default=SYNC_PERSIST tachyon://localhost:19998/wordcount/input.txt tachyon://localhost:19998/wordcount/output
hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount -libjars /usr/local/tachyon/clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar -Dtachyon.user.file.understoragetype.default=SYNC_PERSIST tachyon://master1:19998/wordcount/input.txt tachyon://master1:19998/wordcount/output
作业完成后,wordcount的结果将存在Tachyon的/wordcount/output
目录下。你可以通过运行如下命令来查看结果文件:
$ ./bin/tachyon tfs ls /wordcount/output
$ ./bin/tachyon tfs cat /wordcount/output/part-r-00000
你同样可以在底层存储系统HDFS namenode的WebUI上查看该文件,本地HDFS集群的WebUI在localhost:50070。
由于我保存在tachyon://master1:19998/wordcount/output中。故。。如下
但启动Tachyon有了更多的选项:
因此,如果不想每次启动Tachyon都挂载一次RamFS,可以先使用命令 bin/tachyon-mount.sh Mount workers 或 bin/tachyon-mount.sh SudoMount workers 挂载好所有RamFS,然后使用 bin/tachyon-start.sh all NoMount 命令启动Tachyon。
hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount -libjars /usr/local/tachyon/clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar -Dtachyon.user.file.understoragetype.default=SYNC_PERSIST /in1 /tmp/wordcount
[图片]
tachyon/tachyon-env.sh: line 83: export: 'hdfs://master1:9000' : not a valid identifier Killed 0 processes on worker1
此处是conf/tachyon-env.sh文件出错。应该是你的worker的路径配置错误。如笔者原先是hdfs://master1:9000, 发生如上错误。修改成 TACHYON_UNDERFS_ADDRESS=hdfs:// hadoop@master1 :9000 即成功。(hadoop为用户组,master1是用户名,笔者是虚拟机中配置三台节点)
输入 ssh-add即可
如果还未能进行无密码远程登陆,那就重新安装ssh,然后将公钥(id_rsa.pub)写入authorized_keys(无密码连接列表)。
全部都写进去,然后分别复制到相应位置,即可以无密码登录。
比如:将A节点的id_rsa.pub的内容复制,并写到B中的authorized_keys文件中,此时A可以无密码连接A,而B连接A需要密码,因为A的允许列表中没有B)
相互复制写进文本后,即可相互无密码连接。
至于如何安装ssh,请移步到笔者的hadoop安装的步骤博客中,里面有详细步骤描写。