写点什么

新的 Dataproc 可选组件支持 Apache Flink 和 Docker

Roderick Yao

  • 2020-11-03
  • 本文字数:2445 字

    阅读完需:约 8 分钟

新的 Dataproc 可选组件支持 Apache Flink 和 Docker

Google Cloud 的 Dataproc 让您能够以更简便、更经济的方式来基于 Google Cloud 运行原生 Apache Spark 和 Hadoop 集群。在本文中,我们将介绍在 Dataproc 的 Component Exchange 中提供的最新可选组件:Docker 和 Apache Flink。

Dataproc 中的 Docker 容器

Docker 是一种广泛使用的容器技术。由于它现在是 Dataproc 可选组件,Docker 守护进程 (daemon) 现在可被安装到 Dataproc 集群的每个节点。这将使您能够安装容器化应用程序,并且在集群中轻松地与 Hadoop 集群交互。


此外,Docker 对于支持以下这些功能也至关重要:


1.通过 YARN 运行容器


2.可移植 Apache Beam 作业


在 YARN 中运行容器使您能够单独管理您的 YARN 应用程序的依赖性,并且允许您在 YARN 中创建容器化的服务。可移植 Apache Beam 将作业打包到 Docker 容器,并将其提交至 Flink 集群。了解有关 Beam 可移植性的更多信息


除了默认的 Docker registry,还可对 Docker 可选组件进行配置以使用 Google Container Registry。这使您能够使用由您的组织管理的容器镜像。


以下是利用 Docker 可选组件创建 Dataproc 集群的示例:


gcloud beta dataproc clusters create <cluster-name> \  --optional-components=DOCKER \  --image-version=1.5
复制代码


当您运行 Docker 应用程序时,使用 gcplogs 驱动程序,日志将被传至 Cloud Logging。


如果您的应用程序不依赖任何 Hadoop 服务,核实 Kubernetes 和 Google Kubernetes Engine 是否以原生方式运行容器。要了解有关 Dataproc 使用的更多信息,请参阅我们的相关文档

基于 Dataproc 的 Apache Flink

在流分析技术中,Apache Beam 和 Apache Flink 更加出色。Apache Flink 是一个基于有状态计算的分布式处理引擎。Apache Beam 是定义批处理和流处理管道的统一模式。使用 Apache Flink 作为扩展引擎,除了 Google 的 Cloud Dataflow 服务,您还可以在 Dataproc 中运行 Apache Beam 作业。


Flink 以及在 Flink 中运行 Beam 适合大规模连续作业,可提供:


  • 支持批处理和数据流程序的流优先运行环境

  • 同时支持非常高的吞吐量和低事件延迟的运行环境

  • 具有精确单次处理保证的容错

  • 流程序中的自然背压 (back-pressure)

  • 自定义内存管理以实现在内存和核外数据处理算法之间高效、稳健的切换

  • 与 YARN 以及 Apache Hadoop 生态系统的其他组件集成


Google Cloud 的 Dataproc 团队最近宣布 Flink Operator on Kubernetes 现已可用。它允许您在 Kubernetes 中运行 Apache Flink 作业,具有减少平台依赖性和产生更好的硬件效率的优势。


基本 Flink 概念


Flink 集群包括 Flink JobManager 以及一组 Flink TaskManager。与 YARN 之类的其他分布式系统中的类似角色相似,JobManager 的“责任”包括接受作业、管理资源以及监控作业等。TaskManager 负责运行实际任务。


在 Dataproc 中运行 Flink 作业时,我们将 YARN 用作 Flink 的资源管理器。您可以以两种方式运行 Flink 作业:作业集群和会话集群。对于作业集群,YARN 将为作业创建 JobManager 和 TaskManagers,并且将在作业完成时销毁集群。对于会话集群,YARN 将创建 JobManager 和几个 TaskManager。集群可服务多个作业直至被用户关闭。


如何利用 Flink 创建集群


使用以下命令作为开始:


gcloud beta dataproc clusters create <cluster-name> \  --optional-components=FLINK \  --image-version=1.5
复制代码


如何运行 Flink 作业


在带有 Flink 的 Dataproc 集群启动后,您可以使用 Flink 作业集群直接将您的 Flink 作业提交至 YARN。接受作业后,Flink 将在 YARN 中为此作业启动 JobManager 和任务槽。Flink 作业将在 YARN 集群中运行,直至完成。然后,将关闭所创建的 JobManager。作业日志将在常规 YARN 日志中提供。尝试此命令以运行一个字数统计示例:


  HADOOP_CLASSPATH=`hadoop classpath` flink run -m yarn-cluster /usr/lib/flink/examples/batch/WordCount.jar
复制代码


默认情况下,Dataproc 集群将不启动 Flink 会话集群。相反,Dataproc 将创建脚本“/usr/bin/flink-yarn-daemon”,该脚本将启动 Flink 会话。


