如何使用vagrant在虚拟机安装Hadoop集群

2019-03-28 13:06|来源: 网络

vagrant 是一个非常好用的工具,可以用它来在单台物理机器编程管理多个虚拟机(vms)。其支持原生VirtualBox,并同时提供了对VMware Fusion、Amazon EC2虚拟机集群的插件支持。

vagrant提供了极易使用、基于Ruby的内部DSL,允许用户使用它们的配置参数定义一个或多个虚拟机。另外,对于自动部署,vagrant支持多种机制:可以使用puppet,chef或者用于在vagrant配置文件中定义的所有虚拟机上自动安装软件程序和配置的shell脚本等。

所以,使用vagrant可以在运行着多台vm的系统上定义复杂的虚拟框架,是不是很酷?

vagrant的典型使用案例是以简单并且一致的方式构建工作或者开发环境。在Eligotech(原作者公司)公司里,开发人员正在开发一个产品,目标是让用户简单的使用Apache Hadoop、CDH(Cloudera的开源版本)。开发人员经常是为了测试需要在机器上安装hadoop环境。他们发现vagrant在这方面是一个非常便利的工具。

一个vagrant配置文件的例子,你们可以自行测试。你需要下载并安装vagrant(帮助地址http://docs.vagrantup.com/v2/installation/index.html)和virtualBox。所有东西都安装完毕后即可复制粘贴下面的文本保存为Vagrantfile,并将其放到一个目录下,比如VagrantHadoop.这个配置文件假定你机器内存至少32G,如果不适合可以自行编辑该文件。

# -*- mode: ruby -*-
# vi: set ft=ruby :

$master_script = <<SCRIPT
#!/bin/bash
cat > /etc/hosts <<EOF
127.0.0.1      localhost

# The following lines are desirable for IPv6 capable hosts
::1    ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

10.211.55.100  vm-cluster-node1
10.211.55.101  vm-cluster-node2
10.211.55.102  vm-cluster-node3
10.211.55.103  vm-cluster-node4
10.211.55.104  vm-cluster-node5
10.211.55.105  vm-cluster-client
EOF

apt-get install curl -y
REPOCM=${REPOCM:-cm4}
CM_REPO_HOST=${CM_REPO_HOST:-archive.cloudera.com}
CM_MAJOR_VERSION=$(echo $REPOCM | sed -e 's/cm\\([0-9]\\).*/\\1/')
CM_VERSION=$(echo $REPOCM | sed -e 's/cm\\([0-9][0-9]*\\)/\\1/')
OS_CODENAME=$(lsb_release -sc)
OS_DISTID=$(lsb_release -si | tr '[A-Z]' '[a-z]')
if [ $CM_MAJOR_VERSION -ge 4 ]; then
  cat > /etc/apt/sources.list.d/cloudera-$REPOCM.list <<EOF
deb [arch=amd64] http://$CM_REPO_HOST/cm$CM_MAJOR_VERSION/$OS_DISTID/$OS_CODENAME/amd64/cm $OS_CODENAME-$REPOCM contrib
deb-src http://$CM_REPO_HOST/cm$CM_MAJOR_VERSION/$OS_DISTID/$OS_CODENAME/amd64/cm $OS_CODENAME-$REPOCM contrib
EOF
curl -s http://$CM_REPO_HOST/cm$CM_MAJOR_VERSION/$OS_DISTID/$OS_CODENAME/amd64/cm/archive.key > key
apt-key add key
rm key
fi
apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get -q -y --force-yes install Oracle-j2sdk1.6 cloudera-manager-server-db cloudera-manager-server cloudera-manager-daemons
service cloudera-scm-server-db initdb
service cloudera-scm-server-db start
service cloudera-scm-server start
SCRIPT

$slave_script = <<SCRIPT
cat > /etc/hosts <<EOF
127.0.0.1      localhost

# The following lines are desirable for IPv6 capable hosts
::1    ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

10.211.55.100  vm-cluster-node1
10.211.55.101  vm-cluster-node2
10.211.55.102  vm-cluster-node3
10.211.55.103  vm-cluster-node4
10.211.55.104  vm-cluster-node5
10.211.55.105  vm-cluster-client
EOF
SCRIPT

$client_script = <<SCRIPT
cat > /etc/hosts <<EOF
127.0.0.1      localhost

# The following lines are desirable for IPv6 capable hosts
::1    ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

10.211.55.100  vm-cluster-node1
10.211.55.101  vm-cluster-node2
10.211.55.102  vm-cluster-node3
10.211.55.103  vm-cluster-node4
10.211.55.104  vm-cluster-node5
10.211.55.105  vm-cluster-client
EOF
SCRIPT

Vagrant.configure("2") do |config|

  config.vm.define :master do |master|
    master.vm.box = "precise64"
    master.vm.provider "vmware_fusion" do |v|
      v.vmx["memsize"]  = "4096"
    end
    master.vm.provider :virtualbox do |v|
      v.name = "vm-cluster-node1"
      v.customize ["modifyvm", :id, "--memory", "4096"]
    end
    master.vm.network :private_network, ip: "10.211.55.100"
    master.vm.hostname = "vm-cluster-node1"
    master.vm.provision :shell, :inline => $master_script
  end

  config.vm.define :slave1 do |slave1|
    slave1.vm.box = "precise64"
    slave1.vm.provider "vmware_fusion" do |v|
      v.vmx["memsize"]  = "5120"
    end
    slave1.vm.provider :virtualbox do |v|
      v.name = "vm-cluster-node2"
      v.customize ["modifyvm", :id, "--memory", "5120"]
    end
    slave1.vm.network :private_network, ip: "10.211.55.101"
    slave1.vm.hostname = "vm-cluster-node2"
    slave1.vm.provision :shell, :inline => $slave_script
  end

  config.vm.define :slave2 do |slave2|
    slave2.vm.box = "precise64"
    slave2.vm.provider "vmware_fusion" do |v|
      v.vmx["memsize"]  = "5120"
    end
    slave2.vm.provider :virtualbox do |v|
      v.name = "vm-cluster-node3"
      v.customize ["modifyvm", :id, "--memory", "5120"]
    end
    slave2.vm.network :private_network, ip: "10.211.55.102"
    slave2.vm.hostname = "vm-cluster-node3"
    slave2.vm.provision :shell, :inline => $slave_script
  end

  config.vm.define :slave3 do |slave3|
    slave3.vm.box = "precise64"
    slave3.vm.provider "vmware_fusion" do |v|
      v.vmx["memsize"]  = "5120"
    end
    slave3.vm.provider :virtualbox do |v|
      v.name = "vm-cluster-node4"
      v.customize ["modifyvm", :id, "--memory", "5120"]
    end
    slave3.vm.network :private_network, ip: "10.211.55.103"
    slave3.vm.hostname = "vm-cluster-node4"
    slave3.vm.provision :shell, :inline => $slave_script
  end

  config.vm.define :slave4 do |slave4|
    slave4.vm.box = "precise64"
    slave4.vm.provider "vmware_fusion" do |v|
      v.vmx["memsize"]  = "5120"
    end
    slave4.vm.provider :virtualbox do |v|
      v.name = "vm-cluster-node5"
      v.customize ["modifyvm", :id, "--memory", "5120"]
    end
    slave4.vm.network :private_network, ip: "10.211.55.104"
    slave4.vm.hostname = "vm-cluster-node5"
    slave4.vm.provision :shell, :inline => $slave_script
  end

  config.vm.define :client do |client|
    client.vm.box = "precise64"
    client.vm.provider "vmware_fusion" do |v|
      v.vmx["memsize"]  = "4096"
    end
    client.vm.provider :virtualbox do |v|
      v.name = "vm-cluster-client"
      v.customize ["modifyvm", :id, "--memory", "4096"]
    end
    client.vm.network :private_network, ip: "10.211.55.105"
    client.vm.hostname = "vm-cluster-client"
    client.vm.provision :shell, :inline => $client_script
  end

end

相关问答

更多
  • 1、成一个虚拟硬件配置环境 2、加载ISO或使用物理光驱安装系统 3、启动虚拟系统进入光启状态 4、安装系统和真实机差不多 5、安装完成虚拟系统就可以使用了
  • 你只要按照了jdk后,就已经按照了java虚拟机。很简单的,下一步下一步就可以了。默认安装到C:\Program Files\Java 下面。很简单的。
  • 一楼说的,前一半对,后一半不太对(不叫做安装SSH) 通常SSH会在你装系统时就装好,顶多有的系统会在即将安装完时会有一个提示询问你是否在开机时启动SSH服务而已 SSH开启后会有一个进程SSHD在运行,可以用netstat -nap 命令查询得到,例如: $ netstat -nap | grep -i sshd tcp 0 0 :::22 :::* LISTEN 29391/sshd 客户端若想通过SSH协议以user身份登录某一台服务器(比如IP地址为1.2.3.4),则可以 ssh user@1.2 ...
  • 如果是为了在虚拟机中尝试软件安装,系统安装的话,建立试试微软的 virtual server 2005 R2 是免费的,简洁易用,不需要视频就能搞定。
  • hadoop可以配置伪分布式,只要一个linux,你这样,把IP改成不一样也行
  • 我有教程下载地址 有图有文字讲解还有虚拟机7.0安装包的下载地址: http://21.dc.ftn.qq.com/ftn_handler/35aaaf29136a772a68f01623644a03bdbde959700d5d70179c9c1bd2a52ca7e83cbef32f79ab6a587be62f205d4af14b51c430e6cfd5a88c9ec0bb7492e5726e/虚拟安装机教程.doc?k=7930353265e1bd9cf7fb152c4d63514c011f06025d0 ...
  • 你用什么虚拟机安装?用Virtualbox的话,比较方便。安装系统的时候,不要直接运行,选最后一项,安装到硬盘上,然后新建分区,格式化,之后会有一项建立SD卡,根据分区大小适当调整SD卡的大小。启动虚拟机后,如果联网了,就可以直接在虚拟机上网,下载软件,不过由于是虚拟机,有的软件可以安装,但很多游戏都无法安装。
  • 正如您引用Python和PyCharm作为语言和IDE一样,我将基于相同的示例。 PyCharm支持一种称为远程调试的功能,但这只适用于pycharm的专业版。 Pycharm有关于设置远程调试器的文档 。 我引用了这篇SO帖子的答案。 巩固所需的步骤 在要调试的远程服务器上上传并安装远程调试助手蛋(vagrant machine) 设置远程调试服务器运行配置:单击下拉运行配置菜单,选择编辑配置,单击+按钮,选择Python远程调试。 将本地主机名设置为笔记本电脑的IP地址,将端口设置为可在笔记本电脑上使用 ...
  • 编辑来自PuPHPet的Vagrant文件,使其与初始Vagrantfile具有相同的框定义。 需要相同的设置是config.vm.box 这应该会阻止下载另一个盒子,具体取决于你使用的盒子,不能保证PuPHPet会按预期工作。 Edit the Vagrantfile that came from PuPHPet to have the same box definition as your initial Vagrantfile. The setting that needs to be the sam ...