一、所需软件
Linux和Windows所需软件包括:
JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
Windows下的附加软件需求
Cygwin - 提供上述软件之外的shell支持。
安装软件
如果你的集群尚未安装所需软件,你得首先安装它们。
以Ubuntu Linux为例:
$ sudo apt-get install ssh
$ sudo apt-get install rsync
在Windows平台上,如果安装cygwin时未安装全部所需软件,则需启动cyqwin安装管理器安装如下软件包:
openssh - Net 类
二、修改/etc/hosts文件
设置任意一台机器都可以通过ip和主机名称来访问
修改3台机器的/etc/hosts,让彼此的主机名称和ip都能顺利解析
127.0.0.1 localhost
10.0.0.201 steven01
10.0.0.202 steven02
10.0.0.203 steven03
三、准备硬件设备、操作系统、网络环境
准备三台机器,机器名分别为 steven01、steven02、steven03,均安装 ubuntu (其它 Linux 发行版亦可), 确保各台机器之间网络畅通,机器名与 IP 地址之间解析正确,从任一台机器都可以 ping 通其它机器的机器名。如有机器名的解析问题,可通过设置 /etc/hosts 文件解决,当然更好的解决方法是在你的网络中配置 DNS 服务器。此外,需要在三台机器上创建相同的用户帐号,如:steven。
我们将使用 steven03 作为分布式文件系统 HDFS 的 Name Node 及 MapReduce 运行过程中的 Job Tracker 结点,我们将 steven03 称之为主结点。其它两台机器 (steven01,steven02) 作为 HDFS 的 Data Node 以及 MapReduce 运行过程中的 Task Tracker 结点,这些结点可统称为从结点。如你需要部署更多的机器,也是很容易的,将新加入的机器作为 Data Node 以及 Task Tracker 结点即可,其配置过程在您看完本文后就会了。
设置ssh免验证登录。
1/先执行$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa,用来生成id_dsa.pub文件(注意:命令中''是两个单引号)
2/然后执行$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
3/最后将authorized_keys文件拷贝到各个datanode服务器的对应目录即可。具体命令:
scp authorized_keys steven@10.0.0.201:~/.ssh/
(该命令是首先进入当前机器或者Name Node的~/.ssh,把当前节点的dsa权限key复制到其他的节点中,可以不用其他机器可以用localhost免密码登录,拷贝过去以后,在当前机器上用ssh可以免密码登录其他机器)
在 Hadoop 分布式环境中,Name Node (主节点) 需要通过 SSH 来启动和停止 Data Node (从结点)上的各类进程
。我们需要保证环境中的各台机器均可以通过 SSH 登录访问,并且 Name Node 用 SSH 登录 Data Node 时,不需要
输入密码,这样 Name Node 才能在后台自如地控制其它结点。可以将各台机器上的 SSH 配置为使用无密码公钥认证方式来实现
四、安装部署 Hadoop
4.1、编辑 conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径
在这里我们做了一个处理,即把hadoop的原文件和jdk的安装文件放到一个文件夹下,路径为
hadoop/
hadoop-distributred/
jdk1.7.0_03/
其中hadoop-distributed存放hadoop的安装文件,jdk1.7.0_03是jdk的安装文件
4.2、配置 conf/core-site.xml、conf/hdfs-site.xml、conf/mapred-site.xml
4.2.1、 conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://steven03:9000</value>
</property>
</configuration>
4.2.2、conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/steven/hadoopfs/name_0,/home/steven/hadoopfs/name_1</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>
<value>/home/steven/hadoopfs/data_0,/home/steven/hadoopfs/data_1</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>
</configuration>
4.2.3、conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>steven03:9001</value>
</property>
</configuration>
4.3、解释:
参数 fs.default.name 指定 Name Node 的 IP 地址和端口号,此处我们将其设定为 steven03 及 9000 端口,参数 mapred.job.tracker 指定 JobTracker 的 IP 地址和端口号,此处我们将其设定为 steven03 及 9001端口。 参数 dfs.name.dir 指定 Name Node 相关数据在本地文件系统上的存放位置, 此处我们将其设定为/home/steven/hadoopfs/name_0,/home/steven/hadoopfs/name_1 ,参数 dfs.data.dir 指定 Data Node 相关数据在本地文件系统上的存放位置,此处我们将其设定为 /home/steven/hadoopfs/data_0,/home/steven/hadoopfs/data_1 。注意, Hadoop 会自动创建这些目录,无需事先创建。如果你有多个磁盘设备,以逗号分开配置进去,会大大提高IO效率。
4.4、设定主从节点
修改 conf/masters 文件,将其中的 localhost 改为 steven03 ,修改 conf/slaves 文件。 删掉其中的localhost, 将我们的另两台机器 steven01,steven02 加入, 注意每个机器一行。masters里面的是主机节点,slaves里面是从机节点。
4.5、同样的配置拷贝到其他两台机器上去
$ scp -r /home/steven/hadoop steven01:/home/steven/hadoop
$ scp -r /home/steven/hadoop steven02:/home/steven/hadoop
注意:可能您每台机器的JAVA安装位置不一样,记得修改conf/hadoop-env.sh,设置export JAVA_HOME=正确路径。
4.6、在 steven03 上格式化一个新的分布式文件系统
$ cd hadoop/hadoop-distributed
$ bin/hadoop namenode -format
4.7、启动hadoop进程
$ bin/start-all.sh
starting namenode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-namenode-steven03.out
steven02: starting datanode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-datanode-steven02.out
steven01: starting datanode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-datanode-steven01.out
The authenticity of host 'steven03 (10.0.0.203)' can't be established.
RSA key fingerprint is 3f:cf:68:17:60:47:a6:0a:dc:d1:0a:9a:ee:ae:16:39.
Are you sure you want to continue connecting (yes/no)? yes
steven03: Warning: Permanently added 'steven03,10.0.0.203' (RSA) to the list of known hosts.
steven03: starting secondarynamenode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-secondarynamenode-steven03.out
starting jobtracker, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-jobtracker-steven03.out
steven01: starting tasktracker, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-tasktracker-steven01.out
steven02: starting tasktracker, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-tasktracker-steven02.out
启动完成之后,从日志中可以看到,也可以运行 ps -ef 命令可以看到 home0.hadoop 上启动了 3 个新的 java进程 (namenode, secondary namenode, jobtracker), 同时,我们可以到 home1.hadoop、home2.hadoop 两台机器上用 ps –ef 查看,这两台机器上应该已经自动启动了 2 个新的 java 进程 (datanode, tasktracker)
五、操作HDFS试试
$ bin/hadoop fs -lsr //查看分布式系统中是有哪些文件存在
$ bin/hadoop fs -put /home/yourusername/hadoop-0.20.2/hadoop-0.20.2-tools.jar a.jar //从本地拷贝文件
$ bin/hadoop fs -put /home/yourusername/hadoop-0.20.2/ . //从本地文件系统拷贝文件夹到分布式文件系统
$ bin/hadoop fs -rmr /home/yourusername/hadoop-0.20.2/ . //删除分布式文件系统的所有文件
六、可能你不会很顺利
我的问题呢,就是碰到 could only be replicated to 0 nodes, instead of 1,因为防火墙问题,在这里解决的:http://jiajun.iteye.com/blog/624449。
七、多熟悉熟悉
1、http://steven03:50070 看看分布式文件系统概况日志
Cluster Summary
15 files and directories, 3 blocks = 18 total. Heap Size is 10.73 MB / 966.69 MB (1%)
Configured Capacity : 56.26 GB
DFS Used : 524 KB
Non DFS Used : 10.86 GB
DFS Remaining : 45.4 GB
DFS Used% : 0 %
DFS Remaining% : 80.7 %
Live Nodes : 2
Dead Nodes : 0
2、http://steven03:50030 看看工作情况
Cluster Summary (Heap Size is 7.5 MB/966.69 MB)
Maps Reduces Total Submissions Nodes Map Task Capacity Reduce Task Capacity Avg.
Tasks/Node Blacklisted Nodes
0 0 0 2 4 4 4.00 0
3、熟悉hadoop的命令
八、环境搭建完成,到这里你可以玩玩分布式文件系统,下一步我会介绍如何分布式编程
Linux和Windows所需软件包括:
JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
Windows下的附加软件需求
Cygwin - 提供上述软件之外的shell支持。
安装软件
如果你的集群尚未安装所需软件,你得首先安装它们。
以Ubuntu Linux为例:
$ sudo apt-get install ssh
$ sudo apt-get install rsync
在Windows平台上,如果安装cygwin时未安装全部所需软件,则需启动cyqwin安装管理器安装如下软件包:
openssh - Net 类
二、修改/etc/hosts文件
设置任意一台机器都可以通过ip和主机名称来访问
修改3台机器的/etc/hosts,让彼此的主机名称和ip都能顺利解析
127.0.0.1 localhost
10.0.0.201 steven01
10.0.0.202 steven02
10.0.0.203 steven03
三、准备硬件设备、操作系统、网络环境
准备三台机器,机器名分别为 steven01、steven02、steven03,均安装 ubuntu (其它 Linux 发行版亦可), 确保各台机器之间网络畅通,机器名与 IP 地址之间解析正确,从任一台机器都可以 ping 通其它机器的机器名。如有机器名的解析问题,可通过设置 /etc/hosts 文件解决,当然更好的解决方法是在你的网络中配置 DNS 服务器。此外,需要在三台机器上创建相同的用户帐号,如:steven。
我们将使用 steven03 作为分布式文件系统 HDFS 的 Name Node 及 MapReduce 运行过程中的 Job Tracker 结点,我们将 steven03 称之为主结点。其它两台机器 (steven01,steven02) 作为 HDFS 的 Data Node 以及 MapReduce 运行过程中的 Task Tracker 结点,这些结点可统称为从结点。如你需要部署更多的机器,也是很容易的,将新加入的机器作为 Data Node 以及 Task Tracker 结点即可,其配置过程在您看完本文后就会了。
设置ssh免验证登录。
1/先执行$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa,用来生成id_dsa.pub文件(注意:命令中''是两个单引号)
2/然后执行$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
3/最后将authorized_keys文件拷贝到各个datanode服务器的对应目录即可。具体命令:
scp authorized_keys steven@10.0.0.201:~/.ssh/
(该命令是首先进入当前机器或者Name Node的~/.ssh,把当前节点的dsa权限key复制到其他的节点中,可以不用其他机器可以用localhost免密码登录,拷贝过去以后,在当前机器上用ssh可以免密码登录其他机器)
在 Hadoop 分布式环境中,Name Node (主节点) 需要通过 SSH 来启动和停止 Data Node (从结点)上的各类进程
。我们需要保证环境中的各台机器均可以通过 SSH 登录访问,并且 Name Node 用 SSH 登录 Data Node 时,不需要
输入密码,这样 Name Node 才能在后台自如地控制其它结点。可以将各台机器上的 SSH 配置为使用无密码公钥认证方式来实现
四、安装部署 Hadoop
4.1、编辑 conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径
在这里我们做了一个处理,即把hadoop的原文件和jdk的安装文件放到一个文件夹下,路径为
hadoop/
hadoop-distributred/
jdk1.7.0_03/
其中hadoop-distributed存放hadoop的安装文件,jdk1.7.0_03是jdk的安装文件
4.2、配置 conf/core-site.xml、conf/hdfs-site.xml、conf/mapred-site.xml
4.2.1、 conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://steven03:9000</value>
</property>
</configuration>
4.2.2、conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/steven/hadoopfs/name_0,/home/steven/hadoopfs/name_1</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>
<value>/home/steven/hadoopfs/data_0,/home/steven/hadoopfs/data_1</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>
</configuration>
4.2.3、conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>steven03:9001</value>
</property>
</configuration>
4.3、解释:
参数 fs.default.name 指定 Name Node 的 IP 地址和端口号,此处我们将其设定为 steven03 及 9000 端口,参数 mapred.job.tracker 指定 JobTracker 的 IP 地址和端口号,此处我们将其设定为 steven03 及 9001端口。 参数 dfs.name.dir 指定 Name Node 相关数据在本地文件系统上的存放位置, 此处我们将其设定为/home/steven/hadoopfs/name_0,/home/steven/hadoopfs/name_1 ,参数 dfs.data.dir 指定 Data Node 相关数据在本地文件系统上的存放位置,此处我们将其设定为 /home/steven/hadoopfs/data_0,/home/steven/hadoopfs/data_1 。注意, Hadoop 会自动创建这些目录,无需事先创建。如果你有多个磁盘设备,以逗号分开配置进去,会大大提高IO效率。
4.4、设定主从节点
修改 conf/masters 文件,将其中的 localhost 改为 steven03 ,修改 conf/slaves 文件。 删掉其中的localhost, 将我们的另两台机器 steven01,steven02 加入, 注意每个机器一行。masters里面的是主机节点,slaves里面是从机节点。
4.5、同样的配置拷贝到其他两台机器上去
$ scp -r /home/steven/hadoop steven01:/home/steven/hadoop
$ scp -r /home/steven/hadoop steven02:/home/steven/hadoop
注意:可能您每台机器的JAVA安装位置不一样,记得修改conf/hadoop-env.sh,设置export JAVA_HOME=正确路径。
4.6、在 steven03 上格式化一个新的分布式文件系统
$ cd hadoop/hadoop-distributed
$ bin/hadoop namenode -format
4.7、启动hadoop进程
$ bin/start-all.sh
starting namenode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-namenode-steven03.out
steven02: starting datanode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-datanode-steven02.out
steven01: starting datanode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-datanode-steven01.out
The authenticity of host 'steven03 (10.0.0.203)' can't be established.
RSA key fingerprint is 3f:cf:68:17:60:47:a6:0a:dc:d1:0a:9a:ee:ae:16:39.
Are you sure you want to continue connecting (yes/no)? yes
steven03: Warning: Permanently added 'steven03,10.0.0.203' (RSA) to the list of known hosts.
steven03: starting secondarynamenode, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-secondarynamenode-steven03.out
starting jobtracker, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-jobtracker-steven03.out
steven01: starting tasktracker, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-tasktracker-steven01.out
steven02: starting tasktracker, logging to /home/steven/hadoop/hadoop-distributed/bin/../logs/hadoop-steven-tasktracker-steven02.out
启动完成之后,从日志中可以看到,也可以运行 ps -ef 命令可以看到 home0.hadoop 上启动了 3 个新的 java进程 (namenode, secondary namenode, jobtracker), 同时,我们可以到 home1.hadoop、home2.hadoop 两台机器上用 ps –ef 查看,这两台机器上应该已经自动启动了 2 个新的 java 进程 (datanode, tasktracker)
五、操作HDFS试试
$ bin/hadoop fs -lsr //查看分布式系统中是有哪些文件存在
$ bin/hadoop fs -put /home/yourusername/hadoop-0.20.2/hadoop-0.20.2-tools.jar a.jar //从本地拷贝文件
$ bin/hadoop fs -put /home/yourusername/hadoop-0.20.2/ . //从本地文件系统拷贝文件夹到分布式文件系统
$ bin/hadoop fs -rmr /home/yourusername/hadoop-0.20.2/ . //删除分布式文件系统的所有文件
六、可能你不会很顺利
我的问题呢,就是碰到 could only be replicated to 0 nodes, instead of 1,因为防火墙问题,在这里解决的:http://jiajun.iteye.com/blog/624449。
七、多熟悉熟悉
1、http://steven03:50070 看看分布式文件系统概况日志
Cluster Summary
15 files and directories, 3 blocks = 18 total. Heap Size is 10.73 MB / 966.69 MB (1%)
Configured Capacity : 56.26 GB
DFS Used : 524 KB
Non DFS Used : 10.86 GB
DFS Remaining : 45.4 GB
DFS Used% : 0 %
DFS Remaining% : 80.7 %
Live Nodes : 2
Dead Nodes : 0
2、http://steven03:50030 看看工作情况
Cluster Summary (Heap Size is 7.5 MB/966.69 MB)
Maps Reduces Total Submissions Nodes Map Task Capacity Reduce Task Capacity Avg.
Tasks/Node Blacklisted Nodes
0 0 0 2 4 4 4.00 0
3、熟悉hadoop的命令
八、环境搭建完成,到这里你可以玩玩分布式文件系统,下一步我会介绍如何分布式编程