首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

2012-07-28 
RedHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试????1、hadoop 在 redhat linux

RedHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试
????1、hadoop 在 redhat linux下的安装过程

??????网上有很多讲授在windows下通过Cygwin安装hadoop的,笔者认为hadoop原始设计就是在linux下安装使用的,在windows下通过Cygwin安装也无非是模拟linux环境再在这个模拟的环境上装hadoop,既然要学hadoop就真枪实弹的在linux下安装来学习,但是要搞一台真正的linux系统对一般个人来说不容易,但是我们可以用虚拟机VMware Player,就是在windows下装一个虚拟机(VMware Player 就是个很好的虚拟机),然后在虚拟机上装一个linux系统,实现和本机windows的通信,具体的怎么安装虚拟机,怎么在虚拟机上安装linux,以及怎么实现和本机windows的通信,这里就不讲了,这个网上有很多资料。

?? ?2、在本机windows下,通过eclispe连接到linux虚拟机上安装好的haoop,进行开发调试

????linux上装好hadoop之后,可以等陆到linux上通过hadoop的shell命令查看hadoop的 hdfs文件系统,执行写好的mapreduce程序,但是这样会很不方便,我们通常 的做法是在windows下开发程序,调试成功之后,再发布到linux上执行,这一部分就是来分享一下如何配置windows下的eclipse,可以链接到linux下的hadoop。

?

接下来就先说说第一部分的内容:

?

?? ? ?hadoop安装有三种模式:单机模式,伪分布式,完全分布式。

?? ? ?1、单机模式: ? 没意义,pass掉,不讨论。

?

?? ? ?2、 伪分布式: ? 就是在一台机器上模拟namenode、datanode、jobtracker、tasktracker、secondaryname。每一个存在的形式是一个java进程。

?

?? ? ?3、完全分布式:就是一个hadoop集群,有n台机器组成,一般组织方式是:一台机器作为master,上面 运行 ? ?namenode和jobtracker,另外的机器作为slave,上面运行datanode和tasktracker,至于secondaryname,可以运行在master上,也可以运行在另外一台机器上。secondaryname是namenode的一个备份里面同样保存了名字空间,和文件到文件块的map关系。建议运行在另外一台机器上,这样master死掉之后,还可以通过secondaryname所在的机器找回名字空间,和文件到文件块得map关系数据,恢复namenode。

?

?? ? ?这里条件有限,就只能实现伪分布式,就是在虚拟机上装一个linux。其实也可以在虚拟机上装n个linux,来实现完全分布式,但是我怕我的小本本,吃不消。就只能装伪分布式了。

?

?? ? 首先确保windows下已经安装了虚拟机,并在虚拟机上安装了linux,且能和windows通信了(在windows的cmd里ping linux的ip能ping通说明可以通信了,ask:怎么知道linux的ip?,answer:进入linux终端,ifconfig即可看到)笔者window上已经安装了虚拟机并在虚拟机上装了linux系统,装linux的时候会有一个root用户,接下来我们就全部用这个root用户来操作,网上好多资料说新建一个用户比如hadoop,来安装hadoop,这里为了方便,就用root(其实是偷懒,不想弄得复杂,哇咔咔,(*^__^*) 嘻嘻……)。

?

?? ?安装hadoop步骤

?? ?1、实现linux的ssh无密码验证配置.

?? ?2、在linux下安装jdk,并配好环境变量

?? ?3、修改linux的机器名,并配置 /etc/hosts

?? ?4、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml,

?? ? ? ??mapred-site.xml,masters,slaves文件的配置

?? ?5、把修改好的hadoop整个文件夹传到linux下

?? ?6、把hadoop的bin加入到环境变量

?? ?7、格式化hadoop,启动hadoop

?? ?8、验证是否启动,并执行wordcount

?

?#这个顺序并不是一个写死的顺序,就得按照这个来,如果你知道原理,可以打乱顺序来操作,比如1、2、3,先那个后那个,都没问题,但是有些步骤还是得依靠一些操作完成了才能进行,新手建议按照顺序来。#

?

?一、实现linux的ssh无密码验证配置

?

?? ? ?ask:为什么要配置ssh无密码验证

?

