热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonpipeline框架hadoop_百度开源高性能Python分布式计算框架Bigflow

原标题:百度开源高性能Python分布式计算框架Bigflow开源最前线(ID:OpenSourceTop)猿妹整编综合

原标题:百度开源高性能 Python 分布式计算框架 Bigflow

开源最前线(ID:OpenSourceTop) 猿妹 整编

综合自:https://spectrum.ieee.org/computing/software/webassembly-will-finally-let-you-run-highperformance-applications-in-your-browser

百度近日开源了一套计算框架 Bigflow , 致力于提供一套简单易用的接口来描述用户的计算任务,并使同一套代码可以运行在不同的执行引擎之上。

Python 分布式计算框架 Bigflow

授权协议:Apache

开发语言:Python

操作系统:跨平台

开发厂商:百度

Github:https://github.com/baidu/bigflow

Bigflow 简介

Baidu Bigflow (以下简称Bigflow)是百度的一套计算框架, 它致力于提供一套简单易用的接口来描述用户的计算任务,并使同一套代码可以运行在不同的执行引擎之上。

它的设计中有许多思想借鉴自 google flume java 以及 google cloud bigflow ,另有部分接口设计借鉴自 apache spark 。

用户基本可以不去关心 Bigflow 的计算真正运行在哪里,可以像写一个单机的程序一样写出自己的逻辑, Bigflow 会将这些计算分发到相应的执行引擎之上执行。

Bigflow Python 是一个致力于简化分布式计算任务编写和维护的 Python module,它提供了对分布式数据和计算的高层抽象,你可以使用这些抽象来编写分布式计算程序。Bigflow Python能够将这些抽象映射到不同的分布式计算框架之上。

Bigflow Python 中最重要的抽象被称为 P 类型,P 类型是分布式数据的抽象描述,非常类似于 Spark 中的RDD。第二个抽象概念为 SideInputs,它指被广播到计算中去的 P 类型或是 Python 变量。通常而言,一个计算将被并行地在计算集群中执行,这时每个计算切片都能够得到SideInputs来满足计算的需求(例如查字典)。

Bigflow 的目标

Bigflow 的目标是:使分布式程序写起来更简单,测起来更方便,跑起来更高效,维护起来更容易,迁移起来成本更小。

目前 Bigflow 在百度公司内部对接了公司内部的批量计算引擎DCE(与社区Tez比较类似),迭代引擎 Spark,以及公司内部的流式计算引擎Gemini。在开源版本中,目前仅开放了 Bigflow on Spark。

Bigflow 特性

虽然 Bigflow 目前仅仅开源了 Bigflow on Spark,但 Bigflow on Spark 仍有许多出色的特性:

● 高性能

Bigflow 的接口设计使得 Bigflow 可以感知更多的用户需求的细节属性,并且 Bigflow 会根据计算的属性进行作业的优化;另其执行层使用 C++ 实现,用户的一些代码逻辑会被翻译为 C++ 执行,有较大的性能提升。

在公司内部的实际业务测试来看,其性能远高于用户手写的作业。根据一些从现有业务改写过来的作业平均来看,其性能都比原用户代码提升了 100%+。

开源版本的 benchmark 正在准备中。

● 简单易用

Bigflow 的接口表面看起来很像 Spark,但实际实用之后会发现 Bigflow 使用一些独特的设计使得 Bigflow 的代码更像是单机程序,例如,屏蔽了 partitione r的概念,支持嵌套的分布式数据集等,使得其接口更加易于理解,并且拥有更强的代码可复用性。

特别的,在许多需要优化的场景中,因为 Bigflow 的可以进行自动的性能以及内存占用优化,所以用户可以避免许多因 OOM 或性能不足而必须进行的优化工作,降低用户的使用成本。

● 在这里,Python 是一等公民

我们目前原生支持的语言是 Python。使用 PySpark 时,有不少用户都困扰于PySpark的低效,或困扰于其不支持某些 CPython 库,或困扰于一些功能仅在 Scala 和 Java 中可用,在PySpark中暂时处于不可用状态。

而在 Bigflow 中,Python 是一等公民(毕竟当前我们仅仅支持 Python),以上问题在 Bigflow 中都不是问题,性能、功能、易用性都对 Python 用户比较友好。

Bigflow 后端引擎

目前,Bigflow Python 支持两种后端执行引擎:

● Local – 一个轻量的本地执行引擎,便于学习以及基于小数据集的算法验证。

● Spark – 开源分布式计算引擎。

后端执行引擎可以在创建 Pipeline 的时候指定,例如:

72a86c7e8d2b4850b239b1012bc34367.jpeg

Bigflow 配置

Hadoop 配置

Bigflow Python需要读取core-site.xml配置文件来访问HDFS。因此在使用时,用户需要首先设置好HADOOP_HOME环境变量。

bigflow-env.sh

bigflow-env.sh 位于 BIGFLOW_PYTHON_HOME/bigflow/bin 下,其中包含一些Bigflow Python 在运行时的可选参数。

● Bigflow Python 默认将 log 打印到屏幕,用户可以通过改变下面的参数来指定 Log 的输出文件:

● 对于一个 P 类型 PValue,默认的 str(PValue) 仅会得到一个表示其具体类别的字符串。也即`print PValue`不会真正地触发计算。这时,如果希望看到一个P类型的内容,可以调用 PValue.get()

54961c11d58643bbb92eb4d797ef0514.jpeg

用户可以设置下面的变量来改变`str(PValue)`的行为

这时,每次`print PValue`都会隐式地执行`PValue.get()`:

873402cfcc4d4c6ca5844452e858bcf5.jpeg

这样做的好处在于可以使 Bigflow Python 写出的代码更像一个单机程序。

Bigflow 在线试用

在线试用网页 包含了一些简单的例子介绍 Bigflow 的概念和 API 用法,同时也可以在线编写 Python 代码尝试 Bigflow 的功能,可智能提示。(http://180.76.236.159:8732/?token=9a1bd5c7aeb2b217bef4e85c007f275e82744ba33f42eaf9)

●本文编号298,以后想阅读这篇文章直接输入298即可返回搜狐,查看更多

责任编辑:



推荐阅读
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文介绍如何使用JavaScript中的for循环来创建一个九九乘法表,适合初学者学习循环结构的应用。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 管理UINavigationController中的手势返回 - Managing Swipe Back Gestures in UINavigationController
    本文介绍了如何在一个简单的闪存卡片应用中实现平滑的手势返回功能,以增强用户体验。 ... [详细]
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • 本文探讨了如何在游戏启动画面中移除广告,特别是在游戏数据加载期间(大约5-6秒)广告会短暂显示的问题。通过调整XML布局和代码逻辑,可以实现广告的延迟加载或完全移除。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • 本文详细介绍了如何在Android应用中实现重复报警功能。示例代码可在以下路径找到:https://developer.android.com/samples/RepeatingAlarm/index.html。首先,我们将从Manifest文件开始分析。 ... [详细]
  • 本文详细介绍了 Android 开发中常用的单位 dip(设备独立像素)、px(像素)、pt(点)和 sp(可缩放像素),并解释了它们在不同屏幕密度下的应用。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
author-avatar
WJS0530_735
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有