设为首页 收藏本站
查看: 1054|回复: 0

[经验分享] virtualbox ubuntu hadoop-1.0.4 完全分布式

[复制链接]
发表于 2016-1-11 07:31:21 | 显示全部楼层 |阅读模式
主机操作系统:Ubuntu-12.04
虚拟机操作系统:Ubuntu-10.04.iso
虚拟机软件:Virtualbox-4.2.deb
 
ps:从evernote复制到iteye,图片都没有,查看完整版本,移动evernote共享:
https://www.evernote.com/pub/xuyuantree/10_hadoop
 
设置VirtualBox的Host-only网络
1. 安装虚拟机Virtualbox:
$ sudo dpkg -i virtualbox.deb
2. 在Ubuntu 12.04 下,打开VirtualBox,选择"管理"→"全局设定"→"网络"→"添加Host-only网络",
创建一个新的Host-only网络,名字为vboxnet0,点击"确定"。
默认情况下,vboxnet0的IP地址为192.168.56.1,IP网络掩码为255.255.255.0。默认DHCP服务器为禁用,即禁用DHCP服务。
PS:本机(主机,宿主机)采用无线上网,不需要配置etho。ifconfig可以查看vboxnet0的IP配置
vboxnet0
     inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0
 
创建虚拟机UB01
1. 新建虚拟机,名字为UB01,默认内存512M,硬盘大小8GB
2. 创建完虚拟机后,会在左侧菜单树上看到UB01,注意,不要马上启动虚拟机UB01
3. 设置UB01的网卡连接类型:选择"网络"→连接方式:Host-only Adapter,界面名称:vboxnet0,混杂模式:全部允许
4. 设置UB01安装介质:选择"存储"→"控制器:IDE",添加一个虚拟光驱,选择主机上的ubuntu-10.04.iso文件
5. 启动UB01,安装VM,设置用户名和密码时,统一都写成hadoop,安装完后会重新启动
 
设置网络IP地址
1. ifconfig默认情况下IP地址采用DHCP动态分配,要改为静态IP地址分配
$ sudo gedit /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.56.101
    netmask 255.255.255.0
    gateway 192.168.56.1     #vboxnet0网卡的ip地址是 192.168.56.1
    dns-nameservers 8.8.8.8
2. 配置DNS服务器,默认情况下使用host-only这个文件不存在。如果采用bridge等其他方式会有这个文件
$ sudo gedit /etc/resolv.conf  
nameserver 8.8.8.8
3. 重启网络
$ sudo /etc/init.d/networking restart
4. 查看IP地址是否设置成功
$ ifconfig
eth0    
     inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
5. 主机和虚拟机互ping
虚拟机终端:  ping 192.168.56.1
主机终端:     ping 192.168.56.101
 
虚拟机安装增强工具包
1. 在Virtualbox的UB01设置共享文件夹,目的是将主机中的文件拷贝到虚拟机中。
添加共享文件夹,固定分配。选择主机的download文件夹,选项为:自动挂载。
2. 安装增强工具,在启动UB01的虚拟机的菜单栏(不是Virtualbox的菜单栏),选择"安装增强工具包",
可以使用图形安装auto run,安装完后需要重启虚拟机,或者使用命令行方式:
mount /dev/cdrom           挂载光驱
cd /mnt/cdrom                 进入光盘
./VBoxLinuxAdditions.run  执行安装
reboot                               重启系统
3. 重启系统后,执行以下命令。增强工具包还可以全屏显示虚拟机。
mkdir /mnt/share    新建挂载点mountpoint
mount -t vboxsf download /mnt/share  挂载共享文件夹,download是在Virtualbox的UB01设置的共享文件夹的名称
cd /mnt/share
ls /mnt/share
 
