Hadoop 安装详解--新手必备

准备:

这次学习,我使用的是虚拟机vmware,安装了3台虚拟机,系统为centos 5(其它版本亦可),主机名依次命名为hdfs1、hdfs2、hdfs3,ip地址一次为:172.16.16.1、172.16.16.10、172.16.16.11

通过配置/etc/sysconfig/network 修改主机名

通过修改/etc/sysconfig/network-scripts/ifcfg-eth0 ,配置ip等信息

将主机hdfs1作为hadoop作为分布式文件系统HDFS的namenode节点和MapReduce 运行过程中的 Job Tracker 结点,我们将 hdfs1 称之为主结点。其它两台机器 (hdfs2, hdfs3) 作为 HDFS 的 Data Node 以及 MapReduce 运行过程中的 Task Tracker 结点,这些结点可统称为从结点。如你需要部署更多的机器,也是很容易的,将新加入的机器作为 Data Node 以及 Task Tracker 结点即可,其配置过程在您看完本文后就会了。

步骤一:

 vi /etc/hosts

172.16.16.10         hdfs2

172.16.16.11         hdfs3

172.16.16.1          hdfs1

先保证每一台主机都能ping通其他主机,ping 通其他任意节点的主机名

步骤二:

设置master到任意节点的无密码登录

[root@hdfs1 ~]# ssh-keygen 

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): 

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

09:ad:96:cf:9f:21:65:10:3d:39:f0:f9:99:69:3c:b2 root@hdfs1

[root@hdfs1 ~]# cd .ssh/

[root@hdfs1 .ssh]# mv id_rsa.pub id_rsahdfs1.pub

[root@hdfs1 .ssh]# touch authorized_keys

[root@hdfs1 .ssh]# cat id_rsahdfs1.pub > authorized_keys 

[root@hdfs1 .ssh]# ssh hdfs1

Last login: Sat Mar 24 12:25:53 2012 from hdfs1

在hdfs2和hdfs3主机上,依次操作cat id_rsahdfs1.pub > authorized_keys,之后,验证从hdfs1上其它两个节点上,登录是否需要输入密码?不输入密码是正确的

[root@hdfs1 .ssh]# ssh hdfs2

Last login: Sat Mar 24 12:31:44 2012 from hdfs1

[root@hdfs2 ~]# 

[root@hdfs1 .ssh]# ssh hdfs3

Last login: Fri Mar 23 21:18:29 2012 from 172.16.16.110

[root@hdfs3 ~]# 

Ok , ssh验证均不需要密码

步骤三:安装jdk和hadoop,我的系统是32位的,

cp hadoop-1.0.1.tar.gz  jdk-6u31-linux-i586.bin  /usr/local/

chmod 755 jdk-6u31-linux-i586.bin 

[root@hdfs1 local]# ./jdk-6u31-linux-i586.bin  赋予可执行权限

tar zxvf hadoop-1.0.1.tar.gz   安装hadoop 

注意: Jdk和hadoop程序是一样的,在那个目录下解压包,就是将程序安装在当前目录下

因为安装jdk,就是安装Java程序,看系统默认的程序是否卸载掉,可以手动删除,然后在做一个软连接

默认的java

[root@hdfs1 local]# java -version

java version "1.6.0"

OpenJDK  Runtime Environment (build 1.6.0-b09)

OpenJDK Client VM (build 1.6.0-b09, mixed mode)

删除/usr/bin 的Java符号链接

[root@hdfs1 bin]# rm java

rm:是否删除 符号链接 “java”? Y

然后再做一个软连接:

[root@hdfs1 bin]# java -version

java version "1.6.0_31"

Java(TM) SE Runtime Environment (build 1.6.0_31-b04)

Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)

这个才是我们安装的版本

所有的主机的Java都调整好后,开始编辑hadoop的配置文件

vi hadoop-env.sh        此文件指定JAVA程序的安装目录

添加一行,export JAVA_HOME=/usr/local/jdk1.6.0_31

编辑:vi core-site.xml

<configuration>

<property>

        <name>fs.default.name</name>

参数 fs.default.name 指定 Name Node 的 IP 地址和端口号,这里指定就是namenode的9000端口   

        <value>hafs://hdfs1:9000</value>

</property>

</configuration>

vi hdfs-site.xml

<configuration>

<property>

        <name>dfs.name.dir</name>

 参数 dfs.name.dir 指定 Name Node 相关数据在本地文件系统上的存放位置

        <value>/home/hadoop/dfs.name.dir</value>

</property>

<property>

        <name>dfs.data.dir</name>

参数 dfs.data.dir 指定 Data Node 相关数据在本地文件系统上的存放位置

        <value>/home/hadoop/dfs.data.dir</value>

</property>

<property>

        <name>dfs.replication</name>

设置hdfs系统备份文件数,此值设置为2,说明当一个文件上传到hdfs系统中,会被备份2个

        <value>2</value>

</property>

</configuration>

 vi mapred-site.xml 

<configuration>

<property>

        <name>mapred.job.tracker</name>

参数 mapred.job.tracker 指定 JobTracker 的 IP 地址和端口号

        <value>hdfs1:9001</value>

</property>

</configuration>

