CI服务器搭建

CI服务器

CI服务器,持续集成服务器,通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。本文搭建基于 Docker+Jenkis+Sonar+Nexus 的CI服务器。

环境准备

Docker环境准备(略),确信docker服务已安装并且docker命令可执行。

    sudo docker

Nexus安装

1.安装

    sudo docker search nexus

找到sonatype/nexus

    sonatype/nexus                       Sonatype Nexus                                  51                   [OK]
    sudo docker pull sonatype/nexus

下载image完成后,启动nexus

    sudo docker run -d -p 8081:8081 --name sonatype-nexus -v /app/nexus-data/sonatype-work:/sonatype-work sonatype/nexus:oss 

映射容器8081端口和数据存放目录/sonatype-work 到宿主机器上。

2.配置

访问 http://nexus:8081 默认管理员账号admin/admin123登录。

http://nexus:8081

Jenkins安装

1.安装

    sudo docker search jenkins

找到官方image

    jenkins                               Official Jenkins Docker image                   553       [OK]     
    sudo docker pull jenkins

下载image完成后,启动jenkins

    sudo docker run --name jenkins -d -u root -p 8080:8080 -v /app/jenkins_home:/var/jenkins_home jenkins

映射容器8080端口和数据存放目录/var/jenkins_home 到宿主机器上。

2.配置

访问 http://jenkins:8080

http://jenkins:8080

Read More

Hadoop做文件服务器POC<3>Nginx文件缓存

安装Nginx

  1. 下载Nginx

     $ cd /app/nginx
     $ Wget http://nginx.org/download/nginx-1.7.11.tar.gz
    
  2. 编译Nginx

     $ cd /app/nginx
     $ tar zvxf nginx-1.7.11.tar.gz
     $ cd nginx-1.7.11
     $ .configure
    
  3. 安装Nginx

     $ make & make install
    

配置反向代理

  1. 修改配置文件

         $ cd /usr/local/nginx
         $ vi ./conf/nginx.conf
    
  2. 添加以下代码到server>location / 中

         add_header 'Access-Control-Allow-Origin' '*';
         add_header 'Access-Control-Allow-Credentials' 'true';
         add_header 'Access-Control-Allow-Methods' 'GET';
         proxy_pass http://192.168.55.64:8002/HDFSWeb/;
    
  3. 保存配置

配置文件缓存

  1. 修改配置文件

         $ cd /usr/local/nginx
         $ vi ./conf/nginx.conf
    
  2. 添加以下代码到server 中

       ##cache##
       proxy_connect_timeout 5;
       proxy_read_timeout 60;
       proxy_send_timeout 5;
       proxy_buffer_size 16k;
       proxy_buffers 4 64k;
       proxy_busy_buffers_size 128k;
       proxy_temp_file_write_size 128k;
       proxy_temp_path /home/temp_dir;
       proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
       ##end##
    
  3. 添加以下代码到server 中

       proxy_redirect off;
       proxy_set_header Host $host;
       proxy_cache cache_one;
       proxy_cache_valid 200 302 1h;
       proxy_cache_valid 301 1d;
       proxy_cache_valid any 1m;
       expires 30d;
    
  4. 保存配置

启动Nginx

     $ /usr/local/nginx/sbin/nginx

测试

  1. 点击文件下载
    使用的是反向代理地址

  2. 下载完成查看缓存目录

     $ cd /home/cache
    

    查看缓存文件

     -rw-------. 1 nobody nobody 8212493 Mar 31 17:27 91aa96dab8d300dc81295f78552a4a0a
    

vi查看文件内容

POC过程中的疑问

  1. Hadoop是否适合做分布式文件服务器?
    作为分布式文件系统,hadoop默认的文件存储块大小为64M,而对于作为文件服务器存放小文件,会极大浪费系统资源。如果调整默认存储块大小,那么对于其它基于hadoop服务的应用会不会受到影响。
  2. 作为分布式文件服务器性能测试。
    性能测试尚未完成。

Hadoop做文件服务器POC<2>服务开发

