用了这么久的hadoop,只会使用streaming接口跑任务,各种调优还不熟练,自定义inputformat , outputformat, partitioner 还不会写,于是干脆从头开始,自己搭一个玩玩,也熟悉一下整体架构。

整体环境:

主机Win7 i5 4核 8G内存 笔记本;

虚拟机(客户机)采用Centos5.9 ( 用这个的原因是不想用图形界面,并且以后还想试着装一下ICE)

3台互联的虚拟机搭建Hadoop集群:

1. 选用virtualbox V4.2.18 + Centos 5.9

virtualbox V4.2.18 下载地址:http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/VirtualBox-4.2.18-88781-Win.exe

Centos 5.9 下载地址(共9个iso文件):http://mirror.bit.edu.cn/centos/5.9/isos/x86_64/

2. 安装virtualbox 和 Centos5.9

3. hadoop集群用3台机器,拓扑如下:

master:  ip:192.168.56.120

机器名:  master

启动NameNode

启动JobTracker

slave1:   ip: 192.168.56.121

机器名:slave1

启动SecondaryNameNode

启动DataNode

启动TaskTracker

slave2:   ip: 192.168.56.122

机器名:slave2

启动DataNode

启动TaskTracker

4. 配置Centos5.9

要求: 在任何环境下主机和客户机都要能够联通,正常工作。包括:笔记本插网线;笔记本不插网线;笔记本联通无线网络;笔记本完全没有网络等情况。

最复杂的情况是笔记本既没有有线网也没有无线网络且没有插网线的情况,这种情况下必须采用host-only的方式。具体原因不细说,因为我也不清楚这四种网络设置的区别到底有哪些 -_-!!!

配置方式参考:http://www.douban.com/group/topic/15558388/    也可以google搜索  "virtualbox host-only unplug cable"

还是要说一下我对host-only 方式配置的理解:virtualbox安装好之后在windows的”网络和共享中心“ (XP系统叫做网上邻居)中会出现一个新的虚拟网卡"VirtualBox Host-Only Network"。当虚拟机配置为host-only方式的时候,主机和虚拟机通过这个虚拟网卡进行通讯,因此无论主机的外部网络如何,都能和虚拟机联通。因此需要将虚拟机的ip设置到此虚拟网卡的网段内。

我的配置:

VirtualBox Host-Only Network  ipv4设置: ip地址: 192.168.56.1

子网掩码:255.255.255.0

centos ip设置:    参考:http://os.51cto.com/art/201001/177909.htm

执行:【vi /etc/sysconfig/network】

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=master
GATEWAY=192.168.56.1

执行:【vi /etc/sysconfig/network-scripts/ifcfg-eth0】

DEVICE=eth0
BOOTPROTO=static
NM_CONTROLLED=yes
TYPE=Ethernet
IPADDR=192.168.56.120
HWADDR=08:00:27:XX:XX:XX
NETMASK=255.255.255.0
NETWORK=192.168.56.0
ONBOOT=yes

执行:【vi /etc/resolv.conf】添加dns

nameserver 192.168.56.1

执行:【vi 
/etc/hosts】  设置本机名和静态域名解析

127.0.0.1       master localhost
::1 master6 localhost6
#hadoop
192.168.56.120 master
192.168.56.121 slave1
192.168.56.122 slave2

执行:【vi /etc/hostname】  设置本机名

master

            设置完成后运行:【service network restart】  重启网络服务以使设置生效。       

测试设置是否成功: a) 从主机ping虚拟机 和 从虚拟机ping主机都要通。如果不通则需要关闭主机和虚拟机的防火墙。

b) 如果还不通则检查virtualbox设置,如下图红圈的地方需要特别注意。


注意: 上面对机器的ip和机器名设置非常重要,因为hadoop的master与slave的连接是通过机器名来做的

5. 安装ssh服务(比较简单,google)

          安装完成后执行:【ps -ef | grep ssh】 
          看到有一个进程名为 sshd 的则安装成功。
          测试ssh, 执行:【ssh localhost】需要输入密码  

6. 为虚拟机添加hadoop账户

          以root账户登陆:执行 【useradd  hadoop】
                                                  【passwd   hadoop】
          测试账户,执行:【su   -   hadoop】

7. 安装jdk1.6 (据说1.7有些问题)

(此步如果centos自带了1.6的jdk的话,可以省略,但是要找到java的安装路径,因为后面配置环境变量要用)

               下载jdk1.6  :  http://download.oracle.com/otn-pub/java/jdk/6u35-b10/jdk-6u35-linux-x64-rpm.bin?AuthParam=1381058664_954e59f9391e5a0cf7ae446c5e0c7813
               得到文件: jdk-6u35-linux-x64-rpm.bin

               以 root账户登录
               执行:【mkdir /usr/java】  (当然也可以是其他目录,此目录将作为java的安装目录,即为JAVA_HOME)
               执行:【cd  /usr/java】        
       执行:【rz -be】  #选择jdk文件上传到    /usr/java   目录下
               执行:【./jdk-6u35-linux-x64-rpm.bin】   
               此时虽然安装完成了jdk,但是如果centos自带的java没有被卸载掉的话,使用java -version 还是会检测到老版本java, 因为还没有配置环境变量。
 

