用了这么久的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. ThinkPHP HTML标签代码和UBB互相转换

    1.UBB 转为 HTML TP的扩展里面自带一个ubb方法,用这个方法就能把用户输入的ubb格式代码转换为HTML标签的代码.这里用到的基本知识就是正则表达式啦,今天先不讲正则表达式. 来看一下TP ...

  2. memcached在linux安装

    服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz另外,Memcache用到了lib ...

  3. Model Thinking1

    Why Model Reason # 1: Intelligent Citizen of the World Reason # 2: Clearer Thinker Reason # 3: Under ...

  4. Linux怪哉ntfs

    http://www.linuxidc.com/Linux/2013-08/88721.htm

  5. <转>SFTP 和FTPS的区别是什么?

    SFTP 和FTPS都是为ftp连接加密,协议非常相似. 一个是借助ssl协议加密,一个时借助ssh加密. ssl是为http/smtp等加密设计的,ssh是为telnet/ftp等加密.建立传输通道 ...

  6. 【HDOJ】4109 Instrction Arrangement

    差分约束. /* 4109 */ #include <iostream> #include <queue> #include <vector> #include & ...

  7. java学习面向对象之多态

    如何理解多态,让我们举个例子来描述一下,因为单纯的说多态大家可能不理解: abstract class Animal { ; abstract void eat(); public void run( ...

  8. 【转】Android编译系统详解(三)——编译流程详解

    原文网址:http://www.cloudchou.com/android/post-276.html 本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 1.概述 编译Androi ...

  9. (转载)PHP isset()函数作用

    (转载)http://www.cnblogs.com/neve/archive/2011/03/21/1990165.html isset函数是检测变量是否设置. 格式:bool isset ( mi ...

  10. 解决导入lib,关联源码问题

    关联源代码:在libs目录下新建文件,以jar包全名(包括.jar)为文件名称,以.properties结尾 在文件中新建键值对:src=jar包源代码绝对路径:根据提示将单斜线变成双斜线, 然后cl ...