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--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 )...
完成。
XXX@XXX-ThinkPad-Edge-E431:~$ sudo adduser --ingroup hadoop hduser
正在添加用户"hduser"...
正在添加新用户"hduser" () 到组"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--openjdk-amd64
这主要用来设置Hadoop/Java相关的环境变量,当设置完之后,用下面的内容编辑$HADOOP_HOME/conf/hadoop-env.sh文件:
export JAVA_HOME=/usr/lib/jvm/java--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 /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:</value>
</property> <property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value></value>
</property> <property>
<name>mapred.map.tasks</name>
<value></value>
</property>
默认下,Hadoop允许2个mappers同时运行,但是Giraph相信我们可以同时运行4个mappers。对于这个单节点,伪分布的部署,我们需要添加后两个properties在mapred-site.xml文件,是为了满足这个需要,否则的话,Giraph的一些单元测试将会失败。
编辑hdfs-site.xml文件:
<property>
<name>dfs.replication</name>
<value></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
它将会输出下面的结果:
NameNode
JobTracker
DataNode
SecondaryNameNode
Jps
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,用下面的内容:
[, , [[, ], [, ]]]
[, , [[, ], [, ], [, ]]]
[, , [[, ], [, ]]]
[, , [, ], [, ], [, ]]]
[, , [[, ], [, ]]]
保存和关闭文件,每一行是下面的格式[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.-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
记住,这个任务被计算是使用单个的worker,使用参数-w来标识。为了得到更多的信息关于运行Giraph任务。你可以运行下面的命令:
$HADOOP_HOME/bin/hadoop jar $GIRAPH_HOME/giraph-examples/target/giraph-examples-1.2.-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
Giraph入门的更多相关文章
- 大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
Technorati 标记: hadoop,生态圈,ecosystem,yarn,spark,入门 1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用 ...
- Spark入门实战系列--9.Spark图计算GraphX介绍及实例
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
随机推荐
- 【Xilinx-Petalinux学习】-05-OpenCV程序测试
占位, 通过上一次编译的opencv库,运行程序,实现图像处理
- Linux内核探索之路——关于方法
转载自:http://blog.chinaunix.net/uid-20608849-id-3014502.html Linux内核实践之路 -给那些想从Linux内核找点乐趣的人 一个不能回避的 ...
- 最新的thinkphp 后台入口的问题
新的thinkphp后台入口绑定了单独了文件 admin.php 要注意.
- access 随机选取数据
access随机读取数时 用order by rnd(id) 发现每次获取的数据顺序都是一致的,必须要加上随机数才可以,如下: Random r = new Random(); ...
- 安装了C
2014-04-09 13:19:30 大学里看的第一本编程书籍,就是C.但是一直没有编译. 今天首次安装,我也佩服当初我是怎么通过C二级的. 上午写了sds手册.其中的制图用的visio制图,非常好 ...
- 在asp.net中使用ajax记录
一.问题描述 ajax在mvc中使用频繁,比如cms中的评论功能,但由于涉及到前后端开发,日久容易忘,在此做下记录. 二.内容 控制器中代码示例: /// <summary> /// 在文 ...
- mysql数据库锁定机制
前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就 成为了各种数据库的核心技术之一.本章将对MySQL中两 ...
- animate动画被锁在队列中不动怎么解决
[示例]: function scroll_to(obj){ $('html,body').animate({scrollTop:obj.position().top},700) ...
- MonthCalendar控件
MonthCalendar控件 功能,直接显示月历,
- void 0 === undefined
http://www.cnblogs.com/fsjohnhuang/p/4146506.html