用了这么久的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. Python核心编程2第四章课后练习

    4-1 Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的描述一下.      身份:对象的唯一标识      类型 :对象的类型决定了该对象可以保存什么类型的值       ...

  2. 解决delphi使用sqlite时中文最后一个字是乱码的问题

    给部门同事写了个自动生成测试用例执行情况图表的工具,使用的sqlite3,遇到中文分别使用UTF8Encode和UTF8Decode进行处理,可还是出现了某些字段从数据库中读出时,最后一个汉字是乱码的 ...

  3. Java操作Oracle数据库以及调用存储过程

    操作Oracle数据库 publicclass DBConnection {     //jdbc:oracle:thin:@localhost:1521:orcl     publicstaticf ...

  4. struts中如何将前台的值能在action中获取到

    如何获取值----三种方式(属性驱动,对象驱动,模型驱动)  A:属性驱动 必须生成get,set方法  B:对象驱动 给对象也必须生成get,set方法  c模型驱动 模型驱动需要action去实现 ...

  5. PHP 7.0 安装使用与性能监测!

    PHP 7.0发布,网上关于新版的介绍很多,介于 7.0 在正式发布之前已经发过若干个 Beta.8个 RC,应该不会出现重大问题.今日我将一台机器升级至 PHP 7.0 并将有关信息记录如下. 本人 ...

  6. 【HDU3440】House Man (差分约束)

    题目: Description In Fuzhou, there is a crazy super man. He can’t fly, but he could jump from housetop ...

  7. Spring MVC 中的REST支持

    本部分提供了支持 RESTful web 服务的主要 Spring 功能(或注释)的概述. @Controller 使用 @Controller 注释对将成为 MVC 中控制器的类进行注释并处理 HT ...

  8. java学习面向对象之异常之二

    我们知道当我们处理异常的时候,一个是声明,另外一个是捕捉. 捕捉:异常处理的捕捉方式,这是可以对异常进行针对性处理的方式.具体格式是: try { //需要被检测的异常 } catch(异常类 变量) ...

  9. C++11并发内存模型学习

    C++11标准已发布多年,编译器支持也逐渐完善,例如ms平台上从vc2008 tr1到vc2013.新标准对C++改进体现在三方面:1.语言特性(auto,右值,lambda,foreach):2.标 ...

  10. 大型系统OA--技术

    OA办公自动化系统--技术 1.由于涉及企业的流程控制与规则管理.所以系统对于规范要求的严谨性,导致在小型开发组在进行开发时必须基于成熟的技术架构.开源的lemon OA,采用了如下技术细节: mys ...