Hadoop完全分布模式配置详解

来源:互联网 发布:淘宝优化宝贝的软件 编辑:程序博客网 时间:2024/05/15 21:17
Hadoop集群的安装有三种支持模式:单机模式:默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。伪分布式模式:Hadoop可以在单节点上以所谓的伪分布式模式运行,此时每一个Hadoop守护进程都作为一个独立的Java进程运行。完全分布式模式:在集群中所有机器节点上安装必须软件。本文实现完全分布式模式的安装,如下:硬件环境:三台电脑hadoop-1:172.20.213.200(master) Red Hat Enterprise Linux Server release 5.3 (Tikanga) x86_64hadoop-2:172.20.213.199(slave)  Red Hat Enterprise Linux Server release 5.3 (Tikanga) x86_64hadoop-3:172.20.213.201(slave)  Red Hat Enterprise Linux Server release 5.4 (Tikanga) i386对 于Hadoop来说,在HDFS看来,节点分为Namenode 和Datanode,其中Namenode只有一个,Datanode可以是很多;在 MapReduce看来,节点又分为Jobtracker和 Tasktracker,其中Jobtracker只有一个,Tasktracker可以是很多。所以通常有两台master,一台作为NameNode,一台作为JobTracker,剩下的都为slaves,同时当做DataNode和 TaskTracker使用.当然也可以将NameNode和JobTracker都放在一台master上面.这里让hadoop-1做为master和Jobtracker,hadoop-1,hadoop-2和hadoop-3作为DataNode和TaskTracker1.配置各主机IP,主机名,如上。2. 修改hosts文件,要确保每台机器的主机名和IP地址之间能正确解析,如果该台机器作Namenode用,则需要在hosts文件中加上集群中所有机器 的IP地址及其对应的主机名,如果该台机器作Datanode用,则只需要在hosts文件中加上本机IP地址和Namenode机器的IP地址。[hpfl@hadoop-1 ~]$ cat /etc/hosts# Do not remove the following line, or various programs# that require network functionality will fail.127.0.0.1       localhost.localdomain localhost::1             localhost6.localdomain6 localhost6172.20.213.200 hadoop-1 hadoop-1172.20.213.199 hadoop-2 hadoop-2172.20.213.201 hadoop-3 hadoop-33.Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。分别在三台机器上新增用户hpfl,密码123456,主目录是/home/hpflusradd hpfl ; passwd hpfl4.SSH    集群的启动是从NameNode开始的,于是DataNode的运行需要NameNode的远程调用,Hadoop使用ssh命令远程运行DataNode节点。SSH需要配置为无密码公钥认证的方式。[hpfl@hadoop-1 ~]$ssh-keygen  -t  rsa这 个命令将为hadoop-1上的用户hpfl生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时 候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hpfl/.ssh目录下;然后将 id_rsa.pub的内容复制到每个机器(也包括本机)的/home/hpfl/.ssh /authorized_keys文件中,如果机器上已经有authorized_keys这个文件,就在文件末尾加上id_rsa.pub中的内容,如 果没有authorized_keys这个文件,直接复制过去就行.[hpfl@hadoop-1 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys [hpfl@hadoop-1 .ssh]$ scp authorized_keys hadoop-2:/home/hpfl/.ssh/   [hpfl@hadoop-1 .ssh]$ scp authorized_keys hadoop-3:/home/hpfl/.ssh/  输入 yes 来继续。这会把该服务器添加到已知主机的列表中The authenticity of host ‘hadoop-2(172.22.213.199)’ can’t be established.RSA key fingerprint is 03:e0:30:cb:6e:13:a8:70:c9:7e:cf:ff:33:2a:67:30.Are you sure you want to continue connecting (yes/no)?这里会提示输入密码,输入hadoop账号密码就可以了。改变各主机上的 authorized_keys 文件的许可权限:[hpfl@hadoop-1 .ssh]$chmod 644 authorized_keys检查下是否配置成功,从hadoop-1机器上ssh到hadoop-2和hadoop-3,如果不需要输入密码则配置成功,如果还需要请检查上面的配置是否正确。1. [hpfl@hadoop-1 ~]$ ssh hadoop-1   2. [hpfl@hadoop-1 ~]$ ssh hadoop-23. [hpfl@hadoop-1 ~]$ ssh hadoop-3 注意:整个过程中只涉及到创建密钥,复制公钥,添加公钥内容,没有更改配置文件,实际上配置文件/etc/ssh/sshd_config中开启了公钥验证{RSAAuthentication yesPubkeyAuthentication yes}至此,namenode能无密码验证登陆每个datanode。5、JDK下载JDK,由于两台64位,下载jdk-6u21-linux-x64.bin,一台32位,下载jdk-6u21-linux-i586.bin安装jdk1.6.0_21到/usr/java/下然后:编辑三台机器的/etc/profile,增加如下内容 export JAVA_HOME=/usr/java/jdk1.6.0_21export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin另外,由于redhat 自带 java 解释器,需要建立软链接到/usr/bin/下替换gij的链接命令为:ln –s –f  /usr/java/jdk1.6.0_21/bin/java /usr/bin/javaln –s –f  /usr/java/jdk1.6.0_21/bin/javac /usr/bin/javac6、hadoop配置将下载好的hadoop-0.21.0.tar.gz 放到 /home/hpfl/hadoopInstall/目录下,(1)  tar zxvf hadoop-0.21.0.tar.gz #解压文件 为了方便升级,建立软链接并且将配置文件与安装目录分离[hpfl@hadoop-1 ~]$ln  -s  hadoop-0.21.0  hadoop   [hpfl@hadoop-1 ~]$mkdir /home/hpfl/hadoop-confighadoop/conf /下hadoop-env.sh ,core-site.xml,hdfs-site.xml,mapred-site.xml masters,slaves六个文件copy到/home/hpfl/hadoopInstall/hadoop-config中指定环境变量 $HADOOP_CONF_DIR指向该目录。[hpfl@hadoop-1 ~]$ echo 'export HADOOP_CONF_DIR=$HOME/HadoopInstall/hadoop-config/' >> .bashrc  在/etc/profile中设置PATH变量export HADOOP_HOME=/home/hpfl/hadoopInstall/hadoop export PATH=$PATH:$HADOOP_HOME/bin(2) 配置(a)编辑conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径。(b)配置core-site.xml<configuration><property><name>hadoop.tmp.dir</name><value>/home/hpfl/tmp/</value>(注意,请先在hpfl目录下建立tmp文件夹)</property><!-- file system properties --><property><name>fs.default.name</name><value>hdfs://hadoop-1:9000</value></property></configuration> (c)配置hdfs-site.xml<configuration><property><name>dfs.replication</name><value>3</value>(replication 是数据副本数量,默认为3,datanode 少于3台就会报错)</property></configuration><property>  <name>dfs.name.dir</name>  <value>/home/hpfl/name/</value>  #hadoop的name目录路径 </property> <property>   <name>dfs.data.dir</name>  <value>/home/hadoop/data/</value>  #hadoop的data目录路径 </property>dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。(d)配置mapred-site.xml<configuration><property><name>mapred.job.tracker</name><value>hadoop-1:9001</value></property></configuration>配置masters和slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。(e)配置masters文件,加入namenode的ip地址(其实是配置第二名称节点的位置)hadoop-1(f)配置slaves文件, 加入所有datanode的ip地址hadoop-1hadoop-2hadoop-3(3)将配置好的hadoop打包 cd /home/hadoop tar -czf hadoop-0.21.0.tar.gz  ~/hadoopInstall/ scp -r hadoop-0.21.0.tar.gz hadoop-2:~/scp -r hadoop-0.21.0.tar.gz hadoop-3:~/复制到各从机后解开,确保目录结构与master机一致7.测试格式化HDFShadoop namenode -format 格式化namenode 启动停止HDFSstart-all.sh(或start-dfs.sh start-mapred.sh)stop-all.sh(或stop-dfs.sh stop-mapred.sh)简单操作HDFShadoop fs –mkdir testdirhadoop fs –put *.* *.*hadoop fs -ls故障诊断(1) 执行 $ bin/start-all.sh 启动 Hadoop 进程后,会启动5个 java 进程, 同时会在 /tmp 目录下创建五个 pid 文件记录这些进程 ID 号。通过这五个文件,可以得知 namenode, datanode, secondary namenode, jobtracker, tasktracker 分别对应于哪一个 Java 进程。当感觉Hadoop 工作不正常时,可以首先查看这5个 java 进程是否在正常运行。(2) 使用 web 接口。访问 http://localhost:50030 可以查看 JobTracker 的运行状态。访问 http://localhost:50060 可以查看 TaskTracker 的运行状态。访问 http://localhost:50070 可以查看 NameNode 以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及 log 等。注意要更新客户端的hosts文件,参考hadoop-1的hosts文件(3) 查看 ${HADOOP_HOME}/logs 目录下的 log 文件,namenode, datanode, secondary namenode, jobtracker, tasktracker 各有一个对应的 log 文件,每一次运行的计算任务也有对应用 log 文件。分析这些 log 文件有助于找到故障原因。

原创粉丝点击