您的位置:首页 > 运维架构

Hadoop完全分布模式配置详解

2012-04-24 08:52 555 查看
Hadoop集群的安装有三种支持模式:
单机模式:默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。
伪分布式模式:Hadoop可以在单节点上以所谓的伪分布式模式运行,此时每一个Hadoop守护进程都作为一个独立的Java进程运行。
完全分布式模式:在集群中所有机器节点上安装必须软件。
本文实现完全分布式模式的安装,如下:
硬件环境:
三台电脑
hadoop-1:172.20.213.200(master) Red Hat Enterprise Linux Server release 5.3 (Tikanga) x86_64
hadoop-2:172.20.213.199(slave)  Red Hat Enterprise Linux Server release 5.3 (Tikanga) x86_64
hadoop-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和TaskTracker
1.配置各主机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 localhost6
172.20.213.200 hadoop-1 hadoop-1
172.20.213.199 hadoop-2 hadoop-2
172.20.213.201 hadoop-3 hadoop-3

3.Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。
分别在三台机器上新增用户hpfl,密码123456,主目录是/home/hpfl
usradd hpfl ; passwd hpfl
4.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-2
3. [hpfl@hadoop-1 ~]$ ssh hadoop-3
注意:整个过程中只涉及到创建密钥,复制公钥,添加公钥内容,没有更改配置文件,实际上配置文件/etc/ssh/sshd_config中开启了公钥验证
{
RSAAuthentication yes
PubkeyAuthentication 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_21
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export 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/java
ln –s –f  /usr/java/jdk1.6.0_21/bin/javac /usr/bin/javac
6、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-config
hadoop/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-1
hadoop-2
hadoop-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.测试
格式化HDFS
hadoop namenode -format 格式化namenode
启动停止HDFS
start-all.sh(或start-dfs.sh start-mapred.sh)
stop-all.sh(或stop-dfs.sh stop-mapred.sh)
简单操作HDFS
hadoop fs –mkdir testdir
hadoop 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 文件有助于找到故障原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: