用了这么久的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. 2013年12月26日 星期四 doxygen入门--很好

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  2. Activity生命周期回顾

    先来一张经典的生命周期图: ------------------------------------------------------------- 工程代码: ActivityLifeCycle. ...

  3. ASP.NET 后台不识别ASPX中的控件

    请问后台不识别ASPX中的控件,怎么解决 这个程序是在网上下载的 C# code <asp:DataGrid runat="server" ID="dgList1& ...

  4. smali 语法之try catch语句

    # virtual methods .method public onClick(Landroid/view/View;)V .locals 4 .parameter "v" .p ...

  5. SQLSERVER 中GO的作用详解

    具体不废话了,请看下文详解. ? 1 2 3 4 5 6 7 8 9 10 use db_CSharp go  select *,  备注=case  when Grade>=90 then ' ...

  6. BZOJ 1002 轮状病毒

    Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...

  7. Stanford Parser学习入门(1)-Eclipse中配置

    Stanford Parser是斯坦福大学研发的用于语法分析的工具,属于stanford nlp系列工具之一.本文主要介绍Standfor Parser的入门用法. 在Stanford官方网站下载最新 ...

  8. 用JQUERY的deferred异步按顺序调用后端API

    花了两天啊,想办法. 顺便,DJANGO分页的东东也熟悉了下. 如果不用最新的deferred这个东东,那我们以前传统的链式异步调用代码很难看,且长. 以下这个东东未作优化代码封装. this的参数用 ...

  9. Spring REST

    前面介绍过Spring的MVC结合不同的view显示不同的数据,如:结合json的 view显示json.结合xml的view显示xml文档.那么这些数据除了在WebBrowser中用JavaScri ...

  10. Trailing return types

    Trailing return types是C++11关于函数声明的语言特性之一,旨在解决模版编程遇到的语法相关的问题,先看一个简单例子,感受一下什么是trailing return types: C ...