搭建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的命令

八、环境搭建完成,到这里你可以玩玩分布式文件系统,下一步我会介绍如何分布式编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值