Docker实战(十)之分布式处理与大数据平台

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 分布式系统和大数据处理平台是目前业界关注的热门技术。1.RabbitMQRabbitMQ是一个支持AMQP的开源消息队列实现,由Erlang编写,因以高性能、高可用以及可伸缩性出名。它支持多种客户端,如:Java、Python、PHP、Ruby、.NET、JavaScript等。

分布式系统和大数据处理平台是目前业界关注的热门技术。

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端口是内部通信端口,这些通信包括心跳,集群内部信息同步。

 

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
68 15
Docker自建仓库之Harbor高可用部署实战篇
|
15天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
1月前
|
算法 Linux 调度
Docker的资源限制实战篇
本文详细介绍了如何利用Docker对容器的资源进行限制,包括内存和CPU的使用。文章首先概述了资源限制的重要性及其在Linux系统中的实现原理,并强调了不当设置可能导致的风险。接着,通过一系列实战案例展示了如何具体设置容器的内存限制,包括硬性限制、动态调整以及软限制等。最后,文章还提供了限制容器CPU访问的具体方法和示例,如指定容器使用的CPU核心数和基于`--cpu-shares`参数对CPU资源进行分配。通过这些实践,读者可以更好地理解和掌握Docker资源管理技巧。
74 14
Docker的资源限制实战篇
|
1月前
|
存储 数据管理 应用服务中间件
Docker的数据管理实战篇
关于Docker数据管理实战的教程,涵盖了Docker数据卷的使用、特点、场景以及数据卷容器的概念和应用。
51 13
Docker的数据管理实战篇
|
9天前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
31 3
|
11天前
|
关系型数据库 Linux 虚拟化
Docker入门基础实战
Docker入门基础实战
|
1月前
|
Ubuntu Linux Docker
Ubuntu 18.04 安装Docker实战案例
关于如何在Ubuntu 18.04系统上安装Docker的实战案例,包括安装步骤、配置镜像加速以及下载和运行Docker镜像的过程。
163 3
Ubuntu 18.04 安装Docker实战案例
|
1月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
93 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
1月前
|
存储 测试技术 数据安全/隐私保护
Docker自建仓库之Harbor部署实战
关于如何部署和使用Harbor作为Docker企业级私有镜像仓库的详细教程。
79 12
|
8天前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
23 0
下一篇
无影云桌面