?? ? ?answer:Hadoop需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,(datanode向namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解)。许多教程上介绍Hadoop集群配置时只说明了namenode上SSH无密码登录所有datanode,我在配置时发现必须使datanode上也能SSH无密码登录到namenode,Hadoop集群才能正常启动(也许这不是必须的,只是我的一个失误,但是这样能够正常启动Hadoop集群)。上述蓝色字体,是我粘的某个前辈的话,大概意思是,namenode 和datanode之间发命令是靠ssh来发的,发命令肯定是在运行的时候发,发的时候肯定不希望发一次就弹出个框说:有一台机器连接我,让他连吗。所以就要求后台namenode和datanode无障碍的进行通信,这个无障碍怎么实现呢?,就是配置ssh无密码验证.上述中前辈有个顾虑,说实现了namenode到datanode无障碍链接到,那还用实现datanode和namenode的无障碍连接吗?,这个我就不考虑了,我这里是伪分布的,就一台机器,namenode和datanode都在一个机器上,能实现自己连自己就行了。 不是自己的问题就不去伤脑筋了,哇咔咔~~,读者如果弄完全分布式的时候,碰到这个问题,可以自己试试,不行,也就实现datanode到namenode的无障碍的通信,试试又累不死~~~。

?

?? ??ask:实现无密码验证就能无障碍连接,这其中原理是神马捏?

?

?? ? answer:以namenode到datanode为例子:Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上。这也是我粘的某个前辈的话,啥也不说了,前辈说的很清楚,就是这么回事。

?

?

?? ? 知道why了,现在就开始how吧

?

?? ? 我这里就一台机器,所以操作很简单

?? ? 在linux命令行里输入:ssh-keygen??-t??rsa,然后一路回车。

?? ??root@hadoopName-desktop:~$ ssh-keygen -t rsa

?? ? Generating?

解压出来后的文件结构是这样的,进入conf目录里面,

修改hadoop-env.sh文件,加入如下一行

?

?

?

?现在要改成如下

?

?

?

?

?

修改hdfs-site.xml

?

默认的hdfs-site.xml是如下这样的

?

?

?

要改成如下这样的

?

?

?

?

?

?

修改mapred-site.xml

?

默认的mapred-site.xml是如下这样的

?

?

?

要改成如下这样的

?

?

?修改完这三个文件了,就一些注意的要点说一下

1、其实core-site.xml 对应有一个core-default.xml, hdfs-site.xml对应有一个hdfs-default.xml,

mapred-site.xml对应有一个mapred-default.xml。这三个defalult文件里面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置,

?

