细细品味Hadoop——Hadoop安装及配置精华集锦csAxp虾皮工作室年2月29日CentOS下Hadoop-0.20.2集群配置文档张鹏一、集群网络环境介绍集群包含三个节点:1个namenode,2个datanode,节点之间局域网连接,可以相互ping通。节点IP地址分布如下:Namenode:zhangpeng@192.168.90.91Datanode1:zhangruixue@192.168.90.94Datanode2:guanxiansun@192.168.90.205三台节点上均是CentOS系统,并且有一个相同的用户hadoop(具有管理员权限),在/home/hadoop/目录下均有一个hadoopinstall目录,用于存放hadoop-0.20.2安装文件,目录结构是/home/hadoop/hadoopinstall/hadoop-0.20.2。在/etc/hosts上添加主机名和相应的IP地址:192.168.90.129zhangpeng192.168.90.94zhangruixue192.168.90.205guanxiansun二、SSH无密码验证配置Hadoop需要使用SSH协议,namenode使用SSH无密码登录并启动datanode进程,同样原理,datanode上也能使用SSH无密码登录到namenode(这样也能在datanode上进行启动或关闭hadoop)。1、安装和启动SSH协议所有机器上安装SSH协议并启动服务,在所有机器上执行以下命令:$sudoyuminstallssh安装SSH协议$sudoyuminstallrsync(rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件)$sshsudo/etc/init.d/sshrestart启动服务命令执行完毕,各台机器之间可以通过密码验证相互登陆。2、配置Namenode无密码登录所有Datanode(1)原理Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上。(2)Namenod机器上生成密码对在Namenode节点上执行以下命令:hadoop@zhangpeng:~$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.这将在/home/hadoop/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。在namenode节点上做如下配置hadoop@zhangpeng:~/.ssh$cpid_rsa.pubauthorized_keys(namenode的公钥)使用SSH协议将namenode的公钥信息authorized_keys复制到所有DataNode的.ssh目录下(.ssh下最初没有authorized_keys,如果有,则需要追加)。hadoop@zhangpeng:~$scpauthorized_keyshadoop@zhangruixue:/home/hadoop/.sshhadoop@zhangpeng:~$scpauthorized_keyshadoop@guanxiansun:/home/hadoop/.ssh这样配置过后,namenode可以无密码登录所有datanode,可以通过命令“ssh节点ip地址”来验证。3、配置Datanode无密码登录Namenode和namenode无密码登录所有Datanode原理一样,把Datanode的公钥复制到Namenode的.ssh目录下。hadoop@zhangruixue:~$scpauthorized_keyshadoop@zhangpeng:/home/hadoop/.sshhadoop@guanxiansun:~$scpauthorized_keyshadoop@zhangpeng:/home/hadoop/.ssh这样也能在Datanode上关闭和启动Hadoop服务。注意:整个过程中只涉及到创建密钥,复制公钥,添加公钥内容,没有更改配置文件,实际上须在Namenode上编辑配置文件/etc/ssh/sshd_config开启其公钥验证:RSAAuthenticationyesPubkeyAuthenticationyes至此,namenode能无密码验证登陆每个datanode。每个datanode也能无密码验证SSH登陆到namenode。三、JDK安装和Java环境变量配置1、CentOS下安装JDK1.6所有机器上安装JDK1.6,在所有机器上执行以下命令:$sudoyuminstalljdkJDK默认安装在/usr/java/jdk1.6.0_14目录里。2、Java环境变量配置在所有机器上执行如下命令:vim/etc/profile。并加入以下内容,配置环境变量#setjavaenvironmentexportJAVA_HOME=/usr/java/jdk1.6.0_14/exportJAVA_HOME=/usr/java/jdk1.6.0_14/jreexportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH保存并退出,执行以下命令使配置生效:[hadoop@zhangpeng~]$source/etc/profile[hadoop@zhangruixue~]$source/etc/profile[hadoop@guanxiansun~]$source/etc/profile配置完毕,在命令行中使用命令”java-version”可以判断是否成功。四、Hadoop集群配置1、下载hadoop-0.20.2.tar.gz在namenode上下载hadoop-0.20.2.tar.gz,将其解压到/home/hadoop/hadoopinstall目录下,使用如下命令:[hadoop@zhangpenghadoopinstall]$tar-xvzfhadoop-0.20.2.tar然后在hadoopinstall下创建tmp文件夹并把Hadoop的安装路径添加到/etc/profile中修改/etc/profile文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效(source/etc/profile):#sethadooppathexportHADOOP_HOME=/home/hadoop/hadoopinstall/hadoop-0.20.1exportPATH=$HADOOP_HOME/bin:$PATH2、编辑Hadoop的配置文件(1)配置hadoop-env.sh[hadoop@zhangpengconf]$vimhadoop-env.sh末尾加入以下语句#setjavaenvironmentexportJAVA_HOME=/usr/java/jdk1.6.0_14/hadoop配置文件在conf目录下,之前的版本Hadoop的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。(2)配置core-site.xml文件configurationpropertynamehadoop.tmp.dir/namevalue/home/hadoop/hadoopinstall/tmp/value(注意,请先在hadoopinstall目录下建立tmp文件夹)descriptionAbaseforothertemporarydirectories./description/property!--filesystemproperties--propertynamefs.default.name/namevaluehdfs://192.168.90.91:9000/value/property/configuration(3)配置hdfs-site.xml文件configurationpropertynamedfs.replication/namevalue1/value(replication是数据副本数量,默认为3,datanode少于3台就会报错)/propertyconfiguration(4)配置mapred-site.xml文件configurationpropertynamemapred.job.tracker/namevalue(5)配置masters文件,加入namenode的ip地址192.168.90.91(6)配置slaves文件,加入所有datanode的ip地址192.168.90.94192.168.90.205将namenode上配置好的hadoop所在文件夹hadoopinstall复制到datanode的/home/hadoop/目录下(实际上masters,slavers文件时不必要的,复制了也没问题)。在datanode上修改/etc/profile文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效(source/etc/profile):#sethadooppathexportHADOOP_HOME=/home/zkl/hadoopinstall/hadoop-0.20.1exportPATH=$HADOOP_HOME/bin:$PATH五、Hadoop集群启动在Namenode格式化hadoop:[hadoop@zhangpeng~]$hadoopnamenode-format启动hadoop:[hadoop@zhangpeng~]$start-all.sh可以通过以下启动日志看出,首先启动namenode接着启动datanode1,datanode2,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,最后启动tasktracker2。启动hadoop成功后,在namenode中的tmp文件夹中生成了dfs文件夹,在datanode中的tmp文件夹中均生成了dfs文件夹和mapre