首先是作业在Storm系统中的部署。 ① 用户将作业打包(即将topology的代码组织为jar文件),通过Storm的客户端命令或者控制台节点的Web接口,提交至Storm系统的主控节点; ② 主控节点根据系统的全局配置和作业中的局部配置,将接收的代码分发至调度的工作节点; ③ 工作节点下载来自主控节点的代码包,并根据主控节点的调度生成相关的工作进程和线程。
8080端口是Jenkins web service的默认端口,将宿主机的端口映射到8080端口,可以直接访问
–name 命名为prod_jenkins2
-d 后台运行
-p 端口映射
-v 文件目录映射
查看
1 2 3
docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cb8cdf3be078 avery/jenkins "/bin/tini -- /usr/l…" 3 hours ago Exited (143) 3 hours ago prod_jenkins2
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE avery/centos-ssh-root latest ba72ccadf508 35 hours ago 776 MB
创建带有JDK的镜像
准备 下载JDK
此处使用JDK7u79
1 2 3 4
% mkdir centos-ssh-root-jdk % cd centos-ssh-root-jdk % cp ~/Download/jdk-7u79.tar.gz . % vi Dockerfile
Dockerfile文件
1 2 3 4 5 6 7 8 9 10 11
FROM avery/centos-ssh-root ADD jdk-7u79.tar.gz /usr/local/ RUN mv /usr/local/jdk1.7.0_79 /usr/local/jdk1.7 # 添加环境变量 ENV JAVA_HOME /usr/local/jdk1.7 ENV PATH $JAVA_HOME/bin:$PATH # 可能上面的设置不会生效 RUN echo 'JAVA_HOME=/usr/local/jdk1.7/' >> .bash_profile RUN echo 'PATH=$JAVA_HOME/bin:$PATH' >> .bash_profile RUN echo 'export JAVA_HOME' >> .bash_profile RUN echo 'export PATH' >> .bash_profile
创建镜像
1
docker build -t="avery/centos-ssh-root" .
查看镜像
1 2 3 4
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE avery/centos-ssh-root-jdk latest e773519d0452 34 hours ago 1.39 GB avery/centos-ssh-root latest ba72ccadf508 35 hours ago 776 MB
构建hadoop镜像
准备
官网下载 hadoop-2.7.3.tar.gz
1 2 3 4
% mkdir centos-ssh-root-jdk-hadoop % cd centos-ssh-root-jdk-hadoop % cp ../hadoop-2.7.3.tar.gz . % vi Dockerfile
Dockerfile
1 2 3 4 5 6 7 8 9 10 11
FROM avery/centos-ssh-root-jdk ADD hadoop-2.7.3.tar.gz /usr/local RUN mv /usr/local/hadoop-2.7.3 usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH # 为了防止环境变量失效 RUN echo 'HADOOP_HOME=/usr/local/hadoop/' >>.bash_profile RUN echo 'PATH=$HADOOP_HOME/bin:$PATH' >> .bash_profile RUN echo 'export HADOOP_HOME' >> .bash_profile RUN echo 'export PATH' >> .bash_profile
docker run --name hadoop1 --hostname hadoop1 -d -P avery/centos-ssh-root-jdk-hadoop
docker run --name hadoop2 --hostname hadoop2 -d -P avery/centos-ssh-root-jdk-hadoop
查看三个container的信息
1 2 3 4 5
docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e5e35adfa4 avery/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" 3 minutes ago Up 3 minutes 0.0.0.0:32776->22/tcp hadoop2 5f27fd91c7ba avery/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" 3 minutes ago Up 3 minutes 0.0.0.0:32775->22/tcp hadoop1 1d7fd37371cc avery/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" 3 minutes ago Up 3 minutes 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32774->22/tcp hadoop0
既然使用长连接,那么第一个问题是到底 client 和 server 之间需要多少根连接?实际上单连接和多连接在使用上没有区别,对于数据传输量较小的应用类型,单连接基本足够。单连接和多连接最大的区别在于,每根连接都有自己私有的发送和接收缓冲区,因此大数据量传输时分散在不同的连接缓冲区会得到更好的吞吐效率。所以,如果你的数据传输量不足以让单连接的缓冲区一直处于饱和状态的话,那么使用多连接并不会产生任何明显的提升,反而会增加连接管理的开销。
连接是由 client 端发起建立并维持。如果 client 和 server 之间是直连的,那么连接一般不会中断(当然物理链路故障除外)。如果 client 和 server 连接经过一些负载中转设备,有可能连接一段时间不活跃时会被这些中间设备中断。为了保持连接有必要定时为每个连接发送心跳数据以维持连接不中断。心跳消息是 RPC 框架库使用的内部消息,在前文协议头结构中也有一个专门的心跳位,就是用来标记心跳消息的,它对业务应用透明。