Docker实战(十)之分布式处理与大数据平台
分布式系统和大数据处理平台是目前业界关注的热门技术。
1.RabbitMQ
RabbitMQ是一个支持AMQP的开源消息队列实现,由Erlang编写,因以高性能、高可用以及可伸缩性出名。它支持多种客户端,如:Java、Python、PHP、Ruby、.NET、JavaScript等。
它主要用于分布式系统中存储和转发消息,方便组之间的解耦,消息的发送无需知道消息使用者的存在,反之亦然。
AMQP架构中有两个主要组件:Exchange和Queue,两者都在服务端,又称Broker,由RabbitMQ实现。客户端通常有Producer和Consumer两种类型。
在使用RabbitMQ过程中需要注意的是,它将数据存储在Node中,默认情况为hostname。因此在使用docker run指令运行容器的时候, 应该通过-h/--hostname参数指定每一个rabbitmq daemon运行的主机名。这样可以轻松得地管理和维护数据了:
用户使用rabbitmqctl工具进行远程管理,或跨容器管理的时候,会需要设置持久化的Cookie。如果需要了解关于Erlang Cookie的信息,可以参见RabbitMQ官网的集群指南。
这里可以使用RABBITMQ_ERLANG_COOKIE参数进行设置:
docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3 bash
2.Celery
除了通用的消息队列外,任务队列在分布式处理中也十分重要。任务队列的输入是工作的一个单元,称为任务,有多个工作者监听队列来获取任务并执行。
Celery是一个简单、灵活、高可用、高性能的开源分布式任务处理系统,专注于实时处理的任务队列管理,同时也支持任务调度。Celery基于Python实现,跟包括的Django、Flask、Tornado等Web框架都无缝集成,有庞大的用户与贡献者社区。Celery可用单机运行,也可以在多台机器上运行,甚至可以跨越数据中心运行。
(1)使用官方镜像
docker run --link some-rabbit:rabbit --name some-celery -d celery:latest
检查集群状态:
docker run --link some-rabbit:rabbit --rm celery celery status
启动一个celery worker,即Redis Broker
docker run --link some-redis:redis -e CELERY_BROKER_URL=redis://redis --name some-celery -d celery
检查集群状态:
docker run --link some-redis:redis -e CELERY_BROKER_URL=redis://redis --rm celery celery status
(2)使用Celery库
如果用户使用的框架已有Celery库,那么使用起来更加方便。
Python调用CeLery:
from celery import Celery app = Celery('hello',broker='amqp://guest@localhost//') @app.tast def hello():
return "hello world"
3.Hadoop
作为当今大数据处理领域的经典分布式平台,Apache Hadoop主要基于Java语言实现,由三个核心子系统组成:HDFS、YARN、MapReduce,其中HDFS是一套分布式文件系统;YARN是资源管理系统,MapReduce是运行在YARN上的应用,负责分布式处理管理。如果从操作系统的角度看,HDFS相当于Linux的ext3/ext4文件系统,而Yarn相当于Linux的进程调度和内存分配模块。
使用官方镜像
可以通过docker run指令运行镜像,同时打开bash命令行,如下所示:
docker run -it sequenceiq/hadoop-docer:2.7.0 /etc/bootstrap.sh -bash
此时可以查看各种配置信息和执行操作,例如查看namenode日志等信息:
cat /usr/local/hadoop/logs/yarn-root-nodemanager-8c266b1ce6d8.out
4.Spark
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,基于Scala开发。最初在2009年由加州大学伯克利分校的AMPLap开发,并于2010年成为Apache的开源项目之一。
与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark支持灵活的函数定义,可以将营业处理速度提升到一两个数量级,并且提供了众多方便的实用工具,包括SQL查询、流处理、机器学习和图处理等:
Spark体系包括如下三个主要组成:数据组成、API、管理框架。
(1)使用官方镜像
docker pull sequenceiq/spark:1.6.0
也可以使用docker build指令构建spark镜像:
docker build --rm -t sequenceiq/spark:1.6.0 .
另外,用户在运行容器时,需要映射YARN UI需要的端口:
docker run -it -p 8088:8088 -p 8042:8042 -h sandbox sequenceiq/spark:1.6.0 bash
启动后,可以使用bash命令来查看namenode日志等信息:
cat /usr/local/hadoop/logs/hadoop-root-namenode-sandbox.out
(2)验证
基于YARN部署Spark系统时,用户有两种部署方式可选:YARN客户端模式和YARN集群模式。
a.YARN客户端模式
在YARN客户端模式中,SparkContext(或称为驱动程序,driver program)运行在客户进程中,应用的master仅处理来自YARN的资源管理请求:
#运行spark shell
spark-shell \
--master yarn-client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1
#执行以下指令返回1000则符合预期
sc.parallelize(1 to 1000).count()
b.YARN集群模式
在YARN集群模式中,Spark driver驱动程序运行于应用master的进程中,即由YARN从集群层面进行管理。下面,用户以Pi值计算为例子,展现两种模式的区别:
Pi计算(YARN集群模式):
#执行以下指令,成功后,日志中会新增记录 "Pi is roughly 3.1418"
#集群模式下用户必须制定--files参数,以开启metrics
spark-submit \
--class org.apache.spark.examples.SparkPi \
--files $SPARK_HOME/conf/metrics.properties \
--master yarn-cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.0-hadoop2.6.0.jar
Pi计算(YARN客户端模式):
#执行以下指令,成功后,命令行将显示"Pi is roughly 3.1418"
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-client
--driver-memory 1g \
--executor-memory 1g \
--executory-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.0-hadoop2.6.0.jar
(3)容器外访问Spark
如果需要从容器外访问Spark环境,则需要设置YARN_CONF_DIR环境变量。yarn-remote-client文件夹内置远程访问的配置信息:
export YARN_CONF_DIR="`pwd`/yarn-remote-client"
只能使用根用户访问Docker的HDFS环境。当用户从容器集群外部,使用非根用户访问Spark环境时,则需要配置HADOOP_USER_NAME环境变量:
export HADOOP_USER_NAME=root
5.Storm
Apache Storm 是一个实时流计算框架,由Twitter在2014年正式开源,遵循Eclipse Public License1.0.Storm基于Clojre等语言实现。
Storm集群与Hadoop集群在工作方式上十分相似,唯一区别在于Hadoop运行的是MapReduce任务,在Storm上运行的则是topology。MapReduce任务完成处理即会结束,而topology则永远在等待消息并处理。
(1)示意架构图
其中包含如下容器:
Zookeeper:Apache Zookeeper三节点部署
Nimbus:Storm Numbus.
UI:Storm UI
Supervisor:Storm Supervisor(一个或多个)
(2)本地开发测试
git clone https://github.com/denverdino/docker-storm.git
cd docker-swarm/local
代码库中的docker-compose.yml文件描述了典型的Storm应用架构。
用户可以直接运行下列命令构建测试镜像:
docker-compose build
一键部署一个storm应用:
docker-compose up -d
利用如下命令,可以伸缩supervisor的数量,比如伸缩到4个实例
docker-compose scale supervisor=4
朋友们也许会发现Web界面中并没有运行中的topology。这是因为Docker Compose目前只能保证容器的启动顺序,但是无法确保所依赖容器中的应用已经完全启动并可以正常访问。
为了解决这个问题,需要运行如下命令来再次启动topolgoy服务应用来提交更新的拓扑:
docker-compose start topology
随后刷新下UI界面,可以发现Storm应用已经部署成功。
6.Elasticsearch
Elasticsearch是一个基于Lucene的开源搜索服务器,主要基于Java实现。它提供一个分布式的,多租户的全文搜索引擎,内含RESTful web接口。
Elasticsearch提供了实时的分布式数据存储和分析查询功能,很容易扩展到上百台服务器,支持处理PB级结构化或非结构化数据。配合Logstash、Kibana等组件,可以快速构建一套对日志信息的分析平台。
拉取官方镜像:
docker run -d elasticsearch
也可以在启动时传入一些额外的配置参数:
docker run -d elasticsearch elasticsearch -Des.node.name="TestNode"
目前使用的镜像内含默认配置文件,包含了预先定义好的默认配置。如果用户要使用自定义配置,可以使用数据卷,挂载自定义配置文件到/usr/share/elasticsearc/config:
docker run -d -v "$PWD/config":/usr/share/elasticsearch/config elasticsearch
如果需要数据持久化,可以使用数据卷指令,挂载至/usr/share/elasticsearch/data:
docker run -d -v "$PWD/esdata":/usr/share/elasticsearch/data elasticsearch
此镜像会暴露9200 9300两个默认的HTTP端口,可以通过此端口进行服务访问。9200端口是对外提供服务的API使用的端口。9300端口是内部通信端口,这些通信包括心跳,集群内部信息同步。
Docker实战(十)之分布式处理与大数据平台的更多相关文章
- 分布式处理与大数据平台(RabbitMQ&Celery&Hadoop&Spark&Storm&Elasticsearch)
热门的消息队列中间件RabbitMQ,分布式任务处理平台Celery,大数据分布式处理的三大重量级武器:Hadoop.Spark.Storm,以及新一代的数据采集和分析引擎Elasticsearch. ...
- 单机,伪分布式,完全分布式-----搭建Hadoop大数据平台
Hadoop大数据——随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快.信息更是爆炸性增长,收集,检索,统计这些信息越发困难,必须使用新的技术来解决这 ...
- Spark大型项目实战:电商用户行为分析大数据平台
本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分 ...
- 【HADOOP】| 环境搭建:从零开始搭建hadoop大数据平台(单机/伪分布式)-下
因篇幅过长,故分为两节,上节主要说明hadoop运行环境和必须的基础软件,包括VMware虚拟机软件的说明安装.Xmanager5管理软件以及CentOS操作系统的安装和基本网络配置.具体请参看: [ ...
- 【定义及安装】Ambari——大数据平台的搭建利器
Ambari 是什么 Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.目前最新的发布版本是 2.0.1,未来不 ...
- 从0到N建立高性价比的大数据平台(转载)
2016-07-29 14:13:23 钱曙光 阅读数 794 原文链接:https://blog.csdn.net/qiansg123/article/details/80124521 声明:本文为 ...
- 互联网大规模数据分析技术(自主模式)第五章 大数据平台与技术 第10讲 大数据处理平台Hadoop
大规模的数据计算对于数据挖掘领域当中的作用.两大主要挑战:第一.如何实现分布式的计算 第二.分布式并行编程.Hadoop平台以及Map-reduce的编程方式解决了上面的几个问题.这是谷歌的一个最基本 ...
- Ambari——大数据平台的搭建利器(一)
Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是**项目.目前最新的发布版本是 2.0.1,未来不久将发布 2.1 版本 ...
- 从 Hadoop 到云原生, 大数据平台如何做存算分离
Hadoop 的诞生改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变:随着云计算时代的到来, 存算分离的架构受到青睐,企业开开始对 Hado ...
随机推荐
- YII中利用urlManager将URL改写成restful风格
这里主要涉及url显示样式 1.打开config文件夹下面的mian.php 2.修改内容 如把地址http://www.test.com/index.php?r=site/page/sid/ ...
- egg.js连接和使用Mongodb
一.Egg连接Mongodb方法一 Cnpm i egg-momgo-native --save Plugin.js中配置 exports.mongo = { enable: true, pack ...
- FFmpeg实现将图片转换为视频
##名称:ffmpeg实现将图片转换为视频 ##平台:ubuntu(已经安装好了ffmpeg工具) ##日期:2017年12月10日 简介: 因为学习需要,需要将连续图片转换成视频,昨天和今天早上用o ...
- FineReport中JS如何自定义按钮导出
FineReport支持多种不同的导出方式,直接使用FineReport内置导出按钮可以非常快捷方便的来对各种格式的输出,但是我们在web页面集成中的时候,往往只想将报表内容嵌入到iframe中,而工 ...
- 图片加载库Glide的封装工具类,方便以后使用
直接上源码.注释得已经很清晰了,直接调用即可. package com.liuguilin.lovewallpaper.utils; /* * Created by 火龙裸先生 on 2017/3/3 ...
- Flutter自定义标题栏之处理状态栏高度
App在很多情况下由于各种需求需要自定义标题栏,而在能够构建Android和IOS应用的Flutter中,如果不在Scaffold中使用AppBar会发现默认是沉浸式. 猜想:我们使用自定义标题栏好像 ...
- maven 超级pom位置、maven命令、构件、下载位置、手动打包位置、中央仓库ip
1.超级pom位置 ----> 解压M2_HOME/lib/maven-model-builder-3.5.4.jar 2.运行maven 命令实际上是运行了 java 命令,因为maven插件 ...
- leetCode题解之修剪二叉查找树
1.题目描述 Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so ...
- [WinCE] Can't find P/Invoke DLL sqlceme35.dll
找到目录: C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i 将 sqlce ...
- linux下postgresql的安装与卸载
安装: sudo apt-get update sudo apt-get install postgresql 启动: sudo /etc/init.d/postgresql start 查看是否启动 ...