设置主从节点:

  修改 conf/masters 文件,将其中的 localhost 改为 hdfs1 ,修改 conf/slaves 文件。 删掉其中的localhost, 将我们的另两台机器 hdfs2、hdfs3 加入, 注意每个机器一行。masters里面的是主机节点,slaves里面是从机节点。

步骤四:

同样的配置文件,拷贝到其它两台slave节点中

[root@hdfs1 hadoop-1.0.1]# scp -r conf/  root@hdfs2:/usr/local/hadoop-1.0.1/

[root@hdfs1 hadoop-1.0.1]# scp -r conf/ root@hdfs3:/usr/local/hadoop-1.0.1/

开启hdfs防火墙端口:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT~

重启防火墙,使新添加的防火墙规则生效

步骤五:

在hdfs 节点上,格式化一个HDFS文件系统

[root@hdfs1 hadoop-1.0.1]# /usr/local/hadoop-1.0.1/bin/hadoop namenode -format

2/03/24 13:19:17 INFO namenode.NameNode: STARTUP_MSG: 

/************************************************************

STARTUP_MSG: Starting NameNode

STARTUP_MSG:   host = hdfs1/172.16.16.1

STARTUP_MSG:   args = [-format]

STARTUP_MSG:   version = 1.0.1

STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1243785; compiled by 'hortonfo' on Tue Feb 14 08:15:38 UTC 2012

************************************************************/

12/03/24 13:19:17 INFO util.GSet: VM type       = 32-bit

12/03/24 13:19:17 INFO util.GSet: 2% max memory = 19.33375 MB

12/03/24 13:19:17 INFO util.GSet: capacity      = 2^22 = 4194304 entries

12/03/24 13:19:17 INFO util.GSet: recommended=4194304, actual=4194304

12/03/24 13:19:18 INFO namenode.FSNamesystem: fsOwner=root

12/03/24 13:19:18 INFO namenode.FSNamesystem: supergroup=supergroup

12/03/24 13:19:18 INFO namenode.FSNamesystem: isPermissionEnabled=true

12/03/24 13:19:18 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100

12/03/24 13:19:18 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)

12/03/24 13:19:18 INFO namenode.NameNode: Caching file names occuring more than 10 times 

12/03/24 13:19:18 INFO common.Storage: Image file of size 110 saved in 0 seconds.

12/03/24 13:19:18 INFO common.Storage: Storage directory /home/hadoop/dfs.name.dir has been successfully formatted.

12/03/24 13:19:18 INFO namenode.NameNode: SHUTDOWN_MSG: 

/************************************************************

SHUTDOWN_MSG: Shutting down NameNode at hdfs1/172.16.16.1

************************************************************/

Ok

步骤六:

启动hadoop进程

/usr/local/hadoop-1.0.1/bin/start-all.sh 

starting namenode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-namenode-hdfs1.out

hdfs3: starting datanode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-datanode-hdfs3.out

hdfs2: starting datanode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-datanode-hdfs2.out

hdfs1: starting secondarynamenode, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-secondarynamenode-hdfs1.out

starting jobtracker, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-jobtracker-hdfs1.out

hdfs3: starting tasktracker, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-tasktracker-hdfs3.out

hdfs2: starting tasktracker, logging to /usr/local/hadoop-1.0.1/libexec/../logs/hadoop-root-tasktracker-hdfs2.out

启动完成后,用ps -ef 可以查到hdfs上启动了3个关于hadoop有关的java进程,

jar org.apache.hadoop.hdfs. server.namenode.NameNode

 org.apache.hadoop.hdfs.server. namenode.SecondaryNameNode

org.apache.hadoop. mapred.JobTracker

在其它的节点上,hdfs2、hdfs3有两个与hadoop相关的两个java进程

org.apache.hadoop.hdfs. server.datanode.DataNode

org.apache.hadoop .mapred.TaskTracker

现在再调整系统的环境变量

Vi /etc/profile

export PATH=/usr/local/jdk1.6.0_31/bin:/usr/local/hadoop-1.0.1/bin:$PATH  USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

source /etc/profile

同步到其他slave节点上

[root@hdfs1 bin]# scp /etc/profile root@hdfs2:/etc/

profile                                                                                    100% 1091     1.1KB/s   00:00    

[root@hdfs1 bin]# scp /etc/profile root@hdfs3:/etc/

profile  

到其它节点上,执行命令 source /etc/profile  让文件生效,这样hadoop/bin下的和jdk/bin/下的命令,可以任意调用

查看hadoop是否安装ok

使用命令jps

[root@hdfs1 bin]# jps

8517 SecondaryNameNode

8943 Jps

8592 JobTracker

8343 NameNode

[root@hdfs2 bin]# jps

8600 Jps

8306 TaskTracker

8220 DataNode

[root@hdfs3 bin]# jps

11833 DataNode

12211 Jps

11902 TaskTracker

由此可看出,hadoop安装、部署是ok的

通过

http://hdfs1:50070  看看分布式文件系统概况日志  

http://hdfs1:50030   可以查看分布式文件系统的工作状况

以上所有的步骤,是hadoop集群系统的安装、配置部分,后续将继续发表出hdfs的命令、操作等其它文章
我也是新手,愿有志同道合的朋友,一起学习!

以后操作如有不当之处,请指出,一起学习!

因为jdk包和hadoop包计较大,无法上传,有需要的,可以从官网上下载,也可以联系我索要