《Storm实时数据处理》学习笔记之一:使用Vagrant配置本地集群(上)
来源:互联网 发布:virtualbox mac 10.11 编辑:程序博客网 时间:2024/05/29 14:28
1.5章节,主要讲解了如何通过vagrant工具来在本地模拟出一个集群。下面是相关重点:
0)准备工作:安装vagrant/virtualbox/puppet:
我使用的是ubuntu操作系统,直接在终端执行“sudo apt-get install virtualbox puppet vagrant”即可
puppet:集中配置管理系统,为操作系统和应用程序提供声明式服务器配置
vagrant:自动配置virtualbox虚拟机,用于创建和部署虚拟化开发环境
本章我们的目标就是要通过vagrant来搭建出一套storm集群环境,其中包含4台虚拟机,分别作为storm的nimbus, zookeeper和supervisor(2台)节点
1)建立项目目录结构:
对于本章来说,modules目录暂时不需要,可以先不用创建
2)在项目根目录下编辑Vagrantfile
0. 可以先执行vagrant init,会自动生成一个Vagrantfile,我个人推荐先把该文件阅读一遍,可以对Vagrantfile配置虚拟机的方式有个朦胧的了解,然后在该文件基础上进行修改
1. 定义虚拟机配置
将集群中所有的虚拟机配置放在一个boxes数组里面,后面直接从中获取:
boxes = [ { :name => :nimbus, :ip => '192.168.33.100', :cpus => 2, :memory => 512 }, { :name => :supervisor1, :ip => '192.168.33.101', :cpus => 4, :memory => 1024 }, { :name => :supervisor2, :ip => '192.168.33.102', :cpus => 4, :memory => 1024 }, { :name => :zookeeper1, :ip => '192.168.33.201', :cpus => 1, :memory => 512 }]
对应一台nimbus机器,两台supervisor机器和一台zookeeper机器的配置
2. 使用循环来配置虚拟机
boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.box = "precise64" config.vm.box_url = "http://files.vagrantup.com/precise64.box" config.vm.network :private_network, ip: opts[:ip] config.vm.host_name = "storm.%s" % opts[:name].to_s config.vm.synced_folder "./data", "/vagrant_data" config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", opts[:memory]] vb.customize ["modifyvm", :id, "--cpus", opts[:cpus] ] if opts[:cpus] end endend
3. 在循环中继续配置provision
vagrant强大的provision机制能帮助我们方便地安装和部署应用,这里我们会用到shell和puppet方式,主要目的是安装jdk6
config.vm.provision :shell, :inline => "cp -fv /vagrant_data/hosts /etc/hosts"config.vm.provision :shell, :inline => "apt-get update"if File.exist?("./data/jdk-6u45-linux-x64.bin") then config.vm.provision :puppet do |puppet| puppet.manifests_path = "manifests" puppet.manifest_file = "jdk.pp" endend
至此,本项目关于Vagrantfile文件的配置已经完成,在配置provision时我们发现还需要用到一个puppet脚本jdk.pp
4. 实现jdk.pp
在manifests目录下新增jdk.pp,通过puppet来为虚拟机安装指定的jdk
$JDK_VERSION = "1.6.0_45"package { "openjdk": ensure => absent,}exec { "installJdk": command => "installJdk.sh", path => "/vagrant/scripts", logoutput => true, creates => "/opt/jdk${JDK_VERSION}",}
这里原书中使用的jdk版本为jdk6u35,该版本目前oracle官网已经下载不到
但在实践时不敢冒然使用更高版本,怕后面会产生非预期的兼容性问题,因此在网上找了个jdk6u45,可以到http://ghaffarian.net/downloads/Java/JDK/下载
该puppet脚本调用了installJdk.sh来完成真正的安装流程,因此需要在scripts目录下新增installJdk.sh
<pre name="code" class="plain">#!/bin/shecho "Installing JDK!"chmod 775 /vagrant_data/jdk-6u45-linux-x64.bincd /rootyes | /vagrant_data/jdk-6u45-linux-x64.bin/bin/mv /root/jdk1.6.0_45 /optif [ -f /usr/bin/java ];then /bin/rm -rv /usr/bin/javafiif [ -f /usr/bin/javac ];then /bin/rm -rv /usr/bin/javacfi/bin/ln -s /opt/jdk1.6.0_45/bin/java /usr/bin/bin/ln -s /opt/jdk1.6.0_45/bin/javac /usr/binJAVA_HOME=/opt/jdk1.6.0_45export JAVA_HOMEPATH=$PATH:$JAVA_HOME/binexport PATHecho "JDK Installed!"执行前,确保将已经下载的jdk-6u45-linux-x64.bin放到data目录下
5. 在data目录下定义hosts文件
Vagrantfile的shell命令中还会用到hosts文件,该文件在本地集群环境中充当DNS
127.0.0.1 localhost192.168.33.100 storm.nimbus192.168.33.101 storm.supervisor1192.168.33.102 storm.supervisor2192.168.33.201 storm.zookeeper1
但是这里遇到一个比较大的坑:在实际执行到修改hosts以后,再执行后面的命令时会发现终端打印类似“sudo: unable to resolve host storm”的log
将hosts文件与原始文件进行对比,发现原因是缺少storm到本地ip的映射,我的解决方法是在Vagrantfile中再对hosts进行一下编辑
# 解决"unable to resolve host"的问题config.vm.provision :shell, :inline => "sed -i \"2 i 127.0.1.1 storm.%s storm\" /etc/hosts" % opts[:name].to_s
至此,我们已经完成了集群搭建的基础部分:模拟了一个拥有4台虚拟机的集群,并在每台机器上都安装了jdk6
在实际部署的时候,可能还会用到vagrant的常用参数,包括destroy,provision等等,用法在vagrant help中写得清楚,非常这里不再赘述
在实践时怎么保证我们的集群是否达到预期呢?我总结了以下几个办法:
1、 集群是否能够正常启动:回到项目根目录,执行"vagrant up"命令可以启动集群
2、 虚拟机是否能够登录:执行“vagrant ssh nimbus"可以登陆nimbus虚拟机上,也可以将"nimbus“替换为其它节点名称
3、 在nimbus虚拟机终端输入"hostname -f"命令,查看该主机名称,正确情况下应该显示“storm.nimbus"
4、 在虚拟机中输入"java -version”,验证jdk是否正确安装,预期会显示:
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
如果有问题,就根据错误日志多google一下,多看看stackoverflow,总能找到解决的方法!
- 《Storm实时数据处理》学习笔记之一:使用Vagrant配置本地集群(上)
- 《Storm实时数据处理》学习笔记之二:使用Vagrant配置本地集群(下)
- Twitter Storm安装配置(集群)笔记
- Twitter Storm安装配置(集群)笔记
- Twitter Storm安装配置(集群)笔记
- Storm实时大数据处理(一)
- Storm实时大数据处理(二)
- Storm实时大数据处理(三)
- maven 学习笔记 之一.本地安装配置
- windows上storm集群的配置
- storm笔记:storm集群
- 在线实时大数据平台Storm集群组件学习
- vagrant学习笔记 - 基本命令的使用
- storm学习笔记之一:storm 入门原理介绍
- Storm学习笔记-集群环境安装部署
- Apache Storm学习笔记一:创建Storm集群
- Apache Strom学习笔记三:在storm集群上运行拓扑
- Storm :twitter的实时数据处理工具
- 淘宝网上头买东西商家不发货也不给我退款怎么办
- 可递归锁与非递归锁
- java web文件下载功能实现
- JTA事务总结
- 软件工程的几个步骤
- 《Storm实时数据处理》学习笔记之一:使用Vagrant配置本地集群(上)
- 2014年下半年
- 判断10(or N)个实数最大值
- nyoj 23 取石子(一)
- php过滤特殊的字符串
- 华为机试:实现“十七进制”转“十进制”算法
- 求数组的子数组之和的最大值(分治法)
- hiddenHttpMethodFilter与enctype="multipart/form-data"冲突
- 菜鸟好文推荐(一)——程序员科学熬夜指南