|
<!-- [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.1hadoop1localhost
202.112.1.50hadoop1hadoop1
202.112.1.49hadoop2hadoop2
Slave上的hosts文件
127.0.0.1hadoop2localhost
202.112.1.50hadoop1hadoop1
202.112.1.49hadoop2hadoop2
另外:需要将/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.txtcouldonlybereplicatedto0nodes,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服务器来解析,所以... |
|
|