2、hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字空间的存放地方,一个是datanode数据块的存放地方,还有一些其他的文件存放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字空间存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地方就是 ${hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。我设置的是 /usr/local/hadoop/hadooptmp,当然这个目录必须是存在的。

?

3、fs.default.name,这个是设置namenode位于哪个机器上,端口号是什么hdfs://192.168.133.128:9000,格式一定要这样写,网上很多资料说ip地址写localhost也行,笔者建议最好写ip,因为后期讲到windows下 eclipse连接hadoop 的时候,如果写localhost,就会连接不到。

?

?

4、mapred.job.tracker,这个是设置jobtracker位于哪个机器上,端口号是什么,192.168.133.128:9001,格式和上一个不一样,这个也必须这样写,同样localhost和ip的分别和上述一样

?

5、dfs.replication,这个是设置数据块的复制次数,默认是3,因为笔者这里就一台机器,所以只能存在一份,就改成了1

?

然后修改 masters和slaves文件

master文件里就把集群中的namenode所在的机器ip,这里就写 192.168.133.128, 不要写localhost,写了localhost,windows 下eclipse 连接不到hadoop

?

slaves文件里就把集群中所有的nodedata所在的机器ip,这里就写192.168.133.128,因为这里是单机,同样最好别写localhost

?

?

五、把修改好的hadoop整个文件夹传到linux下

??上述文件修改好之后,把haoop整个目录copy草linux下,记得建个目录放这个,我建的目录是 /usr/local/hadoop,把hadoop的整个目录copy到这个下面,然后就是这样的形式

?

?

[root@hadoopName hadoop]# cd /usr/local/hadoop

[root@hadoopName hadoop]# ls

hadoop-0.20.2 ?hadooptmp

/usr/local/hadoop 下有两个文件,一个就是hadoop的根目录hadoop-0.20.2,另一个,就是上述的hadoop.tmp.dir的目录

?

?

六、把hadoop的bin加入到环境变量

把hadoop的执行命令加到环境变量里,这样就能直接在命令行里执行hadoop的命令了

操作跟把java的bin加入环境变量一样

?

?

1、执行?cd /etc,?进入/etc 目录下。

?

?2、执行?vi profile, 修改profile文件

?? ? ?在里面加入以下四行

?


?2、在 windows -> preferences里面会多一个hadoop map/reduce的选项,选中这个选项,然后右边,把下载的hadoop根目录选中RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试
?
?如果能看到以上两点说明安装成功了二、插件安装后,配置一下连接参数

插件装完了,就可以建一个连接了,就相当于eclipse里配置一个 weblogic的连接?

第一步 如图所示,打开Map/Reduce Locations 视图,在右上角有个大象的标志点击

RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

?

第二步,在点击大象后弹出的对话框进行进行参数的添加,如下图
RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试


location name: 这个随便填写,笔者填写的是:hadoop.

?

map/reduce master 这个框里

host:就是jobtracker 所在的集群机器,笔者这里是单机伪分布式,jobtracker就在这个机器上,所以填上这个机器的ip

port:就是jobtracker 的port,这里写的是9001?

这两个参数就是 mapred-site.xml里面mapred.job.tracker里面的ip和port

?

DFS master这个框里

host:就是namenode所在的集群机器,笔者这里是单机伪分布式,namenode就在这个机器上,所以填上这个机器的ip。

port:就是namenode的port,这里写9000

?

这两个参数就是 core-site.xml里fs.default.name里面的ip和port(use M/R master host,这个复选框如果选上,就默认和map/reduce master 这个框里的 host一样,如果不选择,就可以自己定义输入,这里jobtracker 和namenode在一个机器上,所以是一样的,就勾选上)

?

?

username:这个是连接hadoop的用户名,因为笔者是在linux中用root用户安装的hadoop,而且没建立其他的用户,所以就用root。

?

下面的不用填写。

?

然后点击 finish按钮,此时,这个视图中就有多了一条记录,

?

第三步,重启eclipse,然后重启完毕之后,重新编辑刚才建立的那个连接记录,如图,第二步里面我们是填写的General,tab页,现在我们编辑advance parameters tab页。



RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

?

读者可能问,为什么不在第二步里直接把这个tab页 也编辑了,这是因为,新建连接的时候,这个advance paramters ?tab页面的一些属性显示不出来,显示不出来也就没法设置,(这个有点 不好哇~~,应该显示出来,免得又重启一次,小小鄙视一下~ 哇咔咔~),必须重启一下eclipse 再进来编辑才能看到。

?

这里大部门属性都已经自动填写上了,读者可以看到,这里其实就是把core-defaulte.xml,hdfs-defaulte.xml,mapred-defaulte.xml里面的一些配置属性展示在这,因为我们安装hadoop的时候,还在site系列配置文件里有改动,所以这里也要弄成一样的设置。主要关注的有以下属性

?

fs.defualt.name:这个在General tab页已经设置了。

mapred.job.tracker:这个在General tab页也设置了。

?

dfs.replication:这个这里默认是3,因为我们再hdfs-site.xml里面设置成了1,所以这里也要设置成1

hadoop.tmp.dir:这个默认是/tmp/hadoop-{user.name},因为我们在ore-defaulte.xml 里hadoop.tmp.dir设置的是/usr/local/hadoop/hadooptmp,所以这里我们也改成/usr/local/hadoop/hadooptmp,其他基于这个目录属性也会自动改

?

hadoop.job.ugi:刚才说看不见的那个,就是这个属性,这里要填写:root,Tardis,逗号前面的是连接的hadoop的用户,逗号后面就写死Tardis。

?

然后点击finish,然后就连接上了,连接上的标志如图:
RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

DFS Locations下面会有一只大象,下面会有一个文件夹(2) 这个就是 hdfs的根目录,这里就是展示的分布式文件系统的目录结构。

?

三、写一个wordcount的程序,在eclipse里执行

在这个eclipse里建一个map/reduce 工程,如图?
RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

?

叫exam,然后在这个工程下面建个java类如下

?

第一个,MyMap.java?

?

??input 就是文件存放路径,outchen就是mapReduce 之后处理的数据 输出文件夹

?

?然后run on hadoop 如图
RedHat linux停安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试

?

控制台打印如下信息:?

或者执行代码的时候,控制台如下信息
?出现以上错误的时候,原因可能有:a、hadoop没起来没有启动导致的,b、就是连接不对,看看core-site.xml 和mapred-site.xml里面的 ip 是否写成 localhost了,写成localhost是连接不到的,必须写成ip。读者也可以看到如果连接成功 那个文件夹的(2)而不是 文件夹(1)2、如果出现一下错误
?就说明刚才那个C:/Windows/System32/drivers/etc ?目录,打开 hosts文件 加入:192.168.133.128 ?hadoopName,在hosts文件里写入这个就行了,要重启机器才行 

热点排行