用于启动apache spark集群的命令行工具。

Flintrock的Python项目详细描述


Flintrock logo许可证生成状态Flintrock:更快、更好的Spark-EC2(幻灯片) Guides:

用法

这里有一个在ec2上启动集群的快速方法,假设您已经设置了aws帐户。Flintrock最适合Amazon Linux。您可以从这里获得最新的ami id

啊!

如果您将这些选项持久保存到文件中,则可以更简洁地执行相同的操作:

啊!

使用完群集后,不要忘记使用以下命令销毁它:

啊!

使用Flintrock可以做的其他事情包括:

啊!

要查看Flintrock还能做什么,或查看特定命令的详细帮助,请尝试:

啊! 还不止这些。Flintrock还有一些您可能会感兴趣的功能。

访问S3上的数据

我们建议您通过以下方式从Flintrock集群访问S3上的数据 这些步骤:

  1. 设置IAM角色 这允许根据请求访问s3。引用此角色时你发射 使用--ec2 instance profile name选项(或其 相当于您的config.yaml文件。
  2. 使用s3A://前缀引用spark代码中的s3路径。s3A://是 向后兼容s3n://并替换s3n://s3://。 hadoop项目建议使用s3A:///code> 因为它是主动开发的,支持更大的文件,并且提供 更好的性能。
  3. 确保Flintrock配置为使用Hadoop/HDFS2.7+。早期的 hadoop版本没有可靠的s3A://实现。 Flintrock的默认版本是Hadoop2.8.5,所以不需要做任何事情 如果您使用的是普通配置,请点击此处。
  4. 使用hadoop aws包调用spark以启用s3A://。例如:
    spark-submit --packages org.apache.hadoop:hadoop-aws:2.7.6 my-app.py
    pyspark --packages org.apache.hadoop:hadoop-aws:2.7.6
    
    如果您在使用该软件包时遇到问题,请参阅hadoop aws疑难解答。 指南 并尝试调整版本。根据经验,您应该匹配版本 从hadoop aws到spark所针对的hadoop版本(即 通常是hadoop 2.7),即使您要部署到的hadoop版本 您的Flintrock群集不同。

使用这种方法,您不需要复制aws凭证 或者把它们传给你的星火计划。只要分配了iam角色 允许它,spark将能够通过 引用适当的路径(例如s3A://bucket/path/to/file)。

安装

在使用Flintrock之前,请快速查看 版权 请注意并许可证 并确保您对他们的条款满意。

Flintrock需要Python3.4或更高版本,除非您正在使用 我们的独立软件包的。弗林特洛克已经彻底测试过了 只在OSX上运行,但它应该在所有POSIX系统上运行。 有动机的贡献者应该能够 Windows支持 也不会有太多麻烦。

发布版本

要获得Flintrock的最新版本,只需运行pip

pip3 install flintrock

这将安装Flintrock并将其放置在您的路径上。你现在该走了!

您可能需要开始使用以下两个命令:

flintrock --help
flintrock configure

独立版本(不需要python!)

如果没有最新版本的python,或者根本没有安装python, 你还可以用燧石。我们在github上发布独立的flintrock包 版本

在我们的最新版本中找到您的操作系统的独立软件包, 将其解压缩到您选择的位置,并在其中运行Flintrock可执行文件。

例如:

flintrock_version="0.8.0"

curl --location --remote-name "https://github.com/nchammas/flintrock/releases/download/v$flintrock_version/Flintrock-$flintrock_version-standalone-OSX-x86_64.zip"
unzip -q -d flintrock "Flintrock-$flintrock_version-standalone-OSX-x86_64.zip"cd flintrock/

# You're good to go!
./flintrock --help

您可能需要将Flintrock可执行文件的位置添加到路径中,以便可以从任何目录调用它。

社区支持的发行版

Flintrock也可以通过以下包管理器获得:

这些包不受核心贡献者的支持,可能已过时。如果您在使用这些发行版安装Flintrock时遇到困难,请直接联系相关社区。

开发版本

如果您喜欢生活在边缘,请安装Flintrock的开发版本:

flintrock launch test-cluster \
    --num-slaves 1\
    --spark-version 2.4.0 \
    --ec2-key-name key_name \
    --ec2-identity-file /path/to/key.pem \
    --ec2-ami ami-0b8d0d6ac70e5750c \
    --ec2-user ec2-user
0

如果您想贡献,按照我们的贡献指南中关于如何安装Flintrock的说明进行操作。

用例

实验

如果你想玩转spark,开发原型应用程序,运行一次性任务,或者只是做个实验,那么使用flintrock是获得一个工作的spark集群的最快方法。

性能测试

Flintrock公开了其底层提供程序的许多选项(例如EC2上的EBS优化卷),这使得创建一个性能可预测的集群变得非常容易,以便进行Spark性能测试。

自动化管道

大多数人会在命令行中交互地使用flintrock,但是flintrock也被设计成自动管道的一部分。Flintrock的退出代码是经过精心选择的;它提供了禁用交互式提示的选项;在适当的时候,它会以yaml格式打印输出,这对人和机器都是友好的。

反使用案例

有些事情Flintrock特别指出不支持。

管理永久性基础设施

Flintrock不是用来管理长寿命的集群,也不是用来管理作为某些环境永久组成部分的任何基础设施。

首先,Flintrock不能保证使用一个版本的Flintrock启动的集群可以由另一个版本的Flintrock管理,也不考虑任何长期的用例。

如果您正在寻找管理永久性基础设施的方法,请查看以下工具:terraform、ansiblesaltstack,或者ubuntu jujuju。如果您正在寻找其他人来为您主持和管理Spark,您可能会发现类似于databricks的服务非常有用。亚马逊还提供了emr上的spark服务。

启动非Spark相关服务

Flintrock旨在推出Spark群集,其中包括HDF、Mesos和Yarn等密切相关的服务。

Flintrock不用于启动外部数据源(如Cassandra)或其他与Spark不紧密集成的服务(如Tez)。

如果您正在寻找从hadoop生态系统启动其他服务的简单方法,请查看apache bigtop项目。

推出过时的服务

Flintrock将始终利用Spark和相关服务的新特性,使启动集群的过程更快、更简单、更易于维护。如果这意味着放弃对发布旧版本服务的支持,那么我们通常会进行权衡。

功能

抛光的cli

Flintrock有一个干净的命令行界面。

flintrock launch test-cluster \
    --num-slaves 1\
    --spark-version 2.4.0 \
    --ec2-key-name key_name \
    --ec2-identity-file /path/to/key.pem \
    --ec2-ami ami-0b8d0d6ac70e5750c \
    --ec2-user ec2-user
1

可配置的cli默认值

Flintrock允许您将所需的配置持久化到一个yaml文件中,这样您就不必在命令行中一遍又一遍地输入相同的选项。

要设置和编辑默认配置文件,请运行以下命令:

flintrock launch test-cluster \
    --num-slaves 1\
    --spark-version 2.4.0 \
    --ec2-key-name key_name \
    --ec2-identity-file /path/to/key.pem \
    --ec2-ami ami-0b8d0d6ac70e5750c \
    --ec2-user ec2-user
2

您还可以使用--config选项将Flintrock指向非默认配置文件。

示例config.yaml

flintrock launch test-cluster \
    --num-slaves 1\
    --spark-version 2.4.0 \
    --ec2-key-name key_name \
    --ec2-identity-file /path/to/key.pem \
    --ec2-ami ami-0b8d0d6ac70e5750c \
    --ec2-user ec2-user
3

有了这样的配置文件,现在就可以使用以下命令启动集群:

flintrock launch test-cluster \
    --num-slaves 1\
    --spark-version 2.4.0 \
    --ec2-key-name key_name \
    --ec2-identity-file /path/to/key.pem \
    --ec2-ami ami-0b8d0d6ac70e5750c \
    --ec2-user ec2-user
4

如果你愿意,你可以甚至可以在命令行中覆盖配置文件中的各个选项:

flintrock launch test-cluster \
    --num-slaves 1\
    --spark-version 2.4.0 \
    --ec2-key-name key_name \
    --ec2-identity-file /path/to/key.pem \
    --ec2-ami ami-0b8d0d6ac70e5750c \
    --ec2-user ec2-user
5

快速启动

弗林特洛克跑得真快。与SPARK-EC2相比,它能够以多快的速度在EC2上启动完全运行的集群。

设置

结果

<表><广告>群集大小 Flintrock启动时间SPARK-EC2启动时间 < /广告><正文>1个从机200万秒8米44秒50个从机2米30秒37m 30秒100个从机2米42秒1小时06分05秒

SPARK-EC2的发布时间来源于SPARK-5189

请注意,aws的性能是高度可变的,因此您不会得到一致的结果。它们显示了每个工具的最佳案例场景,而不是典型案例。对于Flintrock来说,典型的发射时间要长一两分钟。

高级存储设置

Flintrock自动配置集群上的任何可用的临时存储,并使其可用于已安装的服务,如HDF和Spark。此存储空间速度快,非常适合作为这些服务的临时存储空间。

测试

Flintrock提供了一套自动化的端到端测试。这些测试帮助我们满怀信心地开发Flintrock,并保证一定的质量水平。

低级提供商选项

Flintrock公开了低级提供者选项(例如,使用实例启动的关闭行为" rel="nofollow">来控制集群的详细信息如果您需要,可以设置。

没有自定义计算机映像依赖项

Flintrock是建立和测试香草亚马逊Linux和CentOS。您可以使用从这些发行版中创建的自定义计算机映像轻松启动Flintrock群集。

反功能

支持过时版本的python、ec2api等。

支持任何东西的多个版本都很困难。测试需要覆盖更多的表面积,从长期来看,用错误修复和解决方案来支持非当前的东西的维护负担确实会增加。

有些项目支持跨多个语言或api版本的内容。例如,SCAPK支持Java 7和8,Python 2.6 +和3 +。这些项目背后的人是神。为了用户的利益和方便,它们承担着巨大的维护负担。

我们在弗林特洛克项目的能力要谦虚得多。当我们仅限于支持一组小型但广泛适用的配置时,我们最有能力长期为项目服务。

动机

注:此处的解释是从Flintrock的原始作者Nicholas Chammas的角度提供的。

我是通过使用spark-ec2开始使用spark的。这是我发现火花如此容易接近。在解决"真正的"问题之前,我不需要花时间预先完成一些设置指南。相反,通过一个简单的spark-ec2命令,我能够启动一个大型的工作集群,并直接开始工作。

当我成为spark-ec2的重度用户时,一些限制变得非常突出,并且变得越来越痛苦。他们给了我这个项目的动力。

在这些限制中,最令人沮丧的是:

  • 慢速启动:SPARK-EC2群集启动时间随创建的从机数量线性增加。例如,启动一个包含100个从机的集群需要一个小时的时间。(spark-4325spark-5189
  • 不支持配置文件:SPARK-EC2不支持从配置文件中读取选项,因此用户总是被迫在命令行中键入选项。(spark-925
  • 不可调整大小的群集:无法从现有的SPARK-EC2群集添加或删除从属群集。(spark-2008
  • 自定义机器图像:SPARK-EC2使用自定义机器图像,用户很难带来自己的图像。而且由于更新这些机器图像的过程不是自动化的,所以它们已经有好几年没有更新了。(spark-3821

我创建Flintrock是为了解决所有这些缺点,它做到了。

既然我们有电子病历,为什么还要建弗林特洛克?

几个月前,我开始在Flintrock工作,emr增加了对Spark的支持。很有可能,如果我考虑比我晚一年建造弗林特洛克,我会决定不建造它。

现在Flintrock已经存在,许多用户都很欣赏与EMR相比运行Flintrock集群的更低成本,以及Flintrock更简单的界面。就我而言,我喜欢在空闲时间和弗林特洛克一起工作。

你为什么不在编曲工具的基础上建立Flintrock?

有人问我是否考虑在Ansible、Terraform、Docker或其他什么东西上建造Flintrock。当弗林特洛克只是我脑子里的一个想法时,我研究了其中的一些东西,并决定不使用它们,原因有两个:

  1. 乐趣:我没有任何使用这些工具的经验,而且从"从头开始"构建东西看起来既简单又有趣。
  2. 焦点:我想要一个焦点非常有限的单用途工具,而不是一个模块或一组脚本,它们是一个庞大的框架的一部分,可以做很多不同的事情。

这些不一定是"白手起家"的正确理由,但它们是我的理由。如果您已经习惯了任何流行的编排工具,您可能会发现使用它们比在工具链中添加新的独立工具更有吸引力。

关于Flintrock徽标

Flintrock logo是使用Highbrow咖啡馆JNL此图标。使用字体和图标的许可证都是从各自的所有者处购买的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误