本文主要介绍在 Ubuntu 环境下 Hadoop0.20.2
步聚一、机器分配及用途
hdfs-m--------------172.16.11.197 (Master--NameNode)
hdfs-s1-------------172.16.11.149 (Slave1--DataNode)
hdfs-s2-------------172.16.11.97 (Slave2--DataNode)
步聚二、 IP地址及别名配置
为了能够使用别名来访问服务器,需要在 /etc/hosts 文件中进行 IP
在主服务器上的 /etc/hosts
$ vi /etc/hosts
172.16.11.197 hdfs-m
172.16.11.149 hdfs-s1
172.16.11.97 hdfs-s2
在从服务器上的 /etc/hosts 文件中的配置如下(以 hdfs-s1 为例, hdfs-s2
$ vi /etc/hosts
172.16.11.197 hdfs-m
172.16.11.149 hdfs-s1
在完成上述配置服务器的配置后,在 hdfs-m 上进行 ping hdfs-s1 来验证别名与 IP
步骤三、 ssh配置
在 hdfs-m
$ ssh-keygen -t rsa
以 root 用户执行时,会在 /root/.ssh 目录中生成 id_rsa 、 id_rsa.pub
$cp id_rsa.pub authorized_keys
拷贝一份 id_rsa.pub 为 authorized_keys
在 hdfs-s1/hdfs-s2
$ cd /root
$mkdir .ssh
创建 .ssh
创建完成之后,在 hdfs-m 上进行如下操作 , 操作目录 :/root/.ssh/
$scp authorized_keys hdfs-s1:/root/.ssh/
将 authorized_keys 文件通过远程 ssh 的方式拷贝至 hdfs-s1 机器中的 /root/.ssh/
在完成之后,在 hdfs-m 上通过如下命令进行测试,以验证是否已经成功配置了 ssh
$ ssh hdfs-s1
$ ifconfig
在运行完上述命令后,即可以看到 IP 地址已经从 197 变为了 149 ,即已通过 SSH 登录 149
步骤四、安装 Hadoop
4.1、 Hadoop环境变量
下载 Hadoop0.20.2.tar.gz 包,并将其解压至 hdfs-m 机器上的 /usr/local/hadoop
修改 hdfs-m 中 conf 目录下的 hadoop-env.sh ,并在其中配置 hadoop
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export HADOOP_HOME=/usr/local/hadoop
在 conf 目录下打开 slaves
$vi slaves
hdfs-s1
hdfs-s2
在 conf 目录下打开 masters 文件,在其中添加 namenode
$vi masters
hdfs-m
在完成上述配置后,即已经完成了架构的部署。即有一台 master 及多台 slaves
4.2、 Hadoop配置文件
在 Hadoop 安装的 conf 目录下,需要修改以下三个文件,即 core-site.xml , hdfs-site.xml 及 mapred-site.xml
在 conf 目录下配置 core-site.xml
$ vi 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://hdfs-m:9000</value> // 此处应该是 NameNode 的别名,一定要加 hdfs://
<description>The name of the default file system. Either the literal string "local" or a host:port for DFS.</description>
</property>
</configuration>
在 conf 目录下配置 hdfs-site.xml
$ vi hdfs-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>hadoop.tmp.dir</name> //
<value>/usr/local/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>dfs.name.dir</name> //DFS 文件目录名字
<value>/usr/local/hadoop/filesystem/name</value>
<description>Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description>
</property>
<property>
<name>dfs.data.dir</name> //DFS
<value>/usr/local/hadoop/filesystem/data</value>
<description>Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.</description>
</property>
<property>
<name>dfs.replication</name> //DFS 备份的文件数目为 2
<value>2</value>
<description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description>
</property>
</configuration>
在 conf 目录下配置 mapred-site.xml
$ vi 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>hdfs-m:9001</value> // 此处应该填写 NameNode
<description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.</description>
</property>
</configuration>
五、部署 Hadoop
前面讲的这么多 Hadoop 的环境变量和配置文件都是在 hdfs-m 这台机器上的,现在需要将 hadoop
$scp -r /usr/local/hadoop hdfs-s1:/usr/local/
$scp -r /usr/local/hadoop hdfs-s2:/usr/local/
至此,可以说, Hadoop 已经在各个机器上部署完毕了下面就让我们开始启动 Hadoop
六、格式化 Hadoop
启动之前,我们先要格式化 namenode ,先进入 /usr/local/hadoop
$bin/hadoop namenode -format
10/10/18 00:12:48 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = ubuntu/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
Re-format filesystem in /usr/local/hadoop/filesystem/name ? (Y or N) Y
10/10/18 00:12:53 INFO namenode.FSNamesystem: fsOwner=root,root,adm,dialout,fax,cdrom,tape,audio,dip,video,plugdev,fuse,lpadmin,netdev,admin,sambashare
10/10/18 00:12:53 INFO namenode.FSNamesystem: supergroup=supergroup
10/10/18 00:12:53 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/10/18 00:12:53 INFO common.Storage: Image file of size 94 saved in 0 seconds.
10/10/18 00:12:53 INFO common.Storage: Storage directory /usr/local/hadoop/filesystem/name has been successfully formatted.
10/10/18 00:12:53 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/
不出意外,应该会提示格式化成功。如果不成功,就去 hadoop/logs/ 目录下去查看日志文件 . 注意这里的交互式问题一定要输入大写的 Y
七、启动 Hadoop
下面就该正式启动 hadoop 啦,在 bin/
* start-all.sh 启动所有的 Hadoop 守护。包括 namenode, datanode, jobtracker, tasktrack
* stop-all.sh 停止所有的 Hadoop
* start-mapred.sh 启动 Map/Reduce 守护。包括 Jobtracker 和 Tasktrack
* stop-mapred.sh 停止 Map/Reduce
* start-dfs.sh 启动 Hadoop DFS 守护 .Namenode 和 Datanode
* stop-dfs.sh 停止 DFS
在格式化完成后,即可以启动 hadoop.
root@ubuntu:/usr/local/hadoop/bin# ./start-all.sh
starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-ubuntu.out
hdfs-s1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-ubuntu.out
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-ubuntu.out
hdfs-s2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-ubuntu.out
localhost: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-ubuntu.out
starting jobtracker, logging to /usr/local/hadoop/logs/hadoop-root-jobtracker-ubuntu.out
hdfs-s1: starting tasktracker, logging to /usr/local/hadoop/logs/hadoop-root-tasktracker-ubuntu.out
localhost: starting tasktracker, logging to /usr/local/hadoop/logs/hadoop-root-tasktracker-ubuntu.out
hdfs-s2: starting tasktracker, logging to /usr/local/hadoop/logs/hadoop-root-tasktracker-ubuntu.out
在成功启动后,在主服务器上通过如下地址进行访问:
http://hdfs-m:50070 即可以查看当前有几个数据结点,它们的状态如何。
http://hdfs-m:50030 即可以查看当前的 job 及 Task