首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Vagrant中获取IP地址?

如何在Vagrant中获取IP地址?
EN

Stack Overflow用户
提问于 2014-04-30 02:42:11
回答 1查看 3K关注 0票数 4

我正在尝试配置一个Hadoop集群,但为此我需要namenode的ip地址。集群本身是由Vagrant创建的,但是直到vagrant在AWS中创建了实例,我才知道ip地址。因此,我有以下Vagrantfile

代码语言:javascript
复制
current_dir = File.dirname(__FILE__)

$master_script = <<SCRIPT
// will write a script to configure 
SCRIPT

Vagrant.configure("2") do |config|
  config.omnibus.chef_version = :latest

  config.vm.provider :aws do |aws, override|
    config.vm.box = "dummy"
    aws.access_key_id = "MY_KEY"
    aws.secret_access_key = "SECRET_KEY"
    aws.keypair_name = "my_key"
    aws.ami = "ami-7747d01e"
    override.ssh.username = "ubuntu"
    override.ssh.private_key_path = "#{current_dir}/my_key.pem"
  end

  config.vm.provider :virtualbox do |v|
      config.vm.box = "precise64"
      config.vm.box_url =  "https://vagrantcloud.com/chef/ubuntu-13.04/version/1/provider/virtualbox.box"
      v.customize ["modifyvm", :id, "--memory", "1024"]
  end

  config.vm.define :namenode do |namenode|
      namenode.vm.box = "dummy"
      namenode.vm.provision :chef_solo do |chef|
         chef.cookbooks_path = "cookbooks"
         chef.roles_path = "roles"
         chef.add_role "cluster"
      end
      namenode.vm.provision :hostmanager
      namenode.vm.provision "shell", :inline => $master_script
  end



config.vm.define :slave do |slave|
      slave.vm.box = "dummy"
      slave.vm.provision :chef_solo do |chef|
         chef.cookbooks_path = "cookbooks"
         chef.roles_path = "roles"
         chef.add_role "cluster"
      end
      slave.vm.provision :hostmanager
      slave.vm.provision "shell", :inline => $master_script
  end
end

我需要用namenode的ip address更新mapred-site.xml and core-site.xml文件。我如何才能获得namenode机器的ip地址,以便更新hadoop配置文件?在食谱中有没有更好的选择,我可以用来完成它?假设我有1个namenode和5个slavesmapred-site.xml.erb模板将如下所示:

代码语言:javascript
复制
<configuration>
   <property>
      <name>mapred.job.tracker</name>
      <value>hdfs://<%= node[:ipaddress] %>:8021</value>
   </property>
</configuration>

但是,我需要所有namenodeslaves只有namenode的ip地址。我如何在chef中做到这一点?无论哪种方式都适合我,尽管我更喜欢chef解决方案。

EN

回答 1

Stack Overflow用户

发布于 2014-04-30 07:16:01

您可以:

1-使用namenode实例上的实例元数据服务找出自己的ip:

代码语言:javascript
复制
curl http://169.254.169.254/latest/meta-data/local-ipv4

请参阅:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

2-标记命名节点(例如: HADOOP_ROLE=NAMENODE),并在任何实例上使用AWS CLI查找命名节点的本地ip:

代码语言:javascript
复制
aws ec2 describe-instances \
  --region=us-east-1 \
  --filter "Name=tag:HADOOP_ROLE,Values=NAMENODE" \
  --query='Reservations[*].Instances[*].PrivateIpAddress' \
  --output=text

请参阅:http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23372760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档