zoukankan      html  css  js  c++  java
  • Giraph入门

    概要

    这是一个Giraph的入门教程,主要用来运行少量输入的Giraph程序,并不能用于生产环境。 

    在这个教程中,我们将会在一个物理机器行部署一个单节点,伪分布的Hadoop集群。这个节点既是master,又是slave。那即是,它将会运行NameNode,SecondaryNameNode,JobTracker,DataNode和TaskTracker java进程,我们也将会部署Giraph到这个机器上,部署使用下面的软件和配置。

    Ubuntu Server 14.04 LTS

     Hardware: 

     Admin account:

     IP address:  12.1.62.152

     Network mask: 255.255.255.0

    Apache Hadoop 1.2.1

    Apache Giraph 1.2.0-SNAPSHOT

    部署Hadoop

    我们将会部署一个单节点,伪分布的Hadooper集群,首先,需要安装Java 1.6或者更高的版本,并且验证安装:

    sudo apt-get install openjdk-7-jdk
    java -version

    你应该能够看到你的Java版本信息,完整的Java被安装在/usr/lib/jvm/java-7-openjdk-amd64,在这个目录中,你可以发现Java的bin和lib目录。

    做完这些之后,创建一个专用的hadoop组和一个新的用户hduser,然后添加这个用户hduser到hadoop组。

    XXX@XXX-ThinkPad-Edge-E431:~$ sudo addgroup hadoop
    正在添加组"hadoop" (GID 1004)...
    完成。
    XXX@XXX-ThinkPad-Edge-E431:~$ sudo adduser --ingroup hadoop hduser
    正在添加用户"hduser"...
    正在添加新用户"hduser" (1003) 到组"hadoop"...
    创建主目录"/home/hduser"...
    正在从"/etc/skel"复制文件...
    输入新的 UNIX 密码: 
    重新输入新的 UNIX 密码: 
    passwd:已成功更新密码
    正在改变 hduser 的用户信息
    请输入新值,或直接敲回车键以使用默认值
        全名 []: 
        房间号码 []: 
        工作电话 []: 
        家庭电话 []: 
        其它 []: 
    这些信息是否正确? [Y/n] y

    现在应该下载和提取hadoop-0.20.203.0rc1从Apache archives(这是在Giraph中默认的hadoop版本)

    su - XXX
    cd /usr/local
    sudo wget http://archive.apache.org/dist/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz
    sudo tar xzf hadoop-1.2.1.tar.gz
    sudo mv hadoop-1.2.1 hadoop
    sudo chown -R hduser:hadoop hadoop

    当安装完之后,切换到用户hduser,用下面的内容编辑用户的$HOME/.bashrc

    export HADOOP_HOME=/usr/local/hadoop
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

    这主要用来设置Hadoop/Java相关的环境变量,当设置完之后,用下面的内容编辑$HADOOP_HOME/conf/hadoop-env.sh文件:

    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
    export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

    第二行主要强制Hadoop使用IPv4,尽管IPv6在该机器上配置啦。因为Hadoop需要在计算的时候存储临时文件,所以你需要用下面的命令创建一个临时目录,这个临时目录是为FS和HDFS文件而创建的。

    su – XXX
    sudo mkdir -p /app/hadoop/tmp
    sudo chown hduser:hadoop /app/hadoop/tmp
    sudo chmod 750 /app/hadoop/tmp

    确保/etc/hosts文件有下面的两行(如果不存在的话,就添加或者修改他们)

    127.0.0.1       localhost
    xxx.xxx.xxx.xxx   hdnode01

    尽管我们可以在这个单节点的集群中使用localhost用于连接,但是使用hostname通常是个更好的选择(例如,你可能会添加一个新的节点,转换你的单节点,伪分布的集群到多节点,分布式的集群)

    现在编辑Hadoop配置文件core-site.xml,mapred-site.xml和hdfs-site.xml,这些文件在$HADOOP_HOME/conf目录下。在<configuration></configuration>之间添加下面的内容。

    编辑core-site.xml:

    <property>
    <name>hadoop.tmp.dir</name>
    <value>/app/hadoop/tmp</value>
    </property>
    
    <property> 
    <name>fs.default.name</name> 
    <value>hdfs://hdnode01:54310</value> 
    </property>

    编辑mapred-site.xml:

    <property>
    <name>mapred.job.tracker</name> 
    <value>hdnode01:54311</value>
    </property>
    
    <property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>4</value>
    </property>
    
    <property>
    <name>mapred.map.tasks</name>
    <value>4</value>
    </property>

    默认下,Hadoop允许2个mappers同时运行,但是Giraph相信我们可以同时运行4个mappers。对于这个单节点,伪分布的部署,我们需要添加后两个properties在mapred-site.xml文件,是为了满足这个需要,否则的话,Giraph的一些单元测试将会失败。

    编辑hdfs-site.xml文件:

    <property>
    <name>dfs.replication</name> 
    <value>1</value> 
    </property>

    这里你仅仅设置存储HDFS文件的拷贝为一份,这是因为你仅仅只有一个data nodes,默认值是3个,如果你没有改变这个值,你将会收到运行时异常。

    下一步,是为hduser用户设置SSH,以至于每次SSH连接被开启时,你不需要输入密码。

    su – hduser
    ssh-keygen -t rsa -P ""
    cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

    然后使用SSH连接到hduser用户下的hdnode01(这里必须使用hdnode01,因为我们在Hadoop的配置文件中使用这个节点的hostname),你将会被提示输入密码,当你第一次使用该用户连接该节点时。当被提醒密码时,实际会存储public RSA key到$HOME/.ssh/known_hosts中,以后你使用ssh连接时,将不需要输入密码。

    现在编辑$HADOOP_HOME/conf/masters:

    hdnode01

    类似的,使用下面的内容编辑$HADOOP_HOME/conf/slaves:

    hdnode01

    这些编辑是设置一个单节点,伪分布的Hadoop集群,包括一个master和一个slave,他们在同一台物理机上。如果你想要部署一个多节点,分布式的Hadoop集群,你应该添加其他的data nodes(例如,hdnode02, hdnode03)在$HADOOP_HOME/conf/slaves文件中,当你在每个节点上完成上面的步骤后。

    为了初始化HDFS,格式化它,需要执行下面的命令:

    $HADOOP_HOME/bin/hadoop namenode -format

    然后开启HDFS和map/reduce进程,使用下面的执行顺序:

    $HADOOP_HOME/bin/start-dfs.sh
    $HADOOP_HOME/bin/start-mapred.sh

    确保所有的Java进程都在运行,执行下面的命令:

    jps

    它将会输出下面的结果:

    9079 NameNode
    9560 JobTracker
    9263 DataNode
    9453 SecondaryNameNode
    16316 Jps
    9745 TaskTracker

    为了停止进程,以开启的相反顺序关闭进程($HADOOP_HOME/bin/stop-*.sh脚本)。这是很重要的,以至于你将不会丢失你的数据,现在已经完成了一个单节点,伪分布的Hadoop集群。

     

    运行一个map/reduce任务

    既然我们已经有一个运行的Hadoop集群,现在我们可以运行map/reduce任务。我们将会使用WordCount的例子,它会读取文本文件,然后计算每个单词出现的次数。输入是一个文本文件,输出也是一个文本文件,输出每一行包含一个单词和这个单词出现的次数,以Tab分隔。这个例子压缩在$HADOOP_HOME/hadoop-examples-1.2.1.jar。现在让我们开始吧,下载一个比较大的UTF-8的文件到临时目录中,拷贝它到HDFS。然后确保它被拷贝成功。

    cd /tmp/
    wget http://www.gutenberg.org/cache/epub/132/pg132.txt
    $HADOOP_HOME/bin/hadoop dfs -copyFromLocal /tmp/pg132.txt /user/hduser/input/pg132.txt
    $HADOOP_HOME/bin/hadoop dfs -ls /user/hduser/input

    完成之后,你可以运行wordcount例子,为了启动一个map/reduce任务,你可以使用$HADOOP_HOME/bin/hadoop jar命令:

    $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-examples-1.2.1.jar wordcount /user/hduser/input/pg132.txt /user/hduser/output/wordcount

    你可以监控你的任务的进度,使用Web UI:

    NameNode daemon: http://hdnode01:50070

    JobTracker daemon: http://hdnode01.50030

    TaskTracker daemon: http://hdnode01.50060

    只要任务完成,你可以检测输出用下面的命令:

    $HADOOP_HOME/bin/hadoop dfs -cat /user/hduser/output/wordcount/p* | less

     部署Giraph

    我们将会部署Giraph,为了从repository构建Giraph。你需要首先安装Git和Maven3,通过运行下面的命令:

    su - hdadmin
    sudo apt-get install git
    sudo apt-get install maven
    mvn -version

    确保你安装Maven3或者更高的版本,Giraph使用Munge插件,这个插件需要Maven3,为了支持hadoop的多个版本,web site插件也需要Maven3,你可以clone Giraph从Github:

    cd /usr/local/
    sudo git clone https://github.com/apache/giraph.git
    sudo chown -R hduser:hadoop giraph
    su - hduser

    之后修改用户hduser的$HOME/.bashrc文件,用下面的内容:

    export GIRAPH_HOME=/usr/local/giraph

    保存和关闭文件,然后验证,编译,测试,压缩Giraph为JAR文件,通过运行下面的命令:

    source $HOME/.bashrc
    cd $GIRAPH_HOME
    mvn package -DskipTests

    参数-DskipTests将会跳过测试环节,当第一次运行的时候,需要花费一些时间,因为Maven要下载一些文件到你本地的仓库。你可能需要执行很多遍才能成功,这是因为远程的服务器可能会超时,只要packaging成功后,你将会有 一个Giraph Core JAR,它的位置是$GIRAPH_HOME/giraph-core/target/giraph-1.2.0-SNAPSHOT-for-hadoop-1.2.1-jar-with-dependencies.jar,Giraph的例子JAR文件,它的位置是$GIRAPH_HOME/giraph-examples/target/giraph-examples-1.1.0-SNAPSHOT-for-hadoop-1.2.1-jar-with-dependencies.jar,现在你已经完成部署Giraph。

    运行一个Giraph任务

    只要我们完成部署Giraph和Hadoop,我们就可以开始运行我们的第一个Giraph任务,我们将会使用SimpleShortestPathsComputation例子,它将会读取一个graph的输入文件,以一种支持的格式,计算从源点到其他节点的最短路径。源点在输入文件中总是第一个节点,我们将会使用JsonLongDoubleFloatDoubleVertexInputFormat输入格式。首先,创建一个例子graph,在/tmp/tiny_graph.txt,用下面的内容:

    [0, 0, [[1, 1], [3, 3]]]
    [1, 0, [[0, 1], [2, 2], [3, 1]]]
    [2, 0, [[1, 2], [4, 4]]]
    [3, 0, [0, 3], [1, 1], [4, 4]]]
    [4, 0, [[3, 4], [2, 4]]]

     保存和关闭文件,每一行是下面的格式[source_id, source_value, [[dest_id, edge_value], ...]],在这个图像中,有5个节点和12个边。拷贝这个输入文件到HDFS中:

    $HADOOP_HOME/bin/hadoop dfs -copyFromLocal /tmp/tiny_graph.txt /user/hduser/input/tiny_graph.txt
    $HADOOP_HOME/bin/hadoop dfs -ls /user/hduser/input

    我们将会使用IdWithValueTextOutputFormat的输出格式,每一行包含source_id length对于每一个节点(源点默认有0长度),你可以运行这个例子通过下面的命令:

    $HADOOP_HOME/bin/hadoop jar $GIRAPH_HOME/giraph-examples/target/giraph-examples-1.2.0-SNAPSHOT-for-hadoop-1.2.1-jar-with-dependencies.jar org.apache.giraph.GiraphRunner org.apache.giraph.examples.SimpleShortestPathsComputation -vif org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat -vip /user/hduser/input/tiny_graph.txt -vof org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op /user/hduser/output/shortestpaths -w 1

    记住,这个任务被计算是使用单个的worker,使用参数-w来标识。为了得到更多的信息关于运行Giraph任务。你可以运行下面的命令:

    $HADOOP_HOME/bin/hadoop jar $GIRAPH_HOME/giraph-examples/target/giraph-examples-1.2.0-SNAPSHOT-for-hadoop-1.2.1-jar-with-dependencies.jar org.apache.giraph.GiraphRunner -h

    你可以监控你的Giraph任务的进度,从JobTracker Web GUI界面。只要任务执行完,你可以通过下面的命令来查看结果:

    $HADOOP_HOME/bin/hadoop dfs -cat /user/hduser/output/shortestpaths/p* | less
  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/yandufeng/p/5213685.html
Copyright © 2011-2022 走看看