Eclipse配置

  1. 新建Maven项目
    选择webapp项目
    配置项目

  2. 配置pom.xml

     <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>cn.com.git</groupId>
       <artifactId>HDFSWeb</artifactId>
       <packaging>war</packaging>
       <version>0.0.1-SNAPSHOT</version>
       <name>HDFSWeb Maven Webapp</name>
       <url>http://maven.apache.org</url>
       <dependencies>
         <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-common</artifactId>
             <version>2.6.0</version>
         </dependency>
          <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-hdfs</artifactId>
             <version>2.6.0</version>
         </dependency>
       </dependencies>
       <build>
         <finalName>HDFSWeb</finalName>
       </build>
     </project>
    

代码开发

  1. 编写HDFSUtil
    新建HDFSUtil

    上传文件

         /**
          * 用输入流上传文件到HDFS
          * 
          * @param is
          * @param remoteName
          * @return
          * @throws Exception
          */
         public int upload(InputStream is, String remoteName) throws Exception {
             FileSystem fs = null;
             try {
                 fs = FileSystem.get(URI.create(HDFS), conf);
                 OutputStream outStream = fs.create(new Path(remoteName), new Progressable() {
                     public void progress() {
                         System.out.print('.');
                     }
                 });
                 logger.info("开始上传: " + remoteName);
                 IOUtils.copyBytes(is, outStream, 4096000, true);
                 logger.info("上传结束!");
                 is.close();
                 return 0;
             } catch (IOException e) {
                 is.close();
                 e.printStackTrace();
                 return -1;
             }
         }
    
         /**
          * 上传文件到HDFS
          * 
          * @param localName
          * @param remoteName
          * @return
          * @throws Exception
          */
         public int upload(String localName, String remoteName) throws Exception {
             InputStream is = new BufferedInputStream(new FileInputStream(localName));
             return upload(is, remoteName);
         }
    

    下载文件

         /**
              * HDFS上下载文件并返回文件流
              * 
              * @param hadoopFile
              * @return
              * @throws Exception
              */
             public FSDataInputStream download(String hadoopFile) throws Exception {
                 FSDataInputStream iStream = null;
                 FileSystem fs = null;
                 fs = FileSystem.get(URI.create(HDFS), conf);
                 Path path = new Path(hadoopFile);
                 iStream = fs.open(path);
                 return iStream;
             }
    

    删除文件

             /**
              * 删除HDFS文件
              * 
              * @param hadoopFile
              * @return
              */
             public boolean deleteFile(String hadoopFile) {
                 try {
                     FileSystem fs = FileSystem.get(URI.create(HDFS), conf);
                     Path path = new Path(hadoopFile);
                     fs.delete(path, true);
                     fs.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                     return false;
                 }
                 return true;
             }
    

    显示文件夹文件列表

             /**
              * 显示文件夹中文件列表
              * 
              * @param folder
              * @return 文件列表对象
              * @throws Exception
              */
             public FileStatus[] list(String folder) throws Exception {
                 Path path = new Path(folder);
                 FileSystem fs = FileSystem.get(URI.create(HDFS), conf);
                 return fs.listStatus(path);
             }
    
             /**
              * 显示文件夹中文件列表并打印
              * 
              * @param folder
              * @throws Exception
              */
             public void ls(String folder) throws Exception {
                 Path path = new Path(folder);
                 FileSystem fs = FileSystem.get(URI.create(HDFS), conf);
                 FileStatus[] list = fs.listStatus(path);
                 for (FileStatus f : list) {
                     System.out.printf("name: %s, folder: %s, size: %d\n", f.getPath(), f.isDir(), f.getLen());
                 }
             }    
    
  2. 前端页面
    WebContent目录

    Web页面

Web部署

  1. 应用打包成war

     Eclipse>File>Export>Web>war file>HDFSWeb.war
    
  2. 部署到weblogic 11g

     Weblogic Console>部署>new>upload war>finish>激活更改>启动HDFSWeb    
    
  3. 查看部署结果
    Web页面

测试HDFS上传和下载

测试
测试上传
测试下载

Hadoop做文件服务器POC<1>环境准备

