hadoop开发环境搭建教程:利用Cloudera实现Hadoop安装并配置hadoop可以参考:ClouderaHadoop4实战课程hadoop开发教程学习地址:前言Hadoop是一个实现了MapReduce计算模型的开源分布式并行编程框架。MapReduce的概念来源于Google实验室,它是一个简化并行计算的编程模型,适用于大规模集群上的海量数据处理,目前最成功的应用是分布式搜索引擎。随着2007年底该模式Java开源实现项目ApacheHadoop的出现,使得程序员可以轻松地编写分布式并行程序,并将其运行于计算机集群上,完成海量数据的计算。近两年尤其是今年国内外采用MapReduce模型的应用也逐渐丰富起来,如像NTTKDDI和中国移动这类的电信公司采用该模型分析用户信息,优化网络配置;美国供电局采用该模型来分析电网现状;包括VISA和JP摩根在内的金融公司采用该模型来分析股票数据;包括Amazon和ebay在内的零售商和电子商务公司也开始采用该模型;甚至部分生物公司也采用该模型来进行DNA测序和分析。然而Hadoop安装、部署、管理的难度非常大,这使用很多用户对Hadoop望而却步,好在这种情况不久就得到了改善,Cloudera提供了非常简单的Hadoop的发布版本,能够十分方便地对Hadoop进行安装、部署和管理,这导致目前大约有75%的Hadoop新用户使用Cloudera。1.2规划1.2.1运行模式Hadoop有三种运行模式:单机(非分布)运行模式、伪分布运行模式和分布式运行模式。其中前两种运行模式体现不了Hadoop分布式计算的优势,并没有什么实际意义(当然它们对程序的测试及调试还是很有帮助的),因此在这里还是采用实际环境中使用的分布式运行模式来部署。1.2.2主机规划在这里拟采用三台主机搭建Hadoop环境,由于后期还需要测试增删主机及跨网段主机对Hadoop环境的影响,特将Hadoop主机规划如下:Hadoop-0110.137.253.201Hadoop-0210.137.253.202Hadoop-0310.137.253.203准备后期加入的测试主机Hadoop-0410.137.253.204Firehare-30310.10.3.30准备后期加入的跨网段测试主机1.2.3Hadoop环境规划对于Hadoop来说,最主要的是两个内容,一是分布式文件系统HDFS,一是MapReduce计算模型。在分布式文件系统HDFS看来,节点分为NameNode和DataNode,其中NameNode只有一个,DataNode可以是很多;在MapReduce计算模型看来,节点又可分为JobTracker和TaskTracker,其中JobTracker只有一个,TaskTracker可以是很多。因此在实际的Hadoop环境中通常有两台主节点,一台作为NameNode(I/O节点??),一台作为JobTracker(管理节点??),剩下的都是从节点,同时当做DataNode和TaskTracker使用。当然也可以将NameNode和JobTracker安装在一台主节点上。由于测试机数量有限,所以在这里是让Hadoop-01做为Namenode和Jobtracker,其它主机则作为DataNode和TaskTracker(如果Hadoop环境中主机数量很多的话,还是建议将Namenode和JobTracker部署到不同的主机,以提高计算的性能)。具体规划如下:HDFS:Hadoop-01NameNodeHadoop-02DataNodeHadoop-03DataNodeHadoop-04DataNodeFirehare-303DataNodeMapReduce:Hadoop-01JobTrackerHadoop-02TaskTrackerHadoop-03TaskTrackerHadoop-04TaskTrackerFirehare-303TaskTracker1.3安装规划好了就开始安装Hadoop,如前言中所说使用Cloudera的Hadoop发布版安装Hadoop是十分方便的,首先当然是在每台主机上一个干净的操作系统(我用的是Ubuntu8.04,用户设为Hadoop,其它的版本应该差不多),然后就是安装Hadoop了(这样安装的是Hadoop-0.20,也可以安装Hadoop-0.18的版本,反正安装步骤都差不多。注意,不能同时启用Hadoop-0.20和Hadoop-0.18)。由于每台机器安装步骤都一样,这里就写出了一台主机的安装步骤,主要分为以下几个步骤:1.3.1设置Cloudera的源生成Cloudera源文件(这里采用的是Hadoop-0.20版本,源信息可能过时,最新信息请参见官方文档:):sudovi/etc/apt/sources.list.d/cloudera.list#稳定版(Hadoop-0.18)#deb://archive.cloudera.com/debianhardy-stablecontrib#测试版(Hadoop-0.20)deb://archive.cloudera.com/debianhardy-testingcontrib生成源的密钥:sudoapt-getinstallcurlcurl-s|sudoapt-keyadd-1.3.2安装Hadoop更新源包索引:sudoapt-getupdatesudoapt-getdist-upgrade安装Hadoop:sudoapt-getinstallhadoop-0.20hadoop-0.20-conf-pseudo1.4部署安装好这几台主机的Hadoop环境之后,就要对它们进行分布式运行模式的部署了,首先是设置它们之间的互联。1.4.1主机互联Hadoop环境中的互联是指各主机之间网络畅通,机器名与IP地址之间解析正常,可以从任一主机ping通其它主机的主机名。注意,这里指的是主机名,即在Hadoop-01主机上可以通过命令pingHadoop-02来ping通Hadoop-02主机(同理,要求这几台主机都能相互Ping通各自的主机名)。可以通过在各主机的/etc/hosts文件来实现,具体设置如下:sudovi/etc/hosts127.0.0.1localhost10.x.253.201hadoop-01hadoop-0110.x.253.202hadoop-02hadoop-0210.x.253.203hadoop-03hadoop-0310.x.253.204hadoop-04hadoop-0410.x.3.30firehare-303firehare-303将每个主机的hosts文件都改成上述设置,这样就实现了主机间使用主机名互联的要求。注:如果深究起来,并不是所有的主机都需要知道Hadoop环境中其它主机主机名的。其实只是作为主节点的主机(如NameNode、JobTracker),需要在该主节点hosts文件中加上Hadoop环境中所有机器的IP地址及其对应的主机名,如果该台机器作Datanode用,则只需要在hosts文件中加上本机和主节点机器的IP地址与主机名即可(至于JobTracker主机是否也要同NameNode主机一样加上所有机器的IP和主机名,本人由于没有环境,不敢妄言,但猜想是要加的,如果哪位兄弟有兴趣,倒是不妨一试)。在这里只是由于要作测试,作为主节点的主机可能会改变,加上本人比较懒,所以就全加上了。:)注意2:ubuntu原有的/etc/hosts文件中有将本机计算机名解析为127.0.1.1的字段,例如:127.0.1.1hadoop-01请务必删除,否则会由于绑定ip不正确导致namenode和jobtracker无法连接的问题。1.4.1.1主机互联的可选方法(配置复杂并不推荐)如果各个主机使用dhcp动态分配地址且不具有网络管理员权限,或者由于/etc/hosts文件的修改量过大,对于同一子网中的主机可以同过架设一个WINS服务或使用网络中有的WINS服务来解决互联问题。相关的包可以通过运行tasksel命令,安装sambaclient包获得,安装之后还需要修改/etc/samba/smb.conf架设或设置WINS服务,并修改/etc/nsswitch.conf添加机器名的解析方式。1.4.2计算帐号设置Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同用户名的帐户。由于这里采用的是Cloudera发布的Hadoop包,所以并不需要这方面的设置,大家了解一下即可。1.4.3SSH设置在Hadoop分布式环境中,主节点(NameNode、JobTracker)需要通过SSH来启动和停止从节点(DataNode、TeskTracker)上的各类进程。因此需要保证环境中的各台机器均可以通过SSH登录访问,并且主节点用SSH登录从节点时,不需要输入密码,这样主节点才能在后台自如地控制其它结点。可以将各台机器上的SSH配置为使用无密码公钥认证方式来实现。Ubuntu上的SSH协议的开源实现是OpenSSH,缺省状态下是没有安装的,如需使用需要进行安装。1.4.3.1安装OpenSSH安装OpenSSH很简单,只需要下列命令就可以把openssh-client和openssh-server给安装好:sudoapt-getinstallssh1.4.3.2设置OpenSSH的无密码公钥认证首先在Hadoop-01机器上执行以下命令:hadoop@hadoop-01:~$ssh-keygen-trsaGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/home/hadoop/.ssh/id_rsa):Enterpassphrase(emptyfornopassphrase):(在这里直接回车)Entersamepassphraseagain:(在这里直接回车)Youridentificationhasbeensavedin/home/hadoop/.ssh/id_rsa.Yourpublickeyhasbeensavedin/home/hadoop/.ssh/id_rsa.pub.Thekeyfingerprintis:9d:42:04:26:00:51:c7:4e:2f:7e:38:dd:93:1c:a2:d6hadoop@hadoop-01上述命令将为主机hadoops-01上的当前用户hadoop生成其密钥对,该密钥对被保存在/home/hadoop/.ssh/id_rsa文件中,同时命令所生成的证书以及公钥也保存在该文件所在的目录中(在这里是:/home/hadoop/.ssh),并形成两个文件id_rsa,id_rsa.pub。然后将id_rsa.pub文件的内容复制到每台主机(其中包括本机hadoop-01)的/home/hadoop/.ssh/authorized_keys文件的尾部,如果该文件不存在,可手工创建一个。注意:id_rsa.pub文件的内容是长长的一行,复制时不要遗漏字符或混入了多余换行符。1.4.3.3无密码公钥SSH的连接测试从hadoop-01分别向hadoop-01,hadoop-04,firehare-303发起SSH连接请求