要进行hadoop分布式计算的学习,首先你需要进行环境的搭建。Hadoop支持单机模式和集群模式!单机模式比较适合用来做程序开发和调式,而集群模式则可以发挥其分布式并行计算的特点。当然要切换两种模式只需要更换配置即可。其它的怎么进行分布式并行计算的问题Hadoop已经帮你解决了。
好了,现在来开始Hadoop的helloworld。Hadoop可以运行在Windows或Linux下面,我本机的操作系统是xp的,如果直接装在xp下面的话需要先安装Cygwin, 这里需要注意的是在安装Cygwin的时候一定选点安装openssh, 因为hadoop在部属到集群的时候,不同机器之间的通信是采用的ssh协议进行通信的。个人感觉在Windows下面做hadoop的环境有点不伦不类,所以直接放弃Windows环境而直接用Linux环境。由于资源只有本机一台PC,系统的是XP,有好多开发的软件都在上面,不是很想重装系统。然后我找了个同事要了个VMWare7.0.0 build-203739, 这样下来Linux环境就有了,而且集群环境也有了,我在Vmware下面装了三个ubuntu10.04的虚拟机(分别命名为namenode,datanode1,datanode2)。
操作系统现在是有了,下一步就是要安装相应的软件,主要有:
一) Install Jdk1.6
1. 可以下载jdk1.6的安装包
2. 由于是ubuntu,可以用比较方便的安装方法,直接在通过sudo apt-get install sun-java6-jdk 来进行在线的安装。(本人喜欢简单,所以用的这种办法,)
二) install openssh-server
1. 下载openssh-server安装包
2. 采用 sudo apt-get install openssh-server
三) install hadoop 0.20.203
Download: http://labs.renren.com/apache-mirror/hadoop/core/stable/hadoop-0.20.203.0rc1.tar.gz
下载完后拷到namenode机器下 /url/local/hadoop/下面,然后做解压缩
hadoop@ubuntu tar zxvf hadoop-0.20.203.0rc1.tar.gz
现在该要的软件都有了,然后需要做一些系统和参数的配置。
一) 配置 ssh无密码登陆
装好了openssh后 可以试一下命令ssh localhost,这个时候系统会提示你是输放密码。我们要送到的目的就是输入完ssh localhost后直接登陆shell.
gimmy@ubuntu:~/.ssh$ ssh-keygen 一直回车,最后在~/.ssh/下面会生成一个不用输密码的公钥。
gimmy@ubuntu:~/.ssh$ cat id_rsa.pub >> authorized_keys
通过 ssh localhost验证一下(做二次,第一次要输入密码,后面即可直接登陆)
二) 编辑/url/local/hadoop/hadoop-0.20.203/conf/hadoop-env.sh
# The java implementation to use. Required.
export JAVA_HOME=/usr/lib/jvm/java-6-sun
格式化namenode
./bin/hadoop namenode –format
这个时候如果你直接启动./bin/start-all.sh,会报错:
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203 -r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011
************************************************************/
2011-05-18 00:59:22,910 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2011-05-18 00:59:22,922 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2011-05-18 00:59:22,924 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2011-05-18 00:59:22,924 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2011-05-18 00:59:22,935 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.NullPointerException
at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:136)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:176)
at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:206)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:240)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)
你应该再修改一下配置
core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
Hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
然后开启hadoop进程:./bin/start-all.sh
执行完成后可用jps查看一下进程是否已经正常启动,eg:
19130 Jps
18710 DataNode
18860 SecondaryNameNode
18568 NameNode
19070 TaskTracker
18931 JobTracker
现在你可以运行hadoop内置的wordcount的demo了,也就是hadoop的helloworld.
通过运行命令:
1. 指定wordcount的输入目录,这个目录是属于hdfs的,所以要用hadoop提供的API创建,如下所示:
./bin/hadoop dfs –put conf/core-site.xml test-in
2. 运行wordcount(test-out随便指定的,程序会自动生成在hdfs中)
./bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount test-in test-out
3. 最后查看输出结果
./bin/hadoop dfs –cat test-out/part-r-00000
--> 1
<!-- 1
</configuration> 1
</property> 1
<?xml 1
<?xml-stylesheet 1
<configuration> 1
<name>fs.default.name</name> 1
<property> 1
<value>hdfs://localhost:9000</value> 1
Put 1
file. 1
href="configuration.xsl"?> 1
in 1
overrides 1
property 1
site-specific 1
this 1
type="text/xsl" 1
version="1.0"?> 1