<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->
Hadoop0.20.2集群配置
说明:本文档是个人研究配置hadoop 集群过程后产生的,参考了别人的配置文档,同时结合自己实际的情况,解决遇到的问题后最终配置成功。 2010-11-25
1准备机器 :没有多余机器,安装了vmware7.0 后模拟的 2 台系统,操作系统是 ubuntu10.10
所有的系统必须有相同的用户和密码,这里两个系统都是用hadoop:hadoop 作用户名和密码
以下操作均是以hadoop 身份进行的。
2根据机器 IP 地址更改 hosts 文件
说明:master 代表第一台机器,主节点( IP:202.112.1.50 ), slave 代表第二台机器,数据节点( IP:202.112.1.49 ),以下可能直接使用此名称。
Master上的 hosts 文件
127.0.0.1 hadoop1 localhost
202.112.1.50 hadoop1 hadoop1
202.112.1.49 hadoop2 hadoop2
Slave上的 hosts 文件
127.0.0.1 hadoop2 localhost
202.112.1.50 hadoop1 hadoop1
202.112.1.49 hadoop2 hadoop2
另外:需要将/etc/hostname文件内容更改为hadoop1或者hadoop2(不知道是否是必须,我这个该了的,OK)
(引用别人的:对于hadoop 来说,从 hdfs 来看,节点分为 namenode 和 datanode ,其中 namenode 只有一个, datanode 有多个;从 mapreduce 来看,节点分为 jobtracker 和 tasktracker ,其中 jobtracker 只有一个, tasktracker 有多个;)
3安装 ssh (为什么要安装这个东西,我不知道,或者说可以去百度一下看看别人怎么说的,他们好像说集群中通信用 ssh ,谁在乎呢,安装吧)
Master和 Slave 机器上都要 ssh
命令: apt-getinstallssh (没有多余配置了,哦,有一个需要输入Y 表示同意安装:::)
在master 机器上做以下操作
安装成功后执行以下命令:
[hadoop@hadoop1:~]$ ssh-keygen-tdsa-P''-f~/.ssh/id_dsa
然后是
[hadoop@hadoop1:~]$ cat~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
在slave 机器上建立 .ssh 文件夹, master 上通过以上命令自己创建了一个, slave 就要自己动手了,毕竟是 slave 嘛。
[hadoop@hadoop2:~]$ mkdir.ssh
然后将master 上的 authorized_keys 拷贝到 slave 的 .ssh 文件夹下,可以通过以下命令:
[hadoop@hadoop1:~]$ scp~/.ssh/authorized_keyshadoop2:/home/hadoop/.ssh/
测试一下:[hadoop@hadoop1:~] sshhadoop2
提示是否连接,输入yes ,连接成功。以后就不需要输入 yes 了。只需要从 master 到 slave 的无密码连接,而不需要测试从 slave 到 master 的无密码连接;在 master 和 slave 机器上 .ssh 文件夹下的内容也是不完全一样的。
4安装 jdk
Ubuntu下执行 [hadoop@hadoop1:~] sudoapt-getinstalsun-java6-jdk
Master和 Slave 机器都需要 jdk 环境。在 ubuntu 下 10.10 下是不需要再去设置 java_home 等环境变量的,安装完后直接输入 java-version 和 javac-version 测试一下, OK 。
至于其他Linux 环境,需要安装 jdk 和配置 jdk 环境变量的,请百度 /Google 吧,直到 java-version 返回正确结果为止。
5下载 hadoop0.20.2
http://mirror.bjtu.edu.cn/apache/hadoop/core/hadoop-0.20.2/
6部署 hadoop
在master 机器上更改配置,然后再拷贝到 slave 机器上,这样所有机器上的 hadoop 就能保证一模一样了。
假定放到hadoop 用户根目录下:
首先解压 hadoop-0.20.2.tar.gz
[hadoop@hadoop1:~]$ tar-zxvfhadoop-0.20.2.tar.gz
Ok,更改配置开始了,包括 hadoop-env.sh , masters , slaves , core-site.xml,hdfs-site.xml,mapred-site.xml 一共 6 个文件。
hadoop-env.sh
添加以下两行(根据实际路径可能有变化哦):
exportJAVA_HOME=/usr/lib/jvm/java-6-sun
exportHADOOP_HOME=/home/hadoop/hadoop-0.20.2
masters:
hadoop1
slaves:
hadoop2
core-site.xml:
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://202.112.1.50:9000</value>
<description>这里 202.112.1.50 这个是指 master 机器 IP 地址,当然可以使用 hadoop1 主机名,条件是 DNS 能够解析,否则会有问题, datanode 连接 namenode 时会报连接不上的错误。所以实际应用中根据 master 机器的 IP 来更改吧,最好使用 IP 这样就不存在问题了。 Thenameofthedefaultfilesystem.AURIwhoseschemeandauthoritydeterminetheFileSystemimplementation.Theuri'sschemedeterminestheconfigproperty(fs.SCHEME.impl)namingtheFileSystemimplementationclass.Theuri'sauthorityisusedtodeterminethehost,port,etc.forafilesystem.</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/HadoopTemp</value>
<description>这里这个 HadoopTemp 目录需要自己手动建立,在 master 和 slave 机器上都需要手动创建 </description>
</property>
</configuration>
hdfs-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>这里指定数据文件默认保留几份备份,默认的是 3 ,自己可以指定,测试时可以指定 1 减少空间需求。 Defaultblockreplication.Theactualnumberofreplicationscanbespecifiedwhenthefileiscreated.Thedefaultisusedifreplicationisnotspecifiedincreatetime.
</description>
</property>
</configuration>
mapred-site.xml
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value> 202.112.1.50 :9001</value>
<description>同意这里指定 Master 的 IP 或者 host ,最好指定 IP 。 ThehostandportthattheMapReducejobtrackerrunsat.If"local",thenjobsarerunin-processasasinglemapandreducetask.
</description>
</property>
</configuration>
至此,所有配置已经完成,hadoop 的配置文件只需要更改自己需要更改的,以上就仅仅更改了很少属性,而其自身有相当多的属性, hadoop 在工作时如果用户更改了,则使用更改后的属性值,如果没有在 *-site.xml 文档里出现,则 hadoop 使用默认的属性,默认属性值 *-default.xml 文档里(默认文档中 /hadoop-0.20.2/src/ 目录下);当然也可以将整个 -default.xml 文档内容拷贝过来,修改需要更改的属性。
以上配置是在master 上进行的,现在将整个 hadoop-0.20.2 文件夹拷贝到 slave 机器上,使用命令:
[hadoop@hadoop1:~]$ scp-r~/hadoop-0.20.2hadoop2:/home/hadoop/
7启动 hadoop
Hadoop的命令在 /hadoop-0.20.2/bin/ 目录下,启动过程在 master 机器上进行。
启动之前需要进行格式化,类似于Windows 文件系统格式化, hadoop 的文件系统也需要格式化后才能被 hadoop 使用。
[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoopnamenode-format
此时配置文件里设置的HadoopTemp 目录会发生变化, check 一下了。如果此命令出错,请百度 /Google 了。
启动:
[hadoop@hadoop1:hadoop-0.20.2]$ bin/start-all.sh
如果有错误,请查看log 文件
测试:
[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoopdfs-mkdirtestdir #创建一个文件夹
[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoopdfs-put/home/hadoop/test.txt/testdir/test.txt
#上传一个文件
[hadoop@hadoop1:hadoop-0.20.2]$ bin/hadoopdfs-ls #列出文件目录
当然也可以访问:http://202.112.1.50:50070
http://202.112.1.50:50030
8问题及解决
1安装 jdk 时找不到 jdk
我在终端输入:sudoapt-getinstallsun_java6_jdk
出现了问题:packagesun_java6_jdk 不能被找到
apt-get提示了以下信息:
Packagesun-java6-jdkisnotavailable,butisreferredtobyanotherpackage.
Thismaymeanthatthepackageismissing,hasbeenobsoleted,or
isonlyavailablefromanothersource
E:Packagesun-java6-jdkhasnoinstallationcandidate
解决办法如下:
1.在终端输入: sudoadd-apt-repository"debhttp://archive.canonical.com/lucidpartner" 回车
2.在终端输入: sudoapt-getupdate, 回车
3.在终端输入: sudoapt-getinstallsun_java6_jdk
OK
问题解决了
2虚拟机上不能联网问题,即不能自动获得 IP
解决办法:设置固定IP
更改/etc/network/interfaces 文件内容如下:
#Thisfiledescribesthenetworkinterfacesavailableonyoursystem
#andhowtoactivatethem.Formoreinformation,seeinterfaces(5).
autolo
ifaceloinetloopback
autoeth0
ifaceeth0inetstatic
address9.186.54.50
netmask255.255.255.0
gateway9.186.54.1
然后重新启用新IP : sudo/etc/init.d/networkingrestart
3最严重的问题是启动 hadoop 后一切都表现正常 ,然而执行 bin/hadoopdfs-put/home/hadoop/test.txt/testdir/test.txt命令时出错:
10/01/0719:50:23INFOhdfs.DFSClient:org.apache.hadoop.ipc.RemoteException:java.io.IOException:File/user/administrator/chen3/NOTICE.txt couldonlybereplicatedto0nodes,insteadof1
atorg.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1270)
atorg.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:351)
atsun.reflect.GeneratedMethodAccessor3.invoke(UnknownSource)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
atjava.lang.reflect.Method.invoke(Method.java:597)
atorg.apache.hadoop.ipc.RPC$Server.call(RPC.java:452)
atorg.apache.hadoop.ipc.Server$Handler.run(Server.java:892)
百度一下有很多相关的解决办法,当然这些办法都没有解决我的错误,也就是说有其它原因引起了该错误,最后查得该错误就是配置文件里使用了 hostname而不是 IP 地址,因为没有 DNS 服务器来解析,所以 ...
本文档详细记录了Hadoop0.20.2集群的配置过程,包括虚拟机环境搭建、SSH安装配置、JDK安装、Hadoop下载与部署等步骤,并针对配置过程中遇到的问题提供了解决方案。
835

被折叠的 条评论
为什么被折叠?