8. 安装hadoop

          下载hadoop安装包:http://mirrors.ustc.edu.cn/apache/hadoop/common/stable/hadoop-1.2.1-bin.tar.gz 
           得到文件:hadoop-1.2.1-bin.tar.gz
           执行: 【su - hadoop】
           执行:【cd   】           #切换到hadoop账户的根目录
           执行:【tar -zxvf  hadoop-1.2.1-bin.tar.gz】     # 解压,解压后会出现 hadoop-1.2.1 目录

9. 配置hadoop

          执行:【cd  hadoop-1.2.1/conf】
          执行:【vi  hadoop-env.sh】
                      找到JAVA_HOME那一行,取消注释并配置为:export JAVA_HOME=/usr/java/jdk1.6.0_35
           执行:【mkdir /home/hadoop/hadoop_tmp】 为下一步做准备
           执行:【vi core-site.xml】   配置NameNode节点运行在master上的9000端口和hadoop临时目录

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop_tmp/</value>
</property>
</configuration>

执行:【vi mapred-site.xml】 配置 JobTracker运行在master上的9001端口

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property> </configuration>

执行:【vi hdfs-site.xml】 配置hdfs 备份数量(不能超过机器数)

<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property> </configuration>

执行:【vi  masters】 配置SecondaryNameNode;指定SecondaryNameNode运行在slave1上。

slave1

执行:【vi  slaves】  配置DataNode 和   TaskTracker

slave1
slave2

10. 配置环境变量

           设置环境变量HADOOP_HOME,并将 $HADOOP_HOME/bin加入PATH
           执行:【cd  】 #切换到hadoop账户的根目录
           执行:【vi .bashrc】设置环境变量

#配置java相关的环境变量
export JAVA_HOME=/usr/java/jdk1.6.0_35
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
#配置hadoop相关环境变量
export HADOOP_HOME=/home/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/hadoop-core-1.2.1.jar

11. 克隆两台虚拟机(使用链接复制即可)并设置主机名和ip

          ( 放在这里进行克隆是因为hadoop集群中的所有机器的java 和 hadoop的安装路径必须都一样)
            以root 身份分别登陆到克隆得到的2台虚拟机上。
            

执行:【vi /etc/sysconfig/network】

修改:HOSTNAME=slave1   和  HOSTNAME=slave2)

      /etc/sysconfig/network-scripts/ifcfg-eth0     (修改:IPADDR=192.168.56.121  和 IPADDR=192.168.56.122)
      /etc/hosts    (对slave1修改:127.0.0.1       master localhost    --> 127.0.0.1       slave1 localhost
                                     ::1             master6 localhost6  --> ::1             slave16 localhost6 ) 
                     (对slave2修改:127.0.0.1       master localhost    --> 127.0.0.1       slave2 localhost
                                     ::1             master6 localhost6  --> ::1             slave26 localhost6 ) 
       /etc/hostname  (修改: master  -->  slave1  和 slave2 )

12. 配置master  ssh无密码登陆到所有机器(包括本机)

          在master上用hadoop账户登录。
          执行:【ssh -keygen -t rsa】 会在.ssh目录下生成  id_rsa  id_rsa.pub  known_hosts  三个文件。
          执行:【cd  .ssh】
          执行:【cp  id_rsa.pub  authorized_keys】
          测试是否可以无密码登录:
          执行:【ssh  hadoop@master】 第一次运行时会有一个选择,填yes, 如果不需要输入密码则成功。
          执行:【scp  authorized_keys  hadoop@slave1:~/.ssh】
          执行:【scp  authorized_keys  hadoop@slave2:~/.ssh】
          测试是否可以从master无密码登录到slave1 和 slave2上:
          执行:【ssh hadoop@slave1】 若有个选项则填yes, 如果不需要输入密码则表示成功。

13. 测试

          OK, 到此为止所有配置都已完成,来测试一下是否可以启动hadoop集群。
          以hadoop登录到master
          执行:【hadoop  namenode  -format】 # 此步只需执行一次即可,不需要每次启动都执行
          执行:【start-all.sh】
          执行:【jps】 查看java进程得到结果:
8192 Jps
6438 NameNode
6614 JobTracker
          执行:【ssh  hadoop@slave1】
          执行:【jps】
4606 DataNode
4692 SecondaryNameNode
5980 Jps
4784 TaskTracker

          执行:【ssh  hadoop@slave1】
          执行:【jps】