虚拟机安装JDK和Hadoop
1. 在主机中解压JDK和HADOOP,在虚拟机的共享文件夹也能看到解压后的文件
tar -zxvf jdk1.7.0_04.tar.gz
tar -zxvf hadoop-1.0.4.tar.gz
2. 将jdk和hadoop复制到/home/hadoop下
cp -R /mnt/share/jdk1.7.0._04/home/hadoop
cp -R /mnt/share/hadoop-1.0.4/home/hadoop
不要采用sudo cp -R来复制命令,这样会以root用户运行,采用ls -l查看/home/hadoop复制后的jdk和hadoop,
发现用户和用户组都为root了,还需要更改为当前用户hadoop,hadoop这个用户是我们在安装虚拟机时指定的用户名
sudo chown hadoop jdk1.7.0_04   更改jdk文件夹的所属用户为hadoop.
sudo chgrp  hadoop jdk1.7.0_04   更改文件夹的所属用户组
3. 设置环境变量
$ sudo gedit /etc/profile
export JAVA_HOME=/home/hadoop/jdk1.7.0_04
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export HADOOP_HOME=/home/hadoop/hadoop-1.0.4
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
$ cd /home/hadoop/hadoop-1.0.4/conf
$ sudo gedit hadoop-env.sh
export JAVA_HOME=/home/hadoop/jdk1.7.0_04
4. 重新加载配置
source /etc/profile
5. 验证JDK和Hadoop安装成功
javac -version
hadoop version
复制虚拟机
1. 关闭UB01虚拟机,右击UB01虚拟机,选择"复制"
2. 填写新的虚拟机名字UB02
3. 选择"重新初始化所有网卡的MAC地址",点击"下一步"。
4. 选择"链接复制",点击复制。  选择链接复制,不需要完整复制UB01整个虚拟机
5. 新的虚拟机创建成功。
创建后,UB01会显示(UB01和UB02的链接基础),在"存储"→"控制器:IDE",会变为:VBoxGuestAdditions.iso
UB02的"存储"→"控制器:IDE",也是VBoxGuestAdditions.iso,"控制器:SATA"也采用UB01:UB01.vdi
以同样的方法再复制一个虚拟机UB03
 
修改主机名
在UB01中修改主机名,原先的主机名为hadoop,即安装虚拟机时指定的
$ sudo passwd root     为root用户设置密码
$ su                             以root用户身份登录
$ gedit /etc/hosts
将原先的
127.0.0.1 localhost
127.0.0.1 hadoop
更改为
127.0.0.1 localhost 
127.0.0.1 UB01
$ gedit /etc/hostname
UB01
$ hostname UB01
$ su - hadoop 
$ hostname                 查看主机名
UB01
同样对UB02和UB03修改主机名为UB02,UB03,并重启虚拟机。以下操作UB02和UB03是一样的。
 
主机,虚拟机互ping
1. 因为虚拟机UB02,UB03是从UB01复制过来的,只需要更改IP地址就可以了
首先删除UB02,UB03网络配置缓存文件
#rm /etc/udev/rules.d/70-persistent-net.rules
2. 重启UB02,UB03虚拟机
3. 修改UB02,UB03的IP地址
$ sudo gedit /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.56.102    # UB03修改为192.168.56.103
    netmask 255.255.255.0
    gateway 192.168.56.1 
    dns-nameservers 8.8.8.8
4. 重启网络
$ sudo /etc/init.d/networking restart
5. 查看IP地址是否设置成功
$ ifconfig
eth0    
     inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0
6. 主机和虚拟机,虚拟机和虚拟机互ping
UB02                            UB01                             UB03                            主机
ping 192.168.56.1         ping 192.168.56.1         ping 192.168.56.1         ping 192.168.56.101
ping 192.168.56.101     ping 192.168.56.102     ping 192.168.56.101     ping 192.168.56.102
ping 192.168.56.103     ping 192.168.56.103     ping 192.168.56.102     ping 192.168.56.103
7. 在UB01,UB02,UB03的/etc/hosts添加虚拟机的IP地址和主机名
192.168.56.101   UB01
192.168.56.102   UB02
192.168.56.103   UB03
这一步还要注意:安装虚拟机的时候会自动添加以下两行
127.0.0.1 localhost
127.0.0.1 UB01
要把第二行删除掉。注意:第一行不能删除。同样对UB02和UB03都做这样的处理。
8. 使用主机名来ping虚拟机
UB02                  UB01                 UB03
ping UB01          ping UB02          ping UB01
ping UB03          ping UB03          ping UB02
如果在宿主机的/etc/hosts加入7中的配置,则在宿主机也可以用主机名来ping虚拟机。或者在虚拟机加入192.168.56.1  main则虚拟机可以ping main来ping宿主机。
 