硬件准备

机器名 IP 硬件配置 操作系统
nimbus 192.168.55.173 4cpu 2.93GHz 4G内存 Linux x86_64
supervisor1 192.168.55.174 4cpu 2.93GHz 4G内存 Linux x86_64
supervisor2 192.168.55.175 4cpu 2.93GHz 4G内存 Linux x86_64

软件准备

三台虚拟机,一台作为Hadoopnamenode,另外两台做Hadoopdatanode

基本软件安装

三台机器必备安装软件,jdk、hadoop

Jdk1.7.0_15安装

  1. 下载JDK

     $ wget http://download.oracle.com/otn-pub/java/jdk/8u31-b13/jdk-7u15-linux-x64.tar.gz
    
  2. 解压JDK

     tar zvxf jdk-7u15-linux-x64.tar.gz
    
  3. 设置环境变量

     $ set PATH=/your_jdk_unzip_dir/jdk1.7.0_15/bin:$PATH
     $ set JAVA_HOME=/your_jdk_unzip_dir/jdk1.7.0_15
    
  4. 验证Jdk版本

     $ jdk -version
    

Hadoop2.6.0安装

  1. 下载Hadoop

     $ wget http://apache.fayea.com/hadoop/common/stable/hadoop-2.6.0.tar.gz
    
  2. 切换root用户添加Hadoop用户

     $ groupadd hadoop  
     $ useradd hadoop hadoop  
     $ passwd  hadoop  #为用户添加密码   可以不设置密码  
    
  3. 安装ssh

     $ rpm -qa |grep ssh  #检查是否装了SSH包  
     $ yum install openssh-server  # 安装ssh  
     $ chkconfig --list sshd #检查SSHD是否设置为开机启动  
     $ chkconfig --level 2345 sshd on  #如果没设置启动就设置下.  
     $ service sshd restart  #重新启动  
    
  4. 配置ssh无密码登录

     nimbus$ ssh-keygen -t rsa
     nimbus$ ssh-copy-id hadoop@nimbus
     nimbus$ ssh-copy-id hadoop@supervisor1
     nimbus$ ssh-copy-id hadoop@supervisor2
    

    然后用scp命令,把公钥文件发放给slaver

     nimbus$ scp .ssh/id_rsa.pub hadoop@supervisor1:/home/hadoop/id_rsa_01.pub
     nimbus$ scp .ssh/id_rsa.pub hadoop@supervisor2:/home/hadoop/id_rsa_01.pub
    

    测试无密码登录

     $ ssh nimbus
     $ ssh supervisor1
     $ ssh supervisor2
    
  5. 安装hadoop

     $ tar vxzf hadoop-2.6.0.tar.gz
    

    修改hadoop配置文件
    slaves

     $vi etc/hadoop/slaves
     supervisor1
     supervisor2
    

    core-site.xml

     $vi etc/hadoop/core-site.xml
     <configuration>
            <property>
                     <name>fs.defaultFS</name>
                     <value>hdfs://nimbus:8020</value>
            </property>
            <property>
                     <name>io.file.buffer.size</name>
                     <value>131072</value>
             </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>file:/app/hadoop/tmp</value>
                    <description>Abase for other temporary   directories.</description>
            </property>
             <property>
                    <name>hadoop.proxyuser.u0.hosts</name>
                    <value>*</value>
            </property>
            <property>
                    <name>hadoop.proxyuser.u0.groups</name>
                    <value>*</value>
            </property>
     </configuration>
    

    hdfs-site.xml

     $vi etc/hadoop/hdfs-site.xml
     <configuration>
           <property>
                     <name>dfs.namenode.secondary.http-address</name>
                    <value>nimbus:9001</value>
            </property>
          <property>
                  <name>dfs.namenode.name.dir</name>
                  <value>file:/app/hadoop/dfs/name</value>
            </property>
           <property>
                   <name>dfs.datanode.data.dir</name>
                   <value>file:/app/hadoop/dfs/data</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>3</value>
             </property>
             <property>
                      <name>dfs.webhdfs.enabled</name>
                       <value>true</value>
              </property>
     </configuration>
    

    mapred-site.xml

     $vi etc/hadoop/mapred-site.xml
     <configuration>
         <property>
             <name>mapreduce.framework.name</name>
             <value>yarn</value>
         </property>
         <property>
           <name>mapreduce.jobhistory.address</name>
           <value>nimbus:10020</value>
         </property>
         <property>
           <name>mapreduce.jobhistory.webapp.address</name>
           <value>nimbus:19888</value>
         </property>
         <property>
         <name>dfs.permissions</name>
         <value>false</value>
         </property>
     </configuration>
    

    同步hadoop目录到supervisor和supervisor2

     $ scp hadoop/* -R hadoop@supervisor1:/app/hadoop/
     $ scp hadoop/* -R hadoop@supervisor2:/app/hadoop/
    
  6. 启动hadoop

     $ ./sbin/start-all.sh
     This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
     15/03/30 17:50:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
     Starting namenodes on [nimbus]
     nimbus: starting namenode, logging to /app/hadoop/logs/hadoop-hadoop-namenode-nimbus.out
     supervisor2: starting datanode, logging to /app/hadoop/logs/hadoop-hadoop-datanode-supervisor2.out
     supervisor1: starting datanode, logging to /app/hadoop/logs/hadoop-hadoop-datanode-supervisor1.out
     Starting secondary namenodes [nimbus]
     nimbus: starting secondarynamenode, logging to /app/hadoop/logs/hadoop-hadoop-secondarynamenode-nimbus.out
     15/03/30 17:50:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
     starting yarn daemons
     starting resourcemanager, logging to /app/hadoop/logs/yarn-hadoop-resourcemanager-nimbus.out
     supervisor2: starting nodemanager, logging to /app/hadoop/logs/yarn-hadoop-nodemanager-supervisor2.out
     supervisor1: starting nodemanager, logging to /app/hadoop/logs/yarn-hadoop-nodemanager-supervisor1.out
    

    查看进程

     nimbus$ jps
     10775 Jps
     10146 NameNode
     10305 SecondaryNameNode
     10464 ResourceManager
    
     supervisor1$ jps
     4308 Jps
     4094 NodeManager
     3993 DataNode
    
     supervisor2$ jps
     4308 Jps
     4094 NodeManager
     3993 DataNode    
    

    查看管理页面
    http://192.168.55.173:50070/

    http://192.168.55.173:8088/

Docker学习<3>部署一个Web应用

部署一个web应用

  1. 下载jetty镜像

     $ docker pull jetty
     jetty     9        3f468c596b78        2 days ago          344.1 MB
    

    大概300M+,包括OpenJdk1.7 和操作系统

  2. 官方文档 Jetty registry

     $ docker run -d jetty
    

    测试 http://container-ip:8080 可以看到 jetty 已经运行,如果你想使用host的端口请做如下端口映射:

     $ docker run -d -p 8888:8080 jetty
    

    现在可以用 Docker host 的 ip 和端口 8888 来测试 jetty

     $curl http://docker-host-ip:8888
     <HTML>
     <HEAD>
     <TITLE>Error 404 - Not Found</TITLE>
     <BODY>
     <H2>Error 404 - Not Found.</H2>
     No context on this server matched or handled this request.<BR>Contexts known to this server are: <ul></ul><hr><a href="http://eclipse.org/jetty"><img border=0 src="/favicon.ico"/></a>&nbsp;<a href="http://eclipse.org/jetty">Powered by Jetty:// Java Web Server</a><hr/>
    

    jetty镜像的默认环境配置:

     $ docker run -i -t jetty env
     PATH=/usr/local/jetty/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
     HOSTNAME=9a862391d719
     TERM=xterm
     JAVA_VERSION=7u75
     JAVA_DEBIAN_VERSION=7u75-2.5.4-2
     JETTY_HOME=/usr/local/jetty
     JETTY_MAJOR=9
     JETTY_VERSION=9.2.10.v20150310
     JETTY_TGZ_URL=http://eclipse.org/downloads/download.php?r=1&file=/jetty/stable-9/dist/jetty-distribution-9.2.10.v20150310.tar.gz
     JETTY_BASE=/var/lib/jetty
     JETTY_RUN=/run/jetty
     JETTY_STATE=/run/jetty/jetty.state
     TMPDIR=/tmp/jetty
     HOME=/root    
    

    Webapps 被部署在容器内的 /var/lib/jetty/webapps.
    挂载 Docker Host 上的目录到容器内:

     $ docker run -d  -v /tmp/webapps:/var/lib/jetty/webapps -p 8080:8080 jetty
    

    挂载 Docker Host上的 /tmp/webapps 到容器的 /var/lib/jetty/webapps 目录并映射 Host 上8080端口到容器的 8080 端口。
    下面部署webapp/tmp/webapps 中,建立一个Web Project:jetty-webapp-test,在web根目录添加两个测试文件 index.jspindex.html,打包成 jetty-webapp-test.war。把war包移动到Docker Host/tmp/webapps 下:

     $ curl http://localhost:8080/jetty-webapp-test/index.html
     <!DOCTYPE html>
     <html>
     <head>
     <meta charset="UTF-8">
     <title>index.html</title>
     </head>
     <body>
     这是一个测试html!
     </body>
     </html>
     $ curl http://localhost:8080/jetty-webapp-test/index.jsp
     <html>
     <body>
     <h2>Hello World!</h2>
     hello world!
    

    部署完成。

Docker学习<2>入门

教程示例

入门教程

  1. 搜索可用的docker镜像

     $ docker search tutorial
     NAME                                       DESCRIPTION   STARS     OFFICIAL   AUTOMATED
     learn/tutorial                                           8                    
     caterpillar/java-tutorial                                2                    
     caterpillar/python-tutorial                              2                    
     florentbenoit/docker-angularjs-tutorials                 1                    [OK]
     fabioberger/dockerize-tutorial                           0                    [OK]
     tobegit3hub/tutorial-beego                               0                    [OK]
     wonderlamb/tutorial                        Tutorial      0                    
     kedarvaidya/rails-tutorial-v3-dev                        0                    [OK]
    

    找到 learn/tutorial,官方入门示例。

  2. 下载容器镜像

     $ docker pull learn/tutorial
     Pulling repository learn/tutorial
     8dbd9e392a96: Downloading [=================>                                 ]    20 MB/58.34 MB 7m40s
    
  3. docker容器中运行hello world!

     $ docker run learn/tutorial echo "hello word"
     hello word
    
  4. 在容器中安装新的程序

     $ docker run learn/tutorial apt-get install -y ping
    

    在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。

  5. 保存对容器的修改

     $ docker ps -l
     CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS               NAMES
     942f628e4d4f        learn/tutorial:latest   "ping www.sina.com.cn   7 seconds ago                                               modest_heisenberg   
     $ docker commit 942 learn/ping
     94015fcbbe9bdf9d788ba2085de6d7409cf9cf52a7899fa3313363505fb949bc
     $ docker images
     REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
     learn/ping          latest              94015fcbbe9b        15 seconds ago      128 MB
     centos              7                   88f9454e60dd        2 weeks ago         223.9 MB
     centos              centos7             88f9454e60dd        2 weeks ago         223.9 MB
     centos              latest              88f9454e60dd        2 weeks ago         223.9 MB
     learn/tutorial      latest              8dbd9e392a96        23 months ago       128 MB
    

    首先使用docker ps -l命令获得安装完ping命令之后容器的id。然后把这个镜像保存为learn/ping

  6. 运行新的镜像

     $docker run learn/ping ping www.sina.com.cn
    

网上对Docker的理解

  1. 每个container中运行的进程,是的的确确运行在host上的(用ps 可以查看的到), 这样的话,无论你的镜像是基于ubuntu, centos, 还是debian的,都是运行在主机内核上的(container中没有自己的内核)。也就是说如果主机内核不满足需求,container中的依赖此特性的应用程序就无法运行

  2. Image的分层,可以想象成photoshop中不同的layer。每一层中包含特定的文件,当container运行时,这些叠加在一起的层就构成了container的运行环境(包括相应的文件,运行库等,不包括内核)。Image通过依赖的关系,来确定整个镜像内到底包含那些文件。之后的版本的docker,会推出squash的功能,把不同的层压缩成为一个,和Photoshop中合并层的感觉差不多。

  3. Docker中的镜像就是一堆文件的集合,并不是像VM那样的是一个操作系统。镜像可以简单到只有一个程序文件。如果你写一个helloworld 静态编译后放到一个空的Image中(可以用FROM scratch作为基础镜像),那么整个image的大小,就是你编译后的二进制文件的大小。 如果你不是静态编译的话,就要把相应的链接库放到镜像中相应的位置,才能使得程序正确运行,否则会提示找不到文件。官方提供的ubuntu等基础镜像,就是把依赖的文件放到正确的地方,从而使得绝大部分程序可以正常运行。和VM的镜像是完全不同的概念

  4. Docker能够限制container使用的主机资源。lxc containerdocker最早版本的运行环境,现在他们默认采用libcontainer,今后估计会逐步减少lxc container的支持。如果要限制cpu和memory,在docker run 中直接使用-c -m参数即可。个人认为,这只是限制了container的资源,并不能够保证container能够确实分到足够的资源。当然,如果你的所有程序都是运行在container中,并且都限制好资源的话,那么应该还是可以满足你的需求的。每台host中,可以同时运行上百个container,互不干扰。每个container只是一个host中的进程,很轻量化。VM就不能做到同时运行这么多。编程接口,docker提供了Remote API和python library(docker-py), 同时还有github上还有很多第三方的库,支持不同的语言

相关资料

相关资源

Docker学习<1>环境准备

软件准备

Oracle VirtualBox4.3.6

CentOS-6.6-x86_64-minimal.iso

Docker 安装

  1. 确认你的CentOS 的版本
    首先通过以下命令确认你的CentOS 版本

     $ cat /etc/redhat-release 
     CentOS release 6.6 (Final)
    
  2. 下载EPEL 的rpm 安装包
    现在从上面的地址下载CentOS 版本所对应的EPEL 的版本

     $ wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
    
  3. 安装EPEL
    通过以下命令安装EPEL 软件包

     $ sudo rpm -ivh epel-release-6-8.noarch.rpm
    

    Read More

实时计算<2>最大回撤

最大回撤计算

描述:计算一批股票在一天的实时行情最大回撤值(绝对额)。
名词解释:最大回撤率,在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值。
最大回撤用来描述买入产品后可能出现的最糟糕的情况。最大回撤是一个重要的风险指标,对于对冲基金和数量化策略交易,该指标比波动率还重要。

要求

实时计算,每只股票处理延迟平均不超过50ms
计算结果持久化,可查询每只股票某天的最大回撤值。

数据准备

模拟5000只股票信息
模拟5000只股票一天的实时行情记录,每只股票暂定3秒抓取一次实时行情,那么每天应该有60/3×60×4=4800条行情记录。总记录数=4800×5000=2400万条行情记录。

Read More

实时计算<1>环境准备

硬件准备

机器名 IP 硬件配置 操作系统 软件配置
nimbus 192.168.55.173 4cpu 2.93GHz 4G内存 Linux x86_64 redis2.8、 storm0.9.1 nimbus/UI/DRPC、zookeeper3.4.6
supervisor1 192.168.55.174 4cpu 2.93GHz 4G内存 Linux x86_64 storm0.9.1 supervisor、zookeeper3.4.6
supervisor2 192.168.55.175 4cpu 2.93GHz 4G内存 Linux x86_64 storm0.9.1 supervisor、zookeeper3.4.6

软件准备

三台虚拟机,一台作为Storm的nimbus和redis数据库,另外两台做Storm的supervisor。

设置hosts文件

    vi /ets/hosts

如下

    127.0.0.1 nimbus
    192.168.55.173  nimbus
    192.168.55.174 supervisor1
    192.168.55.175 supervisor2

基本软件安装

三台机器必备安装软件,jdk、storm、zookeeper

Read More