本文主要介绍在集群上部署hadoop,构建HDFS
1、相关准备
下载hadoop: http://hadoop.apache.org/core/releases.html(以hadoop-0.20.2 为例)
下载JDK1.6(jdk-6u18-linux-x64-rpm.bin)
2、硬件环境准备
四台机器(系统都为64位的Centos 5),通过hostname进行设置:
master(192.168.21.67),slave1(192.168.21.68),slave2(192.168.21.69),slave3(192.168.21.70)
对于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和slave3作为DataNode和TaskTracker。
3、安装和配置JDK
(1)分别在四台机器上运行二进制文件:./jdk-6u18-linux-x64-rpm.bin 或 (2)./jdk-6u18-linux-x64.bin。
(区别在于./jdk-6u18-linux-x64-rpm.bin会自动安装在/usr/java下,而./jdk-6u18-linux-x64.bin生成的jdk1.6.0_18文件夹需要手动放到/usr/java或者其它自定义目录下。)
(2)编辑四台机器的/etc/profile,增加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_18
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
4、安装Hadoop
(1)以root登录,在master机器上编辑/etc/hosts(在slave1、slave2和slave3上操作和以下相同)
192.168.21.67 master
192.168.21.68 slave1
192.168.21.69 slave2
192.168.21.70 slave3
(2)在四台机器上分别用root登陆,建立hadoop用户,密码都为hadoop
useradd hadoop
passwd hadoop
(3)配置SSH环境,实现无密码远程访问(都以hadoop帐号登录)
在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
//在master机器上,生成SSH秘钥对命令,使用命令
ssh-keygen -t rsa //这个命令将为hadoop上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时 候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下
//进入.ssh目录生成authorized_keys文件
cp id_rsa.pub authorized_keys
//建立本身信任连接命令
ssh master
//分别在slave1、slave2、slave3机器上,使用命令
ssh-keygen -t rsa //生成.ssh文件夹
//然后拷贝master上的.ssh文件夹覆盖本地的
scp master:/home/hadoop/.ssh/* /home/hadoop/.ssh
//此后就可建立无密码并且没有任何提示信息即可登录ssh主机名
(4)Hadoop的安装(都以用户hadoop登录)
将下载好的hadoop-0.20.2.tar.gz文件上传到四台机器上的/home/hadoop
//解压文件
tar zxvf hadoop-0.20.2.tar.gz
//如出现问题可以用下面两句代替
gzip -d hadoop-0.20.2.tar.gz
tar xvf hadoop-0.20.2.tar
(5)配置/etc/profile
// 以root登录四台机器,编辑/etc/profile,增加如下内容
export HADOOP_HOME=/home/hadoop/hadoop-0.20.2
export PATH=$PATH:$HADOOP_HOME/bin
(6)修改Hadoop的配置文件(以Hadoop登录)
修改4个文件core-site.xml (0.19.0版本是hadoop-site.xml),hadoop-env.sh,masters,slaves
//masters文件修改成
master
//slaves 文件修改成
slave1
slave2
//hadoop-env.sh文件修改成
export JAVA_HOME=/usr/java/jdk1.6.0_18
//master机器上的core-site.xml文件修改成
<?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>mapred.job.tracker</name>//
<value>hdfs://master:54311/</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value> #指定 HDFS 中每个 Block 被复制的次数,起数据冗余备份的作用。在典型的生产系统中,这个数常常设置为3
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp/</value> #hadoop的tmp目录路径
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name/</value> #hadoop的name目录路径
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx512m</value> #进程
</property>
<property>
<name>dfs.block.size</name>
<value>67108864</value>
<description>The default block size for new files.</description>
</property> #新文件默认block大小
<property>
<name>dfs.permissions</name>
<value>false</value> #效验HDFS文件系统权限
</property>
<property>
<name>dfs.web.ugi</name>
<value>hadoop,supergroup</value> #hadoop页面访问权限
</property>
<property>
<name>heartbeat.recheck.interval</name>
<value>5000</value> #心跳间隔时间,5000秒=40分
</property>
</configuration>
在slave1、slave2和slave3上的core-site.xml文件只需要做如下修改
去掉
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name/</value> #hadoop的name目录路径
</property>
增加一句
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data/</value> #hadoop的data目录路径
</property>
(7) 配置好后先在/home/hadoop下建立/tmp目录
然后在master机器上进入hadoop的bin目录
//格式化namenode
hadoop namenode -format
//启动namenode上的hadoop
./start-all.sh
//查看50070,54310,50090端口是否启动
netstat -tnl
http://master:50070访问