虚拟机上网
1. 下载firestarter软件,因为宿主机采用无线网络CMCC,你懂得。在首选项--防火墙--网络配置
Internet connected network device:选择无线设备(wlan0)
Local network connected device:选择未知设备(vboxnet0)
并勾选:Enable Internet connection sharing
2. 启动防火墙,虚拟机中就可以上网了(可以在firestarter的连接情况里查看到虚拟机的ip地址),就可以进行下面的步骤
3. 采用端口映射:在宿主机上增加一条iptables规则:每次重启宿主机,都需要重新设置这条iptables规则(iptables试了不行,不知道哪里出错了,暂不试验)
#iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE 
#因为vboxnet0是192.168.56.0/24网段的
 
SSH无密码验证
1. 分别在UB01,UB02,UB03下执行以下命令
$ sudo apt-get update                                                更新源
$ sudo apt-get install ssh rsync ssh-openserver          安装ssh
$ ssh-keygen -t rsa                                                     生成一个公钥和私钥对(一路回车)
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys           使hadoop用户不输入密码通过SSH访问localhost
$ ssh localhost                                                            验证安装是否成功(输入yes)
2. 生成的文件都会不一样。现在可以把三台虚拟机生成的密钥进行交换。
目的是把 UB01 的密钥交给UB02 和 UB03,对 UB02 和UB03 做同样处理。在有需要输入密码的地方输入hadoop
UB01
scp ~/.ssh/id_rsa.pub hadoop@UB02:/home/hadoop/.ssh/id_rsa.pub.UB01
scp ~/.ssh/id_rsa.pub hadoop@UB03:/home/hadoop/.ssh/id_rsa.pub.UB01
 
UB02
scp ~/.ssh/id_rsa.pub hadoop@UB01:/home/hadoop/.ssh/id_rsa.pub.UB02
scp ~/.ssh/id_rsa.pub hadoop@UB03:/home/hadoop/.ssh/id_rsa.pub.UB02
 
UB03
scp ~/.ssh/id_rsa.pub hadoop@UB01:/home/hadoop/.ssh/id_rsa.pub.UB03
scp ~/.ssh/id_rsa.pub hadoop@UB02:/home/hadoop/.ssh/id_rsa.pub.UB03
3. 完成后每一个虚拟机的 ~/.ssh/中应该有3 个密钥,一个是自己的,另两个是别人的,把自己的密钥连同别人的两个密钥加到授权密钥中
UB01
cat id_rsa.pub.UB02 >> authorized_keys
cat id_rsa.pub.UB03 >> authorized_keys
 
UB02
cat id_rsa.pub.UB01 >> authorized_keys
cat id_rsa.pub.UB03 >> authorized_keys
 
UB03
cat id_rsa.pub.UB01 >> authorized_keys
cat id_rsa.pub.UB02 >> authorized_keys
4. 每台虚拟机的密钥authorized_keys的格式如下,当然因为cat << 添加的顺序会不同
ssh-rsa AAAA............
  .................== hadoop@UB01
ssh-rsa BBBB............
  .................== hadoop@UB02
ssh-rsa CCCC............
  .................== hadoop@UB03
5. 接下来检验相互之间是否可以通过 ssh实现无密码访问。访问成功会显示欢迎信息,初次访问需要 yes ,之后就可以不直接访问了。
UB01                UB02                UB03
ssh UB02          ssh UB01          ssh UB01
ssh UB03          ssh UB03          ssh UB02
和ping一样,如果要让虚拟机和宿主机互相ssh(比如宿主机也装了hadoop,并且把宿主机当做namenode和jobtracker),
同样要对宿主机进行上面的所有步骤,并且把宿主机的密钥和三个虚拟机的密钥交换。即宿主机和虚拟机的密钥包含了4对。注意宿主机的用户也必须是hadoop。
 
Hadoop完全分布式模式
1. 修改hadoop配置文件core-site.xml mapred-site.xml hdfs-site.xml masters slaves
$ cd /home/hadoop/hadoop-1.0.4/conf
$ sudo gedit core-site.xml
<configuration>  
     <property>    
          <name>fs.default.name</name>    
          <value>hdfs://UB01:9000</value>     
     </property>    
      <property>
          <name>hadoop.tmp.dir</name>
          <value>/home/hadoop/tmp</value>
     </property>
