一、相关准备

   下载hadoop-0.20.2.tar.gz      http://hadoop.apache.org/core/releases.html
   下载 jdk1.6                           http://java.sun.com/javase/downloads/index.jsp
   操作系统为 centos5.3
   并有分区 /data1 /data2

   我这次hadoop环境搭建中所使用的硬件为3台服务器,其中一台作为名称节点(namenode),其余两台作为数据节点(datanode)。

引用
namenode: 172.16.27.21             主机名为 master
datanode:  172.16.27.20             主机名为 slave1
                    172.16.27.19            主机名为 slave2



       对于Hadoop来说,在HDFS看来,节点分为Namenode 和Datanode,   其中Namenode只有一个,Datanode可以是很多;在MapReduce看来,节点又分为Jobtracker和 Tasktracker,其中Jobtracker只有一个,Tasktracker可以是很多。所以通常有两台master,一台作NameNode,一台作为JobTracker,剩下的都为slaves,同时当做DataNode和 TaskTracker使用。当然也可以将NameNode和JobTracker都放在一台master上面。这里让master做为master和Jobtracker,slave1、slave2作为DataNode和TaskTracker。

   二、配置环境

1.以root登录每台机器编辑/etc/hosts文件,添加如下内容:

引用
172.16.27.21  master
172.16.27.20  slave1
172.16.27.19  slave2


   2.在每台机器上以root登录,分别建立hadoop用户,密码都为hadoop
引用
useradd hadoop
password hadoop


  3.配置SSH环境,实现无密码远程访问

    在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。以hadoop登录master,执行 ssh-keygen -t rsa   然后一路回车,完成后生成 .ssh/id_rsa.pub 把这个文件复制为authorized_keys 看权限是否为644 然后执行127.0.0.1 如果不需要密码登录就达到要求了,然后以hadoop 用户登录数据节点服务器 172.16.27.20 172.16.27.19 执行 ssh-keygen -t rsa 创建.ssh 目录 。然后把名称服务器172.16.27.21 上的authorized_keys 拷贝到数据节点的 /home/hadoop/.ssh/目录下。从名称节点用 ssh hadoop@slave1 ssh hadoop@slave2 登录到数据节点 如果不需要密码能登录成功 则ssh配置正确


  4.在三台机器上安装jdk
  
引用
chmod 755 jdk-6u24-linux-i586-rpm.bin
./jdk-6u24-linux-i586-rpm.bin

  
   编辑三台机器的/etc/profile文件,添加如下内容

引用
export JAVA_HOME=/usr/java/jdk1.6.0_24
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

   然后执行 source /etc/profile 使其立即生效

引用
三、安装配置hadoop


  三台机器都需要如下操作或者在其中一台服务器上配置好,然后再拷贝到其他服务器上
  
  1. 将下载好的 hadoop-0.20.2.tar.gz 解压到 /usr/local 目录
引用
tar xvzf hadoop-0.20.2.tar.gz -C /usr/local
mv /usr/local/hadoop-0.20.2 /usr/local/hadoop


  2. 修改文件属主,以便hadoop能正确使用权限
引用
chown -R hadoop:hadoop /data1 /data2 /usr/local/hadoop
chmod -R 777 /data1 /data2


   3.修改/etc/profile 文件 设置HADOOP_HOME

引用
export HADOOP_HOME=/usr/local/hadoop

    source /etc/profile 使其立即生效

  4.修改/usr/local/hadoop/conf/masters 文件为

引用
master


   5. 修改/usr/local/hadoop/conf/slaves文件为

引用
slave1
slave2


  6.修改文件/usr/local/hadoop/conf/hadoop-env.sh

引用
export JAVA_HOME=/usr/java/jdk1.6.0_24
export HADOOP_LOG_DIR=/data2/logs

分区/data2 用于存放hadoop日志
  
  7.修改配置文件/usr/local/hadoop/conf/mapred-site.xml 使其内容为

引用
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
   <name>mapred.job.tracker</name>
   <value>master:54311</value>
</property>

<property>
   <name>mapred.child.java.opts</name>
   <value>-Xmx64m</value>
</property>

</configuration>

  
8.修改配置文件/usr/local/hadoop/conf/core-site.xml 使其内容为

引用
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>
   <name>fs.default.name</name>
   <value>hdfs://master:54310/</value>
</property>

<property>
   <name>dfs.replication</name>
   <value>3</value>
</property>

<property>
    <name>hadoop.tmp.dir</name>
    <value>/data1/hadoop/tmp/</value>
</property>

<property>
    <name>dfs.name.dir</name>
    <value>/data1/hadoop/filesystem/name</value>
</property>

<property>
    <name>dfs.data.dir</name>
    <value>/data1/hadoop/filesystem/data</value>
</property>

<property>
  <name>dfs.block.size</name>
  <value>67108864</value>
</property>

<property>  
   <name>dfs.permissions</name>  
   <value>false</value>
</property>

<property>  
   <name>dfs.web.ugi</name>  
   <value>hadoop,supergroup</value>
</property>

<property>
    <name>heartbeat.recheck.interval</name>
    <value>5000</value>
</property>


</configuration>

  分区/data1用于存放HDFS数据

9.再次修改文件/etc/profile 添加如下内容:
引用
export PATH=$PATH:$HADOOP_HOME/bin


然后执行 source /etc/profile 使其立即生效

    
引用
四、初始化和启动hadoop集群


     hadoop的大部分操作都是在名称节点进行的,包括初始化、启动以及停止hadoop服务

   1.hadoop初始化

  以hadoop登录namenode,然后执行hadoop namenode -format进行初始化操作。这个操作主要是在名称节点生成若干目录,而各个数据节点并没有进行任何操作。一般没有权限问题的话,hadoop初始化操作都会进行的很顺利。

  2.hadoop服务启动
  在名称服务器执行 start-all.sh 即可启动集群。

  3. 状态查看
   1)查看进程。一般namenode节点有3个java进程,datanode节点有2个java进程
   2)查看端口 查看 54310 54311 50030 50070 50090 端口是否在监听
   3)使用hadoop工具查看
引用
hadoop dfsadmin -report

  
   4)浏览器查看hadoop存储状态
在浏览器输入http://master:50070  http://master:50030 查看其存储状况


  4.停止hadoop服务
引用
stop-all.sh

    就可以把整个hadoop集群停止下来