4283 TaskTracker
5437 Jps
4190 DataNode
          执行:【hadoop fs -ls /】
drwxr-xr-x   - hadoop supergroup          0 2013-10-07 22:14 /home

Oh my god!  终于完成了!!!


virtualbox 虚拟3台虚拟机搭建hadoop集群的更多相关文章

  1. 虚拟机搭建Hadoop集群

    安装包准备 操作系统:ubuntu-16.04.3-desktop-amd64.iso 软件包:VirtualBox 安装包:hadoop-3.0.0.tar.gz,jdk-8u161-linux-x ...

  2. Mac上使用虚拟机搭建Hadoop集群

    一. mini安装一台centos到虚拟机上 安装过程参考这篇博客http://www.linuxdown.net/install/setup/2015/0906/4053.html 二. 修改网络配 ...

  3. win10虚拟机搭建Hadoop集群(已完结)

    1 在虚拟机安装 Ubuntu 2 安装网络工具 Ubuntu最小化安装没有 ifconfig命令 sudo apt-get install net-tools 3 Ubuntu修改网卡名字 修改网卡 ...

  4. 配置ssh免密登录遇到的问题——使用VMware多虚拟机搭建Hadoop集群

    搭建环境: 虚拟机 VMware12Pro      操作系统  centos6.8        hadoop 1.2.1 1.导入镜像文件,添加java环境 1.查看当前系统中安装的java,ls ...

  5. 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

    之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...

  6. spark集群搭建(三台虚拟机)——hadoop集群搭建(2)

    !!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...

  7. 搭建Hadoop集群 (一)

    上面讲了如何搭建Hadoop的Standalone和Pseudo-Distributed Mode(搭建单节点Hadoop应用环境), 现在我们来搭建一个Fully-Distributed Mode的 ...

  8. 使用Windows Azure的VM安装和配置CDH搭建Hadoop集群

    本文主要内容是使用Windows Azure的VIRTUAL MACHINES和NETWORKS服务安装CDH (Cloudera Distribution Including Apache Hado ...

  9. 搭建Hadoop集群 (三)

    通过 搭建Hadoop集群 (二), 我们已经可以顺利运行自带的wordcount程序. 下面学习如何创建自己的Java应用, 放到Hadoop集群上运行, 并且可以通过debug来调试. 有多少种D ...

随机推荐

  1. dedecms织梦如何删除所有的文章?

    dedecms织梦如何删除所有的文章?dede一键删除所有文章的SQL命令:  DELETE FROM dede_addonarticle WHERE aid >= 1 and aid<= ...

  2. 【python】二进制、八进制、十六进制表示方法(3.0以上)

    2进制是以0b开头的: 例如: 0b11 则表示十进制的3 8进制是以0o开头的: 例如: 0o11则表示十进制的9 (与2.0版本有区别) 16进制是以0x开头的: 例如: 0x11则表示十进制的1 ...

  3. 搭建hive到eclipse里面

    (1)下载源码 git clone https://git-wip-us.apache.org/repos/asf/hive.git git clone https://github.com/apac ...

  4. 《C和指针》章节后编程练习解答参考——第8章

    8.1 #include <stdio.h> int main (void) { int a, b, c, d; // 不使用嵌套花括号初始化 unsigned ][][][] = { , ...

  5. iOS中的隐式动画

    隐式动画就是指  在 非 人为在代码中 定义动画  而系统却默认  自带   的动画  叫做隐式动画. 比如  改变 图层  的颜色  位置  和   透明度  的时候    都会  产生附带的渐变的 ...

  6. ALTER TABLE 语句与 FOREIGN KEY 约束"FK_SCHEDULE_REFERENCE_POSTCONF"冲突。

    主要原因是因为两个表中有数据不匹配,只要把不匹配的数据删掉就行了.

  7. [BZOJ 3669] [Noi2014] 魔法森林 【LCT】

    题目链接:BZOJ - 3669 题目分析 如果确定了带 x 只精灵A,那么我们就是要找一条 1 到 n 的路径,满足只经过 Ai <= x 的边,而且要使经过的边中最大的 Bi 尽量小. 其实 ...

  8. 我是如何学习NodeJs

    实际上在开始的时候我已经对NodeJS有了一定的了解. 比如我知道它是居于Javascript语言的服务器端web Server,比如我知道它的优势在于它的性能,而造成性能优异的原因在于高效的V8引擎 ...

  9. Occupy Cities

    hdu4606:http://acm.hdu.edu.cn/showproblem.php?pid=4606 题意:在一个二维坐标系中,有n个城市,坐标给出来了,然后有p个士兵要去占领这n个城市,但是 ...

  10. Python安装及开发环境配置

    Python的语法简洁,功能强大,有大量的第三方开发包(模块).同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方面的编程.根据codeeval网站数据统计显示,连续三年,Py ...