</configuration>
$ sudo gedit hdfs-site.xml
<configuration>    
     <property>     
          <name>mapred.job.tracker</name>    
          <value>UB01:9001</value>     
     </property>    
</configuration>
$ sudo gedit mapred-site.xml
<property>  
     <name>dfs.replication</name>  
     <value>2</value>  
</property> 
$ sudo gedit masters
UB01
$ sudo gedit slaves
UB02
UB03
2. 节点中所有虚拟机关于hadoop的配置都是一样的,可以直接复制整个文件夹,在UB01中操作
scp -r hadoop-1.0.4 UB02:~/
scp -r hadoop-1.0.4 UB03:~/
这样就把UB01:~/hadoop-1.0.4(即/home/hadoop/hadoop-1.0.4)复制到UB02和UB03的对应目录下即都是/home/hadoop/hadoop-1.0.4
 
3. 在UB01中进行格式化分布式文件系统
$ bin/hadoop namenode -format
查看打印的日志,host = UB01/192.168.56.101 如果/etc/hosts中有127.0.0.1 localhost这一行,则这里的host = UB01/127.0.0.1
4. 启动守护进程
$ bin/hadoop start-all.sh
同样在UB01中操作,注意:在UB02和UB03中不需要进行任何操作。
因为masters和slaves说明了主节点和从节点,start-all命令会自动启动从节点上的datanode进程和tasktracker进程
 
从节点UB02和UB03只有两个进程DataNode TaskTracker。同样还可以看到生成了tmp文件夹,这个路径是在core-site中指定的hadoop.tmp.dir
5. 现在可以使用浏览器查看,可以在宿主机添加UB01,UB02,UB03的IP地址和主机名,因为宿主机能ping通所有的虚拟机
192.168.56.101   UB01
192.168.56.102   UB02
192.168.56.103   UB03
这样在宿主机就可以使用主机名来访问,当然也可以在各个虚拟机中使用浏览器访问
6. NameNode
http://ub01:50030
http://ub01:50070
 
7. DataNode
http://ub02:50060
http://ub02:50060
 
Hadoop单词统计示例
下面来试验下hadoop自带的统计单词的例子
我们将conf下以xml结尾的文件复制到HDFS中,使用自带的example.jar来运行MapReduce程序
注意:这里的路径/input /output都是HDFS分布式文件系统中的文件格式。当然也可以写成input output相对路径的形式
$ cd hadoop-1.0.4/conf
$ hadoop dfs -mkdir /input
$ hadoop dfs -put *.xml /input
$ cd ..
$ hadoop jar hadoop-example-*.jar wordcount /input /output
执行hadoop dfs -mkdir /input会在HDFS的根目录生成input文件夹。执行最后一个命令会在根目录生成output文件夹
可以打开http://ub01:50070,点击Browse the filesystem可以看到在根目录下有home,input,output三个文件夹
点击output,进入part-r-00000可以看到最终的结果。以who为例,统计出了3个
 
为了验证MapReduce是否工作正常,我们使用Linux的脚本来验证
$ grep -o 'who' *.xml | wc -l
3
 
 
参考文档
使用Virtualbox部署OpenStack: http://wiki.stacklab.org/doku.php?id=stacklab:documentation:use-virtualbox-install-openstack
VirtualBox环境下基于多台ubuntu虚拟机的Hadoop分布式计算环境搭建(host-only):http://blog.csdn.net/xiaoyao3857/article/details/8125289
详细 完整分布模式安装hadoop VirtualBox 3虚拟机 简单复制(桥接):http://f.dataguru.cn/thread-18125-1-1.html
 
virtualbox 共享文件夹:http://www.cnblogs.com/52linux/archive/2012/03/07/2384381.html
ubuntu下virtualbox配置host-only网络:http://www.cnblogs.com/xiangzi888/archive/2012/07/05/2578536.html
 
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-162733-1-1.html 上篇帖子: 关于virtualbox运行时报cannot access the kernel driver 的一个解决方法 下篇帖子: 在XP下为VirtualBox虚拟机中的Ubuntu10.10安装增强功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表