zoukankan      html  css  js  c++  java
  • 分布式配置 tachyon 并执行Hadoop样例 MapReduce

    ----------此文章。笔者按着tachyon官网教程进行安装并记录。


    (本地安装tachyon具体解释:http://blog.csdn.net/u012587561/article/details/51039977 )

    笔者执行环境:

    1. tachyon0.8.2
    2. hadoop2.7.1(笔者之后用hadoop2.6版本号,也建议用2.6版本号)
    3. ubuntu14.04(虚拟机共三台)

    使用Hadoop 2.x

            假设你正在使用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>

    编译Tachyonclient

        为了使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主分支页面来获取其它发行版本号的支持信息。

            编译成功后。新的TachyonclientJar包能够在例如以下文件夹中找到:

    ./clients/client/target/tachyon-client-0.8.2-jar-with-dependencies.jar

            

            以下的内容将利用这个jar包进行展示。


    配置Hadoop

    为了能够使TachyonclientJar包对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来创建和提交作业。

    分发TachyonclientJar包

    为了让MapRedude作业能够在Tachyon上读写文件。TachyonclientJar包必须被分发到集群的全部节点上。

    这使得TaskTracker和JobClient包括全部与Tachyon进行交互訪问所须要的可运行文件。

    怎样从Cloudera上增加第三方库这篇文档介绍了分发Jar包的多种方式。

    文档中建议通过使用命令行的-libjars选项。使用分布式缓存来分发TachyonclientJar包。还有一种分发clientJar包的方式就是手动将其分发到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命令行选项了。

    在本地模式的Tachyon上执行Hadoop wordcount

    首先,编译对应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中。故。。

    例如以下



    也可这样
    hadoop@master1:/usr/local/hadoop$ hadoop dfs -copyFromLocal README.txt /in
    然后:








    在分布式模式的Tachyon上执行Hadoop wordcount


    首先配置conf/tachyon-env.sh

    加入
     export TACHYON_MASTER_ADDRESS=master1 
     export TACHYON_UNDERFS_ADDRESS=hdfs://hadoop@master1:9000   
     #hdfs://ip:port。当中该參数与hadoop/etc/hadoop/core-size.xml的fs.default.name的value一致

    格式化tachyon:bin/tachyon format

    启动分布式tachyon:

    但启动Tachyon有了很多其它的选项:

    • bin/tachyon-start.sh all Mount #在启动前自己主动挂载TachyonWorker所使用的RamFS,然后启动TachyonMaster和全部TachyonWorker。因为直接使用mount命令,所以须要用户为root
    • bin/tachyon-start.sh all SudoMount #在启动前自己主动挂载TachyonWorker所使用的RamFS。然后启动TachyonMaster和全部TachyonWorker。因为使用sudo mount命令,所以须要用户有sudo权限
    • bin/tachyon-start.sh all NoMount #觉得RamFS已经挂载好,不运行挂载操作。仅仅启动TachyonMaster和全部TachyonWorker

    因此。假设不想每次启动Tachyon都挂载一次RamFS。能够先使用命令 bin/tachyon-mount.sh Mount workers 或 bin/tachyon-mount.sh SudoMount workers 挂载好全部RamFS。然后使用 bin/tachyon-start.sh all NoMount 命令启动Tachyon。


    此处使用命令: bin/tachyon-start.sh all SudoMount


    jps查看是否添加了tachyonMaster进程。





    bin/hdfs  dfs  -mkdir -p /in1
    bin/hdfs dfs  -put /usr/local/hadoop/input /in1 (将本地input目录映射到/in1目录中)

    将处理文件放入in1中
    hadoop dfs -copyFromLocal /usr/local/hadoop/etc/hadoop/*.xml /in1  

     

    接下来分布式执行wordcount的MapReduce作业:

    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
    [图片]

    [图片]

    [图片]

    [图片]
     

    分布式作业正常执行,因为程序执行时间较长,建议用小文本次測试。


    否则就像笔者一样,半夜等着它执行完才干睡觉 = =

    (因为困得不行,故停止执行关机睡觉了。图片大家脑补。

    。。





    #############################################################################
    1.  执行tachyon分布式时候出错:
    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是username,笔者是虚拟机中配置三台节点)

     
    2.  ssh连接失败,或总须要输入password

         SSH生成id_rsa, id_rsa.pub后,连接server却报:Agent admitted failure to sign using the key错误。

            输入  ssh-add就可以

        假设还未能进行无password远程登陆。那就又一次安装ssh,然后将公钥(id_rsa.pub)写入authorized_keys(无password连接列表)。

            所有都写进去,然后分别拷贝到对应位置,即能够无password登录。

        比方:将A节点的id_rsa.pub的内容复制,并写到B中的authorized_keys文件里,此时A能够无password连接A,而B连接A须要password。由于A的同意列表中没有B)

                  相互复制写进文本后,就可以相互无password连接。

      至于怎样安装ssh,请移步到笔者的hadoop安装的步骤博客中,里面有具体步骤描写。
      
    3.  将近睡觉前。不要启动tachyon了。等着睡觉非常痛苦。  

    #############################################################################



  • 相关阅读:
    Linux系统安全及应用
    Linux 10 进程和计划的管理任务
    Centos netdata 的安装及配置
    Centos nmon安装及使用
    Python 各种数据类型的了解(上)
    神奇的循环知识
    Pathon的基础知识
    初次遇见Python
    操作系统与编程语言的简介
    计算机硬件基础
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7389370.html
Copyright © 2011-2022 走看看