如果您要在 Dataproc 创建时启动 Flink 会话,使用 metadata 关键词来允许启动:


  gcloud dataproc clusters create <cluster-name> \  --optional-components=FLINK \   --image-version=1.5 \  --metadata flink-start-yarn-session=true
复制代码


如果您要在 Dataproc 创建后启动 Flink 会话,可在主节点运行下列命令:


  $ . /usr/bin/flink-yarn-daemon
复制代码


向该会话集群提交作业。您需要获得 Flink JobManager URL:


  HADOOP_CLASSPATH=`hadoop classpath` flink run -m <JOB_MANAGER_HOSTNAME>:<REST_API_PORT> /usr/lib/flink/examples/batch/WordCount.jar
复制代码


如何运行 Java Beam 作业


运行以 Java 编写的 Apache Beam 作业非常简单。无需额外的配置。只要您将 Beam 作业打包为 JAR 文件,不需要进行任何配置即可在 Flink 中运行 Beam。以下是您可以使用的命令:


 $ mvn package -Pflink-runner$ bin/flink run -c org.apache.beam.examples.WordCount /path/to/your.jar--runner=FlinkRunner --other-parameters
复制代码


如何运行以 Python 编写的 Python Beam 作业


以 Python 编写的 Beam 作业使用不同的执行模式。要基于 Dataproc 在 Flink 中运行它们,您还需要启用 Docker 可选组件。以下是创建集群的示例:


  gcloud dataproc clusters create <cluster-name> \  --optional-components=FLINK,DOCKER
复制代码


您还需要安装 Beam 所必需的 Python 库,例如,apache_beam 和 apache_beam[gcp]。您可以传递一个 Flink 主 URL,让它在会话集群中运行。如果您未传递 URL,需要使用作业集群模式来运行此作业:


  import apache_beam as beamfrom apache_beam.options.pipeline_options import PipelineOptionsoptions = PipelineOptions([  "--runner=FlinkRunner",  "--flink_version=1.9",  "--flink_master=localhost:8081",  "--environment_type=DOCKER"])with beam.Pipeline(options=options) as p:  ...
复制代码


编写 Python 作业后,只需运行它以提交:


  $ python wordcount.py
复制代码


2020-11-03 14:10894

评论

发布
暂无评论
发现更多内容

我测了啊,我真测了!

QualityFocus

测试 质量保障 线上问题 缺陷

为什么需要数据库连接池

赖猫

MySQL 数据库 后端 连接池

黄金圈法则解读数据中台(1):为什么需要数据中台

水滴

数据中台 黄金圈法则 8月日更

各种消息队列设计要点与对比

海明菌

消息队列 消息队列对比 消息队列系统设计

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

编程菌

Java 编程 程序员 面试 计算机

SpringBoot 中的事务处理

xcbeyond

事务 springboot 8月日更

Elasticsearch VS ClickHouse

Se7en

在线网页快捷方式创建工具

入门小站

工具

2020-2021阿里巴巴Java面试真题解析

Geek_f90455

Java 程序员 后端

「SQL数据分析系列」15. 元数据

Databri_AI

sql 脚本 元数据

从未如此简单:基于Serverless架构的博客

刘宇

Serverless Hexo 博客

奥运“哮喘”运动员为什么越来越多?

脑极体

Windows10下JDK8下载及java环境配置

Bob

8月日更

Linux之watch命令

入门小站

Linux

Hbase 入门详解

Se7en

DDD领域驱动设计·学习应用·一

小诚信驿站

领域驱动设计 领域驱动模型DDD 中台架构 领域驱动

【最不佳实践】函数计算的函数是什么意思

刘宇

Serverless

再见 Jenkins!几行脚本搞定自动化部署,这款神器有点厉害

编程菌

Java 编程 程序员 计算机 技术宅

2020-2021京东Java面试真题解析

Geek_f90455

Java 程序员 后端

2020-2021华为Java面试真题

Geek_f90455

Java 程序员 后端

Vue组件通信之ref

Augus

8月日更

王者并发课-钻石2:分而治之-如何从原理深入理解ForkJoinPool的快与慢

MetaThoughts

Java 多线程 并发

弱口令到底是什么牛马?

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

JDK 从8升级到11,使用 G1 GC,HBase 性能下降近20%。JDK 到底干了什么?

毕昇JDK社区

缓存数据历险记(一)--被缓存警察上课一天

卢卡多多

redis 缓存 8月日更

NLP随笔(三)

毛显新

人工智能 自然语言处理 神经网络 深度学习

网络攻防学习笔记 Day94

穿过生命散发芬芳

网络攻防 8月日更

趁着课余时间学点python(二)缩进 标识符 保留字 注释 输入输出的理解

ベ布小禅

8月日更

12年高级工程师的“飞升之路”

Geek_f90455

Java 程序员 后端

一个好的产品需要一个好的产品

刘宇

产品经理

【最不佳实践】文件上传并不简单

刘宇

Python Serverless 文件上传

新的 Dataproc 可选组件支持 Apache Flink 和 Docker_文化 & 方法_InfoQ精选文章