Hadoop安装环境及部署.doc_第1页
Hadoop安装环境及部署.doc_第2页
Hadoop安装环境及部署.doc_第3页
Hadoop安装环境及部署.doc_第4页
Hadoop安装环境及部署.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop安装环境及部署环境主机环境fedora 10+vmware-server 2.0.1虚拟环境为centos 5.3,先架设一台centos 5.3的hadoop的环境在最后把系统复制2份。对于Hadoop来说,在HDFS看来,节点分为Namenode和Datanode,其中Namenode只有一 个,Datanode可以是很多;在MapReduce看来,节点又分为Jobtracker和Tasktracker,其中Jobtracker只有一 个,Tasktracker可以是很多。我是将namenode和jobtracker部署在hadoop0上,hadoop1,hadoop2作为datanode和tasktracker。当然你也可以将namenode,datanode, jobtracker,tasktracker全部部署在一台机器上目录结构由于Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。*-*新建一个用户hadoop以后架设hadoop全在hadoop用户主目录下#useradd hadoop#passwd hadoop安装基本环境*-*我们需要确保每台机器的主机名和IP地址之间能正确解析,检测方法为ping主机名ping通了就说明配置正常所以我们要修改/etc/hosts文件#vi /etc/hostslocalhost.localdomain localhost30 hadoop0.hadoop hadoop031hadoop1.hadoop hadoop132hadoop2.hadoop hadoop2*-*我们还需要检查机器是否安装了ssh和rsync#rpm -qa | grep sshopenssh-4.3p2-29.el5openssh-clients-4.3p2-29.el5openssh-server-4.3p2-29.el5#rpm -qa | grep rsyncrsync-2.6.8-3.1没有安装的话运行#yum install openssh* rsync确保openssh是开机启动的检查是否开启# chkconfig -list | grep sshdsshd 0:off1:off2:on3:on4:on5:on6:off开启ssh#chkconfig sshd on*-*安装sun jdk-1.6.0_13安装jdk#chmod u+x jdk-6u13-linux-i586-rpm.bin ; ./jdk-6u13-linux-i586-rpm.bin配置java环境$vi /home/hadoop/.bashrc 在 .bashrc文件中加入:export JAVA_HOME=/usr/java/defaultexport CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin 注:以上操作要在三太机器上都要做的*-*SSH设置(这个配置可能在我的环境和真实的环境下有点不同我会分来讲下,先真实的三台机器的环境,我现在的环境比较容易配置)在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。现在hadoop0是主节点,它需要主动发起SSH连接到hadoop1和hadoop2,对于SSH服务来说,hadoop0就是 SSH客户端,而hadoop1、hadoop2则是SSH服务端,因此在hadoop1,hadoop2上需要确定sshd服务已经启动。简单的说,在 hadoop0上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到hadoop1,hadoop2上,这样,比如当hadoop0向hadoop1发起 ssh连接的时候,hadoop1上就会生成一个随机数并用hadoop0的公钥对这个随机数进行加密,并发送给hadoop0;hadoop0收到这个加密的数 以后用私钥进行解密,并将解密后的数发送回hadoop1,hadoop1确认解密的数无误后就允许hadoop0进行连接了。这就完成了一次公钥认证过程。对于本文中的三台机器,首先在hadoop0上生成密钥对:$ssh-keygen-trsa这 个命令将为hadoop0上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直 接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下。然后将 id_rsa.pub的内容复制到每个机器(也包括本机)的/home/hadoop/.ssh/authorized_keys文件中,如果机器上已经有 authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接cp 或者scp就好了,下面的 操作假设各个机器上都没有authorized_keys文件。$cp /.ssh/id_rsa.pub /.ssh/authorized_keys在hadoop1和hadoop2机器haddoop用户的主目录下新建.ssh目录回到hadoop0上执行$scp -r /home/hadoop/.ssh/authorized_keys hadoop1:/home/hadoop/.ssh/$scp -r /home/hadoop/.ssh/authorized_keys hadoop2:/home/hadoop/.ssh/此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即hadoop1机器上hadoop帐户的密码,当然,你也可以用其他方法将authorized_keys文件拷贝到其他机器上这一步非常关键,必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。在hadoop1和hadoop2机器上执行$chmod 644 authorized_keys接着,在三台机器上都需要对ssh服务进行配置(其实是可以不用配置的,完成了上面的那些操作了以后SSH就已经可以工作了),在三台机器上修改文件/etc/ssh/sshd_config#去除密码认证PasswordAuthenticationnoAuthorizedKeyFile .ssh/authorized_keys至此各个机器上的SSH配置已经完成,可以测试一下了,比如hadoop0向hadoop1发起ssh连接$ ssh hadoop1The authenticity of host hadoop1 (31) cant be established.RSA key fingerprint is 9e:fa:3d:ae:20:83:fe:61:d3:d9:06:59:51:7c:8d:ce.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added hadoop1,31 (RSA) to the list of known hosts.Last login: Tue Apr 21 15:36:49 2009 from 02OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。然后你会发现不需要输入密码就可以建立ssh连接了,这样就配置成功了在我的虚拟机环境中配置的话就只要在本机上生成密钥,然后修改文件/etc/ssh/sshd_config#去除密码认证,等系统分发后用hadoop0机器登录其他两台机器就配置成功了配置安装hadoop我的机器上是这样的:都有一个hadoop的帐户,主目是/home/hadoopHadoop部署目录结构如下:/home/hadoop/hadoopinstall,所有的hadoop版本放在这个目录中。$mkdir /home/hadoop/hadoopinstall将hadoop-0.18.3压缩包解压至hadoopinstall中,为了方便以后升级,建议建立一个链接指向要使用的hadoop版本,不妨设为hadoop $tar xvf hadoop-0.18.3.tar.gz -C /home/hadoop/hadoopinstall/$ln-shadoop-0.18.3 hadoop这样一来,所有的配置文件都在/hadoop/conf/目录中,所有执行程序都在/hadoop/bin目录中。 但是由于上述目录中hadoop的配置文件和hadoop的安装目录是放在一起的,这样一旦日后升级hadoop版本的时候所有的配置文件都会被覆盖, 因此建议将配置文件与安装目录分离,一种比较好的方法就是建立一个存放配置文件的目录,/home/hadoop/hadoopinstall/conf/,然后将/hadoop/conf/目录中的hadoop_site.xml,slaves,hadoop_env.sh,masters 四个文件拷贝到conf/目录中,并指定环境变量$HADOOP_CONF_DIR指向该目 录。环境变量在/home/hadoop/.bashrc或/etc/profile中设定。$mkdir /home/hadoop/hadoopinstall/conf/$cp /home/hadoop/hadoopinstall/hadoop/conf/ hadoop_site.xml,slaves,hadoop_env.sh,masters /home/hadoop/hadoopinstall/conf/$echo export HADOOP_CONF_DIR=/home/hadoop/hadoopinstall/conf /.bashrc在这我们还加入HADOOP_HOME和hadoop的bin目录加入到环境变量里去echo export HADOOP_HOME=/home/hadoop/hadoopinstall/hadoop /.bashrcecho export PATH=$PATH:$HADOOP_HOME/bin /.bashrc综上所述,为了方便以后升级版本,我们需要做到配置文件与安装目录分离,并通过设定一个指向我们要使用的版本的hadoop的链接,这样可以减少我们对配置文件的维护。在下面的部分,你就会体会到这样分离以及链接的好处了。Hadoop环境变量 在/home/hadoop/hadoopinstall/conf目录下的hadoop_env.sh中设置Hadoop需要的环境变量, 其中JAVA_HOME是必须设定的变量。HADOOP_HOME变量可以设定也可以不设定,如果不设定,HADOOP_HOME默认的是bin目录的父 目录,即本文中的/home/hadoop/hadoopinstall/hadoop。我的是这样设置的$vi hadoop_env.shexport JAVA_HOME=/usr/java/defaultHadoop配置文件*-*在conf/目录中的hadoop-default.xml中包含了Hadoop的所有配置项,但是不允许直接修改!可以在conf/目 录下的hadoop-site.xml里面定义我们需要的项,其值会覆盖hadoop-default.xml中的默认值。可以根据自己的实际需要来进行 定制。以下是我的配置档:备注:Hadoop的基础配置文件是hadoop-default.xml,看Hadoop的代码可以知道,默认建立一个Job的时候会建立Job的Config,Config首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置(这个文件初始的时候配置为空),hadoop-site.xml中主要配置你需要覆盖的hadoop-default.xml的系统级配置,以及你需要在你的MapReduce过程中使用的自定义配置。 /你的namenode的配置,机器名加端口hdfs:/hadoop0:9000/ The name of the default file system. Either the literal string local or a host:port for DFS.mapred.job.tracker /你的JobTracker的配置,机器名加端口hdfs:/hadoop0:9001/ The host and port that the MapReduce job tracker runs at. If local, then jobs are run in-process as a single map and reduce task.hadoop.tmp.dir/Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。/home/hadoop/hadoopinstall/tmpA base for other temporary .dir/home/hadoop/hadoopinstall/filesystem/name Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. dfs.data.dir /home/hadoop/hadoopinstall/filesystem/data Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.dfs.replication /数据需要备份的数量,默认是三1 Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.*-*Masters中配置Masters的IP或者机器名,如果是机器名那么需要在/etc/hosts中有所设置。Slaves中配置的是Slaves的IP或者机器名,同样如果是机器名需要在/etc/hosts中有所设置。范例如下,我这里配置的都是主机名:# vi /home/hadoopinstall/conf/mastershadoop0打开slaves文件,该文件用来指定所有的从节点,一行指定一个主机名。即本文中的hadoop1, hadoop2,因此slaves文件因该改为$vi /home/hadoop/hadoopinstall/conf/slaveshadoop1hadoop2*-*部署Hadoop(三台真实机器操作)前面讲的这么多Hadoop的环境变量和配置文件都是在hadoop0这台机器上的,现在需要将hadoop部署到其他的机器上,保证目录结构一致$scp-r/home/hadoop/hadoopinstallhadoop1:/home/hadoop/$scp-r/home/hadoop/hadoopinstallhadoop2:/home/hadoop/注:(虚拟机操作)复制hadoop0的虚拟磁盘及文件的目录为hadoop1和hadoop2把所有在hadoop1和hadoop2中的所有的hadoop0该为hadoop1和hadoop2这是把他们加入vmware-server中启动hadoop1和hadoop2并更改一下ip地址,至此,可以说,Hadoop已经在各个机器上部署完毕了下面就让我们开始启动Hadoop吧Hadoop验证是否成功?1)在Master(IP为:30)上执行hadoop namenode format,这是第一步需要做的格式化,通过这命令可以删除了Master上的hadoop.tmp.dir目录里面的内容,否则是不需要再次执行的。2)然后执行Master上的start-all.sh,这个命令可以直接执行,当然也可以分开单独启动hdfs和mapreduce,分别是bin目录下的start-dfs.sh和start-mapred.sh。用#ps -ef命令来检验是否成功:如果master中有3个java进程,slave

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论