ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Docker入门与实战——实战案例(分布式处理与大数据平台)

Docker入门与实战——实战案例(分布式处理与大数据平台) 实战案例分布式处理与大数据平台1、RabbitMQ1.1、使用官方镜像1.2、相关资源2、Hadoop2.1、使用官方镜像2.2、相关资源3、Spark3.1、使用官方镜像3.2、相关资源4、Storm4.1、本地模式部署topology4.2、部署最小化的Storm集群4.3、相关资源5、Elasticsearch5.1、使用官方镜像5.2、相关资源1、RabbitMQRabbitMQ是一个开源的消息队列实现它遵循高级消息队列协议(Advanced Message Queuing ProtocolAMQP)并且使用Erlang编程语言构建以其卓越的性能、稳健的可用性以及出众的可伸缩性而广受好评。它支持各种客户端包括Java、Python、PHP、.NET、Ruby和JavaScript等。RabbitMQ在分布式系统中主要负责存储和传递消息便于系统各组件之间的解耦。这样消息的发送方并不需要知晓消息的接收方反之接收方也不需要知晓发送方大大提高了系统的灵活性。图13-1展示了AMQP消息流转方式。1.1、使用官方镜像RabbitMQ的数据存储在具体的节点上。在使用docker [container] run命令运行容器的时候可以通过-h/–hostname参数指定每一个rabbitmq daemon运行的主机名。这样就可以方便地管理和维护数据如下所示dockerrun-d--hostnamemy-rabbit--namesome-rabbit rabbitmq:3$dockerpsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d00350daa72c rabbitmq:3docker-entrypoint.s…17seconds ago Up16seconds4369/tcp,5671-5672/tcp,15691-15692/tcp,25672/tcp some-rabbit容器启动后可以使用docker logs查看已部署的RabbitMQ服务。dockerlogs some-rabbit可以使用RabbitMQCTL工具进行远程管理或跨容器管理此时需要设置持久化的cookie。在这种情况下可以使用RABBITMQ_ERLANG_COOKIE参数进行设置dockerrun-d--hostnamemy-tabbit--namesome-rabbit-eRABBITMQ_ERLANG_COOKIEsecret cookie hrerrabbitmq:3使用cookie连接至一个独立的实例dockerrun-it--rm--linksome-rabbit:my-rabbit-eRABBITMQ_ELANG_COOKIEsecret cookie hererabbitmq:3bashrabbitmqctl-nrabbitmy-rabbit list_users同样用户也可以使用RABBITMQ_NODENAME简化指令dockerrun-it--rm--linksome-rabbit:my-rabbit-eRABBITMQ_ERLANG_COOKIEsecret cookie here-eRABBITMQ_NODENAMErabbitmy-rabbit rabbitmq:3bashrabbitmqctl list_users默认情况下RabbitMQ会安装并启动一些管控插件如rabbitmq:3-management。通常可以通过默认用户名、密码以及标准管控端口15672访问这些插件dockerrun-d--hostnamemy-rabbit--namesome-rabbit rabbitmq:3-management用户可以通过浏览器访问http://container-ip:15672如果需要从宿主机外访问则使用8080端口dockerrun-d--hostnamemy-rabbit--namesome-rabbit-p8080:15672 rabbitmq:3-management可以通过浏览器访问http://localhost:8080或http://host-ip:8080使用RabbitMQ管控工具如图所示。使用默认用户名和密码(guestguest)登录如图所示。如果需要修改默认用户名与密码则可以使用RABBITMQ_DEFAULT_USER和RABBITMQ_DEFAULT_PASS环境变量dockerrun-d--hostnamemy-rabbit--namesome-rabbit-eRABBITMQ_DEFAULT_USERuser-eRABBITMQ_DEFAULT_PASSpassword rabbitmq:3-management之后可以使用浏览器访问http://localhost:8080或http://host-ip:8080并使用新的用户名密码访问管控工具。如果需要修改默认vhost可以修改RABBITMQ_DEFAULT_VHOST环境变量dockerrun-d--hostnamemy-rabbit--namesome-rabbit-eRABBITMQ_DEFAULT_VHOSTmy_vhost rabbitmq:3-management之后可以使用浏览器访问http://localhost:8080或http://host-ip:8080并使用新的用户名密码访问管控工具。如果需要修改默认vhost可以修改RABBITMQ_DEFAULT_VHOST环境变量dockerrun-d--hostnamemy-rabbit--namesome-rabbit-eRABBITMQ_DEFAULT_VHOSTmy_vhost rabbitmq:3-management然后连接至daemondockerrun--namesome-app--linksome-rabbit:rabbit-dappliaction-that-uses-rabbitmq用户也可以访问官方镜像仓库并对Dockerfile进行更多定制。1.2、相关资源RabbitMQ官网http://www.rabbitmq.com/。RabbitMQ官方镜像https://hub.docker.com/_/rabbitmq/。2、HadoopHadoop是Apache软件基金会的一款开源分布式计算平台专为处理大规模数据集而设计。它在计算集群中运行提供高度的可靠性和可扩展性能够处理复杂的数据处理任务。在大规模数据处理、数据分析、机器学习等领域Hadoop被广泛应用并已成为大数据处理的核心工具之一。作为大数据处理的经典分布式框架Hadoop主要使用Java语言实现并由HDFS、YARN、MapReduce三个核心子系统构成。HDFS这是一个高度容错的分布式文件系统能够部署在大量的经济实惠的机器上并提供高吞吐量的数据访问与操作系统中的Linux ext3/ext4文件系统有相似之处。YARN(Yet Another Resource Negotiator)作为资源管理器YARN为上层应用提供统一的资源管理和调度支持多计算框架的兼容这与Linux的进程调度和内存分配模块类似。MapReduce这是一种分布式编程模型能够将大规模数据集的处理任务(Map)分发到网络的各个节点然后收集处理结果进行整合(Reduce)。此外Hadoop社区还扩展出了一系列相关的项目包括HBase列存数据库​、Hive支持SQL查询的数据仓库软件​、Pig数据流处理引擎​以及Zookeeper分布式应用程序协调服务等如图所示。2.1、使用官方镜像可以直接使用Apache开源基金会维护的Hadoop官方镜像目前提供Hadoop V2和V3两个版本镜像。下面是获取官网最新镜像版本V3的命令代码。此镜像工具较完整包含hdfs、yarn等常用命令可以在测试环境中使用可以通过hdfs namenode命令格式化一个新的分布式文件系统还可以通过hadoop命令使用HDFS集群使用yarn命令可以查看和管理应用2.2、相关资源Hadoop官网http://hadoop.apache.org。Hadoop官方镜像https://hub.docker.com/r/apache/hadoop。3、SparkSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架基于Scala开发。该框架诞生于2009年由加州大学伯克利分校的AMPLab团队研发并于2010年正式加入Apache的开源项目家族。Spark旨在处理大规模的数据处理任务能够轻松处理各种类型的数据包括结构化数据、半结构化数据和非结构化数据。它在大规模数据分析、机器学习、图形计算以及实时处理等领域广泛应用是大数据处理的重要工具之一。相较于Hadoop和Storm等其他大数据和MapReduce技术Spark能够提供更为灵活的函数定义能将应用处理速度提升至原来的一到两个数量级。同时它还提供了一系列实用工具包括SQL查询、流处理、机器学习和图处理等。Spark目前支持使用Scala、Java、Python、Clojure、R等编程语言来编写应用。除了核心API外Spark生态系统还囊括了众多附加库以便在大数据分析和机器学习领域提供更为强大的功能。这些库包括Spark Streaming用于构建弹性和容错的流处理应用​、Spark SQL支持SQL和结构化数据处理​、Spark MLlib专为机器学习设计以及Spark GraphX专用于图数据处理​。此外Spark生态系统中还包含一些其他库如BlinkDB和Tachyon等。Spark的典型架构主要由三个核心组件组成驱动程序、集群管理器以及工作节点如图所示。目前Spark推出了3.4.0版本这是3.x版本中的第5个发布版本。得益于开源社区的贡献该版本成功解决了超过2600个Jira请求。此版本新增了Spark Connect的Python客户端增强了Structured Streaming的异步进度跟踪功能增加了Pandas API的覆盖范围并提供了NumPy支持。3.1、使用官方镜像入门Spark最简单的方式是使用Spark的Scala shell。读者可以使用Apache/Spark的官方镜像功能如下3.2、相关资源Spark官网http://spark.apache.org/。Spark官方仓库https://github.com/apache/spark。Spark官方镜像仓库https://hub.docker.com/r/apache/spark。4、StormStorm是一款实时流计算框架它在2014年由Twitter正式开源并遵循Eclipse Public License 1.0协议基于Clojure等语言进行开发。Storm集群的运作方式与Hadoop集群极其相似二者的主要差别在于在Hadoop上运行的是MapReduce任务而在Storm上执行的是topology任务。MapReduce任务在处理完成后就会结束但topology任务则会持续等待消息并进行处理直至任务被显式地终止。Storm集群中有两类节点主节点和工作节点。主节点运行一个名为Nimbus的守护进程其功能类似于Hadoop的Jobtracker。Nimbus主要负责代码的分发、任务的分配以及故障监测。工作节点则运行名为Supervisor的守护进程负责监听由Nimbus分派的任务并根据这些指派信息管理工作进程。这里的每个工作进程都执行topology任务的一部分。在集群中Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群来完成的。值得注意的是Nimbus守护进程和Supervisor守护进程均设计成了“快速失败”(fail-fast)和无状态的从而实现了极高的稳定性。4.1、本地模式部署topology如果读者在当前目录中有topology.jar文件则可以直接通过docker run部署。4.2、部署最小化的Storm集群首先部署Storm集群依赖的Zookeeper并设置为自动重启保证一定的可靠性Nimbus的守护进程也必须连接Zookeeper服务然后启动管控节点(Supervisor)它将负责与Nimbus和Zookeeper通信现在读者可以向这个最小化集群提交一个topology为了方便管理可以启动一个管控UI启动后可以通过本地浏览器访问容器IP和8080端口如图所示。生产环境可以使用compose运行可以通过docker stackdeploy-c stack.yml storm或者docker-compose-fstack.yml up启动。启动后可以通过http://swarm-ip:6627或http://host-ip:6627访问Nimbus。详情可以参考docker-compose.yml如下所示4.3、相关资源Storm官网http://storm.apache.org/。Storm官方镜像仓库https://hub.docker.com/r/baqend/storm/。5、ElasticsearchElasticsearch是一款开源的分布式搜索和分析引擎深受业界青睐。此工具依托于Lucene搜索引擎库旨在提供一种可扩展的搜索平台其功能覆盖全文搜索、结构化搜索以及数据分析和可视化。Elasticsearch已经广泛应用于众多领域包括但不限于日志分析、电子商务搜索以及金融风控。这款产品已经证明自己是一种成熟且有效的分布式搜索和分析引擎。总的来说凭借强大的功能、易用性以及优异的性能Elasticsearch已经成为大数据领域中的重要一环。5.1、使用官方镜像读者可以使用官方镜像通过单节点模式快速运行Elasticsearch容器这种模式最好用于测试用途。首先创建用户定义的网络这样可以方便地连接到同一网络的其他服务如Kibana然后读者可以通过单节点模式直接运行Elasticsearch容器启动后可以通过docker exec命令进入容器并开始使用Elasticsearch读者也可以在启动时传入一些额外的配置参数用户目前使用的镜像内含有默认配置文件包含了预先定义好的默认配置。如果用户要使用自定义配置可以使用数据卷挂载自定义配置文件至/usr/share/elasticsearch/config如果需要数据持久化则可以使用数据卷指令挂载至/usr/share/elasticsearch/data此镜像会暴露9200、9300两个默认的HTTP端口可以通过此端口进行服务访问。9200端口是对外提供服务的API使用的端口9300端口是内部通信端口这些通信包括心跳、集群内部信息同步。如果读者希望在生产环境中使用Elasticsearch则建议使用多节点模式。读者可以使用Docker Compose运行三节点Elasticsearch集群。首先新建docker-compose.yml文件代码如下以上Docker Compose文件会搭建一个三节点Elasticsearch集群。节点es01会侦听本地主机的9200端口节点es02和es03会通过Docker网络与es01节点通信。Elasticsearch服务会监听在公开端口9200上。5.2、相关资源Elasticsearch官网https://www.elastic.co。Elasticsearch官方仓库https://github.com/elastic/elasticsearch。Elasticsearch官方镜像https://hub.docker.com/_/elasticsearch/。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进