前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linode Cloud中的大数据:使用Apache Storm进行流数据处理

Linode Cloud中的大数据:使用Apache Storm进行流数据处理

作者头像
GongAo啊_
发布2018-09-25 09:07:20
1.3K0
发布2018-09-25 09:07:20
举报
文章被收录于专栏:Maroon1105Maroon1105Maroon1105

Apache Storm是一项大数据技术,使软件,数据和基础架构工程师能够实时处理高速,大容量数据并提取有用信息。任何涉及实时处理高速数据流的项目都可以从中受益。

Zookeeper是Storm依赖于正常运行的关键分布式系统技术。

Linode Cloud中的大数据:使用Apache Storm进行流数据处理
Linode Cloud中的大数据:使用Apache Storm进行流数据处理

Storm是一个很好的解决方案的一些用例:

  • Twitter数据分析(例如,趋势预测或情绪分析)
  • 股市分析
  • 分析服务器日志
  • 物联网(IoT)传感器数据处理

本指南介绍了如何使用一组shell脚本在Linode云上创建Storm集群,这些脚本使用Linode的应用程序编程接口(API)以编程方式创建和配置大型集群。这些脚本都是由本指南的作者通过GitHub存储库提供的。此应用程序堆栈也可能受益于大量磁盘空间,因此请考虑使用我们的Block Storage服务进行此设置。

警告外部资源不在我们的控制之内,可以在我们不知情的情况下进行更改和/或修改。在执行之前,请务必自行查看第三方网站的代码。

部署的体系结构如下所示:

完成集群的体系结构
完成集群的体系结构

从应用程序的角度来看,数据流如下所示:

风暴拓扑和部署
风暴拓扑和部署

应用程序流程从客户端开始,与Storm客户端一起提供用户界面。它与Nimbus节点联系,该节点是Storm集群操作的核心。Nimbus节点获取集群的当前状态,包括来自Zookeeper集群的管理程序节点和拓扑的列表。Storm集群的管理程序节点不断将状态更新为Zookeeper节点,从而确保系统保持同步。

Storm处理和处理数据的方法称为拓扑。拓扑是执行单个操作的组件网络,由作为数据源的spoutbolt组成,它们接受传入的数据并执行诸如运行函数或转换之类的操作。数据本身,称为Storm术语中的,以无限的元组序列的形式出现。

本指南将说明如何配置工作的Storm集群及其Zookeeper节点,但它不会提供有关如何开发用于数据处理的自定义拓扑的信息。有关创建和部署Storm拓扑的更多信息,请参阅Apache Storm教程

开始之前

操作系统要求

  • 本文假设用于集群管理器Linode的初始设置的工作站运行的是Ubuntu 14.04 LTS或Debian 8.这可以是您的本地计算机,也可以是充当远程工作站的其他Linode。其他发行版和操作系统尚未经过测试。
  • 初始设置后,可以使用任何支持SSH的工作站登录到集群管理器Linode或集群节点。
  • 集群管理器Linode可以安装Ubuntu 14.04 LTS或Debian 8。
  • Zookeeper或Storm集群可以在其节点上安装Ubuntu 14.04 LTS或Debian 8。它的分发不需要与集群管理器Linode上安装的分发相同。

注意本指南和引用的bash脚本中的步骤需要root权限。请务必执行以下步骤root。有关权限的更多信息,请参阅“ 用户和组”指南。

命名约定

在本指南中,我们将使用以下名称作为参考我们将要创建的图像和集群的示例:

  • zk-image1 - Zookeeper图像
  • zk-cluster1 - Zookeeper集群
  • storm-image1 - 风暴形象
  • storm-cluster1 - 风暴集群

这些是我们将使用的名称,但欢迎您在创建自己的图像和群集时选择自己的名称。本指南将在所有示例命令中使用这些名称,因此请务必在适用的地方替换您自己的名称。

获取Linode API密钥

按照生成API密钥中的步骤安全地保存密钥。它将在后续步骤中输入配置文件。

如果密钥过期或被删除,请记住创建一个新密钥并更新api_env_linode.conf集群管理器Linode上的API环境配置文件。这将在下一节中进一步解释。

设置Cluster Manager

第一步是设置中央Cluster Manager以存储所有Storm群集的详细信息,并使授权用户能够创建,管理或访问这些群集。这可以是本地工作站或Linode,但在本指南中将是Linode。

  1. 本指南中使用的脚本使用Python与Linode的API进行通信。在您的工作站上,安装Git,Python 2.7和curl: sudo apt-get install python2.7 curl git
  2. 下载项目git存储库: git clone "https://github.com/pathbreak/storm-linode" cd storm-linode git checkout $(git describe $(git rev-list --tags='release*' --max-count=1))
  3. 使shell和Python脚本可执行: chmod +x *.sh *.py
  4. 制作API环境配置文件的工作副本: cp api_env_example.conf api_env_linode.conf
  5. api_env_linode.conf在文本编辑器中打开,并设置LINODE_KEY为先前创建的API密钥(请参阅获取Linode API密钥)。 〜/风暴的Linode / api_env_linode.conf1 export LINODE_KEY=fnxaZ5HMsaImTTRO8SBtg48...
  6. ~/storm-linode/cluster_manager.sh在文本编辑器中打开并更改以下配置设置以自定义Cluster Manager Linode的创建位置和方式:
    • ROOT_PASSWORD:这将是Cluster Manager Linode上的root用户密码,并且是创建节点所必需的。将其设置为您选择的安全密码。Linode要求root密码至少包含以下4种字符类型中的2种:
      • 小写字符
      • 大写字符
      • 数字字符
      • 象征性的人物

      如果密码中有空格,请确保将整个密码括在双引号(")中。如果您的密码中有双引号,美元字符或反斜杠,请使用反斜杠(\)对它们进行转义。

    • PLAN_ID:默认值为1Cluster Manager Linode创建为2GB节点,即最小的计划。这通常就足够了。但是,如果您想要更强大的Linode,请使用以下命令查看所有可用计划及其ID的列表: source ~/storm-linode/api_env_linode.conf ~/storm-linode/linode_api.py plans 注意您只需source在单个终端会话中运行此文件一次,除非您对其进行更改。
    • DATACENTER:这指定了创建Cluster Manager Linode的Linode数据中心。将其设置为最接近您所在位置的数据中心的ID,以减少网络延迟。还建议在将创建映像和群集节点的同一数据中心中创建群集管理器节点,以便它可以使用低延迟专用IP地址与它们通信并减少数据传输使用。 要查看数据中心及其ID列表,请执行以下操作: source ~/storm-linode/api_env_linode.conf ~/storm-linode/linode_api.py datacenters table
    • DISTRIBUTION:这是要在Cluster Manager Linode上安装的分发的ID。本指南仅在Ubuntu 14.04或Debian 8上进行了测试; 其他发行版不受支持。 默认值124选择Ubuntu 14.04 LTS 64位。如果您想使用Debian 8,请将此值更改为140注意本指南中表示的值是发布时的最新值,但将来可能会有所变化。您可以运行~/storm-linode/linode_api.py distributions以查看API中所有可用分布及其值的列表。
    • KERNEL:这是要在Cluster Manager Linode上安装的Linux内核的ID。默认值138选择Linode提供的最新64位Linux内核。建议不要更改此设置。
    • DISABLE_SSH_PASSWORD_AUTHENTICATION:这将禁用SSH密码身份验证,并且仅允许Cluster Manager Linode进行基于密钥的SSH身份验证。密码身份验证被认为不太安全,因此默认情况下禁用。要启用密码身份验证,您可以将此值更改为no

    注意本节中显示的选项由linode_api.py脚本生成,与使用Linode CLI工具显示的选项略有不同。请勿使用Linode CLI工具配置Manager节点。 完成更改后,保存并关闭编辑器。

  7. 现在,创建并设置Cluster Manager Linode: ./cluster_manager.sh create-linode api_env_linode.conf 创建节点后,您应该看到如下输出:
Cluster Manager创建
Cluster Manager创建

请注意Cluster Manager Linode的公共IP地址。登录集群管理器以创建或管理集群时,您将需要此功能。

  1. cluster_manager.sh我们在上一步中运行的脚本在Cluster Manager Linode上创建了三个用户,并为您工作站上的所有用户生成身份验证密钥对,如下图所示:
安全概述
安全概述
  • ~/.ssh/clustermgrroot是Cluster Manager Linode的root用户的私钥。应尽可能限制对此用户凭据的访问。
  • ~/.ssh/clustermgr是Cluster Manager Linode的clustermgr用户的私钥。这是一个特权管理用户,可以创建和管理Storm或Zookeeper集群。应尽可能限制对此用户凭据的访问。
  • ~/.ssh/clustermgrguest是Cluster Manager Linode的clustermgrguest用户的私钥。这是一个无特权的用户,可供需要有关Storm集群的信息的任何人使用,但不能管理它们。这些通常是开发人员,他们需要知道群集的客户端节点IP地址才能向其提交拓扑。

默认情况下禁用对集群管理器的SSH密码身份验证。建议保留默认设置。但是,如果要启用刚刚密码验证clustermgrguest用户为了方便,登录到新创建的群集管理器作为root和下面的行追加到结束/etc/ssh/sshd_config: 的/ etc / SSH / sshd_config中1 2 Match User clustermgrguest PasswordAuthentication yes重新启动SSH服务以启用此更改: service ssh restart 警告由于访问集群管理器可以访问所有Storm和Zookeeper集群及其正在处理的任何敏感数据,因此应将其安全配置视为关键,并且访问应尽可能具有限制性。

  1. root使用创建时显示的公共IP地址,以用户身份登录到集群管理器Linode : ssh -i ~/.ssh/clustermgrroot root@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE
  2. 将主机名更改为更具描述性的名称。在这里,我们将其更改为clustermgr,但如果您愿意,可以使用其他名称替换: sed -i -r "s/127.0.1.1.*$/127.0.1.1\tclustermgr/" /etc/hosts echo clustermgr > /etc/hostname hostname clustermgr
  3. 设置clustermgrclustermgrguest用户的密码: passwd clustermgr passwd clustermgrguest Any administrator logging in as the *clustermgr* user should know this password because they will be asked to enter the password when attempting a privileged command.
  4. cluster_manager.sh从root用户的目录中删除并关闭SSH会话: rm cluster_manager.sh exit
  5. 重新登录到Cluster Manager Linode - 这次是clustermgr用户 - 使用其公共IP地址和clustermgr用户的私钥: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE
  6. 导航到您的storm-linode目录并制作工作副本api_env_example.conf。在这个例子中,我们将其称为api_env_linode.conf: cd storm-linode cp api_env_example.conf api_env_linode.conf
  7. api_env_linode.conf在文本编辑器中打开新创建的文件并设置LINODE_KEY为API密钥。 设置CLUSTER_MANAGER_NODE_PASSWORD为在步骤11中为clustermgr用户设置的密码。 〜/风暴的Linode / api_env_linode.conf1 2 3 export LINODE_KEY=fnxaZ5HMsaImTTRO8SBtg48... ... export CLUSTER_MANAGER_NODE_PASSWORD=changeme保存更改并关闭编辑器。
  8. 集群管理器Linode现在已准备好创建Apache Storm集群。添加将管理群集的任何人的公钥/home/clustermgr/.ssh/authorized_keys,以便他们可以通过SSH以用户身份连接到Cluster Manager Linode clustermgr

创建风暴群

创建新的Storm集群涉及四个主要步骤,其中一些步骤仅在第一次时是必需的,并且在创建后续集群时可以跳过。

创建Zookeeper映像

一个动物园管理员图像是安装了所有必要的动物园管理员软件和库主磁盘映像。我们将使用Linode Images创建我们使用Zookeeper映像的好处包括:

  • 只需克隆它就可以快速创建Zookeeper集群,从而根据需要创建尽可能多的节点,每个节点都是图像的完美副本
  • 所有节点上的分发包和第三方软件包都是相同的,可防止版本不匹配错误
  • 减少网络使用,因为在准备映像时只执行一次下载和更新,而不是在每个节点上重复它们

注意如果Zookeeper映像已存在,则此步骤不是必需的。多个Zookeeper群集可以共享相同的Zookeeper映像。事实上,保持图像数量较低是一个好主意,因为图像存储限制在10GB。 创建映像时,您应该拥有clustermgrCluster Manager Linode的权限。

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 为映像选择唯一的名称,并使用该new-image-conf命令为新映像创建配置目录。在这个例子中,我们将调用我们的新图像zk-image1: ./zookeeper-cluster-linode.sh new-image-conf zk-image1 这将创建一个名为zk-image1包含构成映像配置的文件的目录:
    • zk-image1.conf - 这是主要的图像配置文件,也是您最常修改的文件。其属性将在下一步中介绍。此文件zk-image1.conf在我们的示例中命名,但如果您选择其他图像名称,则可能会有所不同。
    • zoo.cfg - 这是主要的Zookeeper配置文件。有关可以自定义哪些参数的详细信息,请参阅官方Zookeeper配置参数文档。没有必要在此文件中输入群集的节点列表。这是在群集创建期间由脚本自动完成的。
    • log4j.properties - 此文件设置Zookeeper组件的默认日志记录级别。您还可以在创建群集时在节点级别自定义这些。
    • zk-supervisord.conf - Zookeeper守护进程在监督下运行,如果它意外关闭,它将由Supervisord自动重启。这里没有什么可以自定义的,但如果您想了解有关选项的更多信息,可以参考Supervisord配置文档
  3. ./zk-image1/zk-image1.conf在文本编辑器中打开映像配置文件(在此示例中)。根据需要输入或编辑配置属性的值。该属性必须标记为输入或更改的默认值是REQUIRED
    • DISTRIBUTION_FOR_IMAGE 指定Ubuntu 14.04或Debian 8以用于此映像。该指南还没有被任何其他版本或发行测试。 从此图像创建的所有群集的所有节点都将具有此分布。默认值124对应于Ubuntu 14.04 LTS 64位。对于Debian 8 64位,将此值更改为140注意本指南中表示的值是发布时的最新值,但将来可能会有所变化。您可以运行~/storm-linode/linode_api.py distributions以查看API中所有可用分布及其值的列表。
    • LABEL_FOR_IMAGE 一个标签,可帮助您将此图像与其他图像区分开来。如果您在Linode管理器中编辑或查看图像,将显示此名称。
    • KERNEL_FOR_IMAGE Linode提供的内核版本用于此映像。默认值是138,对应于Linode提供的最新64位内核。建议您将其保留为默认设置。
    • DATACENTER_FOR_IMAGE 将创建此映像的Linode数据中心。这可以是任何Linode数据中心,但如果在创建集群的同一数据中心中创建映像,则集群创建会更快。还建议在与Cluster Manager Linode相同的数据中心中创建映像。选择地理位置靠近您的场所的数据中心,以减少网络延迟。如果保持不变,将在Newark数据中心创建Linode。 此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表: ./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
    • IMAGE_ROOT_PASSWORD- 需要 图像的默认root用户密码。从此映像创建的任何群集的所有节点都将此作为root密码,除非它在群集的配置文件中被覆盖。
    • IMAGE_ROOT_SSH_PUBLIC_KEYIMAGE_ROOT_SSH_PRIVATE_KEY 以root用户身份进行SSH公钥认证的密钥对文件。使用此私钥登录的任何用户都可以进行身份​​验证root。 默认情况下,cluster_manager.sh安装程序已经创建了一个名为密钥对clusterrootclusterroot.pub~/.ssh/。如果您希望用自己的密钥对替换这些密钥对,可以在此处创建自己的密钥并设置其完整路径。
    • IMAGE_DISABLE_SSH_PASSWORD_AUTHENTICATION 这将禁用SSH密码身份验证,并且仅允许群集节点使用基于密钥的SSH身份验证。密码身份验证被认为不太安全,因此默认情况下禁用。要启用密码身份验证,您可以将此值更改为no
    • IMAGE_ADMIN_USER 管理员或开发人员可能必须登录到群集节点才能进行维护。而不是以root用户身份登录,最好以特权非root用户身份登录。该脚本在映像中创建具有此名称的特权用户(以及基于此映像的所有集群节点)。
    • IMAGE_ADMIN_PASSWORD- 需要 设置密码IMAGE_ADMIN_USER
    • IMAGE_ADMIN_SSH_AUTHORIZED_KEYS 包含授权登录到群集节点的所有人员的公钥的文件IMAGE_ADMIN_USER。此文件的格式应与标准SSH authorized_keys文件的格式相同。此文件中的所有条目都附加到图像的authorized_keys文件中,并根据此图像继承到所有节点。 默认情况下,cluster_manager.sh安装程序会创建一个新的clusteradmin密钥对,并且此变量将设置为公钥的路径。您可以保留此生成的密钥对,并将生成的私钥文件分~/.ssh/clusteradmin发给授权人员。或者,您可以收集授权人员的公钥并将其附加到~/.ssh/clusteradmin.pub
    • IMAGE_DISK_SIZE 图像磁盘的大小(MB)。默认值5000MB通常就足够了,因为安装只包含安装了Java和Zookeeper软件的操作系统。
    • UPGRADE_OS 如果yes在安装任何软件之前更新和升级了发行版的软件包。建议保留默认设置以避免任何安装或依赖性问题。
    • INSTALL_ZOOKEEPER_DISTRIBUTION 要安装的Zookeeper版本。默认情况下,cluster_manager.sh已经下载了3.4.6版。如果要安装其他版本,请手动下载并更改此变量。但是,建议保留默认值,因为此指南尚未针对其他版本进行测试。
    • ZOOKEEPER_INSTALL_DIRECTORY Zookeeper将在映像上安装的目录(以及从此映像创建的所有集群节点上)。
    • ZOOKEEPER_USER Zookeeper守护程序运行的用户名。这是一项安全功能,可通过利用Zookeeper守护程序中的某些漏洞来避免权限升级。
    • ZOOKEEPER_MAX_HEAP_SIZE 托管Zookeeper守护程序的JVM的最大Java堆大小。该值可以是百分比,也可以是固定值。如果固定值没有任何字符后缀,则将其解释为字节。如果后缀为KMG,则分别将其解释为千字节,兆字节或千兆字节。 如果这太低,可能会导致内存不足错误,并导致Storm群集中的数据丢失或延迟。如果设置得太高,操作系统及其进程的内存将受到限制,导致磁盘抖动,这将对Zookeeper的性能产生严重的负面影响。 默认值为75%,这意味着最多可以为JVM保留75%的Linode RAM,其余的OS和其他进程保留25%。这是强烈建议不要更改此默认设置。
    • ZOOKEEPER_MIN_HEAP_SIZE 为托管Zookeeper守护程序的JVM提交的最小Java堆大小。该值可以是百分比,也可以是固定值。如果固定值没有任何字符后缀,则将其解释为字节。如果后缀为KMG,则分别将其解释为千字节,兆字节或千兆字节。 如果此值低于ZOOKEEPER_MAX_HEAP_SIZE,则提交此内存量,并且ZOOKEEPER_MAX_HEAP_SIZE仅在JVM从OS请求时才分配额外的内存。这可能导致操作期间的内存分配延迟。所以不要把它设得太低。 这个值永远不应该超过ZOOKEEPER_MAX_HEAP_SIZE。如果是,则Zookeeper守护程序将无法启动。 默认值为75%,这意味着75%的Linode RAM已提交(不仅仅是保留)到JVM,并且对任何其他进程都不可用。这是强烈建议不要更改此默认设置。

    完成更改后,保存并关闭编辑器。

  4. 使用create-image命令创建映像,指定新创建的映像的名称和API环境文件: ./zookeeper-cluster-linode.sh create-image zk-image1 api_env_linode.conf 如果图像创建成功,输出结尾将如下所示: Deleting the temporary linode xxxxxx Finished creating Zookeeper template image yyyyyy 如果进程失败,请确保您在Linode Manager中尚未拥有具有相同名称的现有Linode。如果这样做,请将其删除并再次运行该命令,或使用其他名称重新创建此图像。 注意在此过程中,将创建并删除一个临时的,短暂的2GB Linode。这将需要您的月度发票中的少量费用,并触发事件通知电子邮件发送到您在Linode注册的地址。这是预期的行为。

创建Zookeeper群集

在本节中,您将学习如何创建一个新的Zookeeper集群,其中每个节点都是现有Zookeeper映像的副本。如果尚未创建Zookeeper映像,请首先按照创建Zookeeper映像执行此操作

注意如果Zookeeper群集已存在,则此步骤不是必需的。多个Storm群集可以共享同一个Zookeeper群集。 创建群集时,您应该拥有clustermgrCluster Manager Linode的权限。

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 为群集选择唯一的名称,然后使用该new-cluster-conf命令创建配置目录。在这个例子中,我们将调用我们的新集群配置zk-cluster1: ./zookeeper-cluster-linode.sh new-cluster-conf zk-cluster1 这将创建一个名为zk-cluster1包含主配置文件的目录,该目录zk-cluster1.conf将在下一步中介绍。如果在运行上一个命令时选择了其他名称,则会相应地命名目录和配置文件。
  3. 打开新创建的zk-cluster1.conf文件并按如下所述进行更改。必须输入或更改其默认值的属性标记为REQUIRED
    • DATACENTER_FOR_CLUSTER Linode数据中心,将创建此群集的节点。集群的所有节点必须位于同一数据中心; 它们不能跨越多个数据中心,因为它们将使用专用网络流量进行通信。 这可以是任何Linode数据中心,但如果在创建映像和Cluster Manager Linode的同一数据中心中创建集群,则集群创建可能会更快。建议选择地理位置靠近您的场所的数据中心,以减少网络延迟。 此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表: ./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
    • CLUSTER_SIZE 构成此集群的节点的类型和数量。语法是: plan:count plan:count ... A plan2GB | 4GB | ... | 120GB(参见所有计划的Linode计划)之一,并且count是具有该计划的节点数。 例子:
      • 对于具有三个4GB节点的群集: CLUSTER_SIZE="4GB:3"
      • 对于具有三个不同计划节点的集群: CLUSTER_SIZE="2GB:1 4GB:1 8GB:1"

      Zookeeper集群中的节点总数必须为奇数。虽然群集可以包含不同计划的节点,但建议对所有节点使用相同的计划。建议避免使用非常大的集群。对于大多数用例,具有3-9个节点的集群就足够了。11-19节点将被视为“大”。超过19个节点的任何东西都会适得其反,因为在那时,Zookeeper会减慢依赖它的所有Storm集群。 仔细调整集群大小,因为从版本3.4.6开始,Zookeeper不支持动态扩展。调整大小的唯一方法是将其删除并创建一个新群集,为依赖它的任何Storm群集创建停机时间。

    • ZK_IMAGE_CONF- 需要 Zookeeper映像目录或配置文件的路径,用作创建此集群节点的模板。每个节点的磁盘都是该映像的副本。 路径可以是绝对路径,也可以是相对于群集配置目录的路径。使用我们的例子,绝对路径将是/home/clustermgr/storm-linode/zk-image1和相对路径../zk-image1
    • NODE_DISK_SIZE 每个节点磁盘的大小(MB)。这必须至少与所选图像的磁盘一样大,否则图像将无法正确复制。
    • NODE_ROOT_PASSWORD (可选)您可以为节点指定root密码。如果为空,则root密码将IMAGE_ROOT_PASSWORD位于映像配置文件中。
    • NODE_ROOT_SSH_PUBLIC_KEYNODE_ROOT_SSH_PRIVATE_KEY (可选)您可以为root用户身份验证指定自定义SSH公钥文件和私钥文件。如果为空,则键将是映像配置文件中指定的键。 如果要指定自己的密钥对,请为此新密钥对选择一个描述性文件名(例如:zkcluster1root),使用它们生成它们ssh-keygen,并在此处设置它们的完整路径。
    • PUBLIC_HOST_NAME_PREFIX 群集中的每个Linode都有一个公共IP地址,可以从Internet上的任何位置访问,以及一个专用IP地址,只能从同一数据中心内同一用户的其他节点访问。 因此,每个节点都有一个解析为其公共IP地址的公共主机名。每个节点的公共主机将使用该值,接着是多个(例如,public-host1public-host2等)。如果群集管理器节点是在从群集节点不同的Linode的数据中心,它使用公共主机名和公共IP地址进行通信集群节点。
    • PRIVATE_HOST_NAME_PREFIX 群集中的每个Linode都被赋予一个私有主机名,该主机名解析为其私有IP地址。每个节点的私有主机名将使用此值后跟一个数字(例如,private-host1,private-host2等)。群集的所有节点都通过其私有主机名相互通信。这也是使用主机hostname命令为节点设置的实际主机名并保存在/etc/hostname
    • CLUSTER_MANAGER_USES_PUBLIC_IP false如果集群管理器节点与集群节点位于同一 Linode数据中心,请将此值设置为。这是推荐值。true 当集群管理器节点位于与集群节点不同的 Linode数据中心时才更改为。 警告正确设置此选项以避免关键群集创建失败非常重要。
    • ZOOKEEPER_LEADER_CONNECTION_PORT Zookeeper节点用于将其关注者连接到领导者的端口。当选出新的领导者时,每个粉丝在该端口打开与领导者的TCP连接。除非您计划自定义防火墙,否则无需更改此设置。
    • ZOOKEEPER_LEADER_ELECTION_PORT 在法定人数期间用于Zookeeper领导者选举的端口。除非您计划自定义防火墙,否则无需更改此设置。
    • IPTABLES_V4_RULES_TEMPLATE IPv4 iptables防火墙规则文件的绝对路径或相对路径。如果您计划自定义防火墙配置,请对此进行修改。
    • IPTABLES_V6_RULES_TEMPLATE IPv6 iptables防火墙规则文件的绝对路径或相对路径。IPv6在所有节点上完全禁用,并且没有服务侦听IPv6地址。如果您计划自定义防火墙配置,请对此进行修改。

    完成更改后,保存并关闭编辑器。

  4. 使用以下create命令创建集群: ./zookeeper-cluster-linode.sh create zk-cluster1 api_env_linode.conf 如果成功创建群集,则会打印成功消息: Zookeeper cluster successfully created 可以使用以下describe命令查看已创建集群的详细信息: ./zookeeper-cluster-linode.sh describe zk-cluster1 群集节点在创建后很快关闭。它们仅在任何Storm集群启动时启动。

创建风暴图像

一个风暴图像是主盘了所有必要的风暴软件下载和安装时库。创建Storm映像的好处包括:

  • 只需克隆它就可以快速创建一个Storm集群,以创建所需数量的节点,每个节点都是图像的完美副本
  • 分发包和第三方软件包在所有节点上都是相同的,可以防止版本不匹配错误
  • 减少网络使用,因为在准备映像时只执行一次下载和更新,而不是在每个节点上重复它们

注意如果已存在Storm图像,则此步骤不是必需的。多个Storm群集可以共享相同的Zookeeper映像。事实上,保持图像数量较低是一个好主意,因为图像存储限制在10GB。 创建映像时,您应该拥有clustermgrCluster Manager Linode的权限。

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 为映像选择唯一的名称,并使用new-image-conf命令为新映像创建配置目录。在这个例子中,我们将调用我们的新图像storm-image1: ./storm-cluster-linode.sh new-image-conf storm-image1 这将创建一个名为storm-image1包含构成映像配置的文件的目录:
    • storm-image1.conf - 这是主要的图像配置文件,也是你最容易修改的文件。其属性将在后面的步骤中介绍。

    其他文件是辅助配置文件。它们包含合理的默认值,但您始终可以在编辑器中打开它们并根据需要进行修改:

    • template-storm.yaml - Storm配置文件。有关可以自定义哪些参数的详细信息,请参阅官方Storm配置文档。
    • template-storm-supervisord.conf - Storm守护进程在监督下运行,如果它意外关闭,它将由Supervisord自动重启。这里没有什么可以自定义的,但如果您想要自定义它,请查看Supervisord配置文档
  3. ~/storm-linode/storm-image1/storm-image1.conf在文本编辑器中打开映像配置文件(在此示例中)。根据需要输入或编辑配置属性的值。必须输入或更改其默认值的属性标记为REQUIRED
    • DISTRIBUTION_FOR_IMAGE 指定Ubuntu 14.04或Debian 8以用于此映像。该指南还没有被任何其他版本或发行测试。 从此图像创建的所有群集的所有节点都将具有此分布。默认值124对应于Ubuntu 14.04 LTS 64位。对于Debian 8 64位,将此值更改为140注意本指南中表示的值是发布时的最新值,但将来可能会有所变化。您可以运行~/storm-linode/linode_api.py distributions以查看API中所有可用分布及其值的列表。
    • LABEL_FOR_IMAGE 一个标签,可帮助您将此图像与其他图像区分开来。如果您在Linode管理器中编辑或查看图像,将显示此名称。
    • KERNEL_FOR_IMAGE Linode提供的内核版本用于此映像。默认值138对应于Linode提供的最新64位内核。建议您将其保留为默认设置。
    • DATACENTER_FOR_IMAGE 将创建此映像的Linode数据中心。这可以是任何Linode数据中心,但如果在创建集群的同一数据中心中创建映像,则集群创建会更快。还建议在与Cluster Manager Linode相同的数据中心中创建映像。选择地理位置靠近您的数据中心,以减少网络延迟。 此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表: ./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
    • IMAGE_ROOT_PASSWORD- 需要 图像的默认root用户密码。从此映像创建的任何群集的所有节点都将此作为root密码,除非它在群集的配置文件中被覆盖。
    • IMAGE_ROOT_SSH_PUBLIC_KEYIMAGE_ROOT_SSH_PRIVATE_KEY 以root用户身份进行SSH公钥认证的密钥对文件。使用此私钥登录的任何用户都可以作为root身份进行身份验证。 默认情况下,cluster_manager.sh安装程序已经创建了一个名为密钥对clusterrootclusterroot.pub~/.ssh/。如果您希望用自己的密钥对替换它们,您可以创建自己的密钥并在此处设置完整路径。
    • IMAGE_DISABLE_SSH_PASSWORD_AUTHENTICATION 这将禁用SSH密码身份验证,并且仅允许群集节点使用基于密钥的SSH身份验证。密码身份验证被认为不太安全,因此默认情况下禁用。要启用密码身份验证,您可以将此值更改为no
    • IMAGE_ADMIN_USER 管理员或开发人员可能必须登录到群集节点才能进行维护。而不是以root用户身份登录,最好以特权非root用户身份登录。该脚本在映像中创建具有此名称的特权用户(以及基于此映像的所有集群节点)。
    • IMAGE_ADMIN_PASSWORD- 需要 设置密码IMAGE_ADMIN_USER
    • IMAGE_ADMIN_SSH_AUTHORIZED_KEYS 包含授权登录到群集节点的所有人员的公钥的文件IMAGE_ADMIN_USER。此文件的格式应与标准SSH authorized_keys文件的格式相同。此文件中的所有条目都附加到图像的authorized_keys文件中,并根据此图像继承到所有节点。 默认情况下,cluster_manager.sh安装程序会创建一个新的clusteradmin密钥对,并且此变量将设置为公钥的路径。您可以保留此生成的密钥对,并将生成的私钥文件分~/.ssh/clusteradmin发给授权人员。或者,您可以收集授权人员的公钥并将其附加到~/.ssh/clusteradmin.pub
    • IMAGE_DISK_SIZE 图像磁盘的大小(MB)。默认值5000MB通常就足够了,因为安装只包含安装了Java和Storm软件的操作系统。
    • UPGRADE_OS 如果yes在安装任何软件之前更新和升级了发行版的软件包。建议保留默认设置以避免任何安装或依赖性问题。
    • INSTALL_STORM_DISTRIBUTION 要安装的Storm版本。默认情况下,cluster_manager.sh安装程序已下载0.9.5版。如果要安装其他版本,请手动下载并更改此变量。但是,建议保留默认值,因为此指南尚未针对其他版本进行测试。
    • STORM_INSTALL_DIRECTORY Storm将安装在映像上的目录(以及从此映像创建的所有集群节点上)。
    • STORM_YAML_TEMPLATE storm.yaml要在映像中安装的模板配置文件的路径。默认情况下,它指向template-storm.yaml图像目录下的文件。管理员可以在创建映像之前自定义此YAML文件,也可以将此变量设置为指向另一个storm.yaml他们选择的。
    • STORM_USER Storm守护程序运行的用户名。这是一项安全功能,可通过利用Storm守护程序中的某些漏洞来避免权限升级。
    • SUPERVISORD_TEMPLATE_CONF 要在映像中安装的模板管理程序配置文件的路径。默认情况下,它指向template-storm-supervisord.conf Storm映像目录中文件。管理员可以在创建映像之前修改此文件,或将此变量设置为指向storm-supervisord.conf其选择的任何其他文件。

    完成更改后,保存并关闭编辑器。

  4. 使用create-image命令创建映像,指定新创建的映像的名称和API环境文件: ./storm-cluster-linode.sh create-image storm-image1 api_env_linode.conf 如果图像创建成功,输出将看起来像这样: .... Deleting the temporary linode xxxxxx Finished creating Storm template image yyyyyy 如果进程失败,请确保您在Linode Manager中尚未拥有具有相同名称的现有Storm映像。如果这样做,请将其删除并再次运行该命令,或使用其他名称重新创建此图像。 注意在此过程中,将创建并删除短暂的2GB Linode。这将需要在月度发票中支付少量费用,并触发事件通知电子邮件发送到您在Linode注册的地址。这是预期的行为。

创建风暴群

在本节中,您将学习如何创建一个新的Storm集群,其中每个节点都是现有Storm映像的副本。如果尚未创建任何Storm图像,请首先按照创建风暴图像执行此操作

注意创建群集时,您应该拥有clustermgrCluster Manager Linode的权限。

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 为群集选择唯一的名称,然后使用该new-cluster-conf命令创建配置目录。在这个例子中,我们将调用我们的新集群配置storm-cluster1: ./storm-cluster-linode.sh new-cluster-conf storm-cluster1 这将创建一个名为storm-cluster1包含主配置文件的目录,该目录storm-cluster1.conf将在下一步中介绍。如果在运行上一个命令时选择了其他名称,则会相应地命名目录和配置文件。
  3. 打开新创建的storm-cluster1.conf文件并按如下所述进行更改。必须输入或更改其默认值的属性标记为REQUIRED
    • DATACENTER_FOR_CLUSTER Linode数据中心,将创建此群集的节点。集群的所有节点必须位于同一数据中心; 它们不能跨越多个数据中心,因为它们将使用专用网络流量进行通信。 这可以是任何Linode数据中心,但如果在创建映像和Cluster Manager Linode的同一数据中心中创建集群,则集群创建可能会更快。建议选择地理位置靠近您的场所的数据中心,以减少网络延迟。 此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表: ./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
    • NIMBUS_NODE 这指定了用于Nimbus节点的Linode计划,该节点负责向主管节点分发和协调Storm拓扑。 它应该是2GB | 4GB | ... | 120GB(参见Linode所有计划的计划)之一。默认大小为2GB,但强烈建议Nimbus节点使用更大的计划。
    • SUPERVISOR_NODES Supervisor节点是执行构成Storm拓扑的spout和bolt的主力。 应根据群集应同时运行的拓扑数量以及其spout和bolt的计算复杂性来确定Supervisor节点的大小和数量。语法是: plan:count plan:count ... A plan2GB | 4GB| ....| 120GB(参见所有计划的Linode计划)之一,并且count是该计划的监督节点数。虽然群集可以具有不同大小的管理程序节点,但建议对所有节点使用相同的计划。 稍后可以使用该add-nodes命令增加超级用户节点的数量(请参阅扩展群集)。 例子:
      • 创建三个4GB节点: SUPERVISOR_NODES =“4GB:3”
      • 创建具有三个不同计划的六个节点: SUPERVISOR_NODES =“2GB:2 4GB:2 8GB:2”
    • CLIENT_NODE 群集的客户端节点用于向其提交拓扑并对其进行监视。这应该是2GB | 4GB | ... | 120GB(参见Linode所有计划的计划)之一。对于大多数用例,默认值2GB就足够了。
    • STORM_IMAGE_CONF- 需要 Storm映像目录或配置文件的路径,用作创建此集群节点的模板。每个节点的磁盘都是该映像的副本。 路径可以是绝对路径,也可以是相对于此群集配置目录的路径。使用我们的例子,绝对路径将是/home/clustermgr/storm-linode/storm-image1和相对路径../storm-image1
    • NODE_DISK_SIZE 每个节点磁盘的大小(MB)。这必须至少与所选图像的磁盘一样大,否则图像将无法正确复制。
    • NODE_ROOT_PASSWORD (可选)您可以为节点指定root密码。如果为空,则root密码将IMAGE_ROOT_PASSWORD位于映像配置文件中。
    • NODE_ROOT_SSH_PUBLIC_KEYNODE_ROOT_SSH_PRIVATE_KEY (可选)您可以为root用户身份验证指定自定义SSH公钥文件和私钥文件。如果为空,则键将是映像配置文件中指定的键。 如果要指定自己的密钥对,请为此新密钥对选择一个描述性文件名(例如:zkcluster1root),使用它们生成它们ssh-keygen,并在此处设置它们的完整路径。
    • NIMBUS_NODE_PUBLIC_HOSTNAMESUPERVISOR_NODES_PUBLIC_HOSTNAME_PREFIXCLIENT_NODES_PUBLIC_HOSTNAME_PREFIX 群集中的每个Linode都有一个公共IP地址,可以从Internet上的任何位置访问,以及一个专用IP地址,只能从同一数据中心内同一用户的其他节点访问。 因此,每个节点都有一个解析为其公共IP地址的公共主机名。每个节点的公共主机将使用该值,接着是多个(例如,public-host1public-host2等)。如果群集管理器节点是在从群集节点不同的Linode的数据中心,它使用公共主机名和公共IP地址进行通信集群节点。
    • NIMBUS_NODE_PRIVATE_HOSTNAMESUPERVISOR_NODES_PRIVATE_HOSTNAME_PREFIXCLIENT_NODES_PRIVATE_HOSTNAME_PREFIX 群集中的每个Linode都被赋予一个私有主机名,该主机名解析为其私有IP地址。每个节点的私有主机名将使用此值后跟一个数字(例如,private-host1,private-host2等)。群集的所有节点都通过其私有主机名相互通信。这也是使用主机hostname命令为节点设置的实际主机名并保存在/etc/hostname
    • CLUSTER_MANAGER_USES_PUBLIC_IP false如果集群管理器节点与集群节点位于同一 Linode数据中心,请将此值设置为。这是推荐值,也是默认值。true 当集群管理器节点位于与集群节点不同的 Linode数据中心时才更改为。 警告正确设置此选项以避免关键群集创建失败非常重要。
    • ZOOKEEPER_CLUSTER- 需要 此Storm集群使用的Zookeeper集群目录的路径。 这可以是绝对路径,也可以是相对于此Storm群集配置目录的相对路径。使用我们的示例,绝对路径将是/home/clustermgr/storm-linode/zk-cluster1,相对路径将是../zk-cluster1
    • IPTABLES_V4_RULES_TEMPLATE 应用于Nimbus和Supervisor节点的IPv4 iptables防火墙规则文件的绝对路径或相对路径。如果您计划自定义其防火墙配置,请修改此项。
    • IPTABLES_CLIENT_V4_RULES_TEMPLATE 应用于客户机节点的IPv4 iptables防火墙规则文件的绝对路径或相对路径。由于客户机节点托管群集监视Web服务器,并且管理员和开发人员应该可以访问它,因此其规则与其他节点的规则不同。如果您计划自定义其防火墙配置,请修改此项。 默认: ../template-storm-client-iptables-rules.v4
    • IPTABLES_V6_RULES_TEMPLATE 所有节点(包括客户机节点)遵循IPv6 iptables防火墙规则文件的绝对路径或相对路径。IPv6在所有节点上完全禁用,并且没有服务侦听IPv6地址。如果您计划自定义防火墙配置,请对此进行修改。

    完成更改后,保存并关闭编辑器。

  4. 使用以下create命令创建集群: ./storm-cluster-linode.sh create storm-cluster1 api_env_linode.conf 如果成功创建群集,则会打印成功消息: Storm cluster successfully created 可以使用以下describe命令查看已创建集群的详细信息: ./storm-cluster-linode.sh describe storm-cluster1 群集节点在创建后很快关闭。

启动Storm Cluster

本节将介绍如何启动Storm集群。这样做也将启动它所依赖的任何Zookeeper集群,因此不需要单独启动它们。

注意启动集群时,您应该拥有clustermgrCluster Manager Linode的权限。

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 使用该start命令启动Storm集群。此示例使用storm-cluster1上面的命名约定,但如果您选择其他名称,则应在命令中替换它: ./storm-cluster-linode.sh start storm-cluster1 api_env_linode.conf
  3. 如果第一次启动集群,请参阅下一节,了解如何授权用户监控Storm集群

监控Storm Cluster

每个Storm集群的客户端节点都运行一个Storm UI Web应用程序来监控该集群,但只能从列入白名单的工作站访问它。

接下来的两节将介绍如何将工作站列入白名单并从Web界面监控集群。

用于监控风暴群固定链路的白名单工作站

执行本节中的步骤时,您应该拥有clustermgrCluster Manager Linode的权限。

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 在文本编辑器中打开your-cluster/your-cluster-client-user-whitelist.ipsets文件(使用上面的示例storm-cluster1/storm-cluster1-client-user-whitelist.ipsets)文件。 此文件是白名单IP地址的ipsets列表。它由一个主ipset和多个子ipsets组成,它们按IP地址或其他属性(如MAC ID)列出白名单机器。 主ipset命名为your-cluster-uwls。默认情况下,它是完全空的,这意味着没有人被授权。
掌握ipset
掌握ipset
  1. 要将IP地址列入白名单:
    • 取消注释创建your-cluster-ipwl ipset的行
    • 在其下添加IP地址
    • your-cluster-ipwl添加到master ipset your-cluster-uwls

    以下重点介绍了这些新增内容:

白名单条目
白名单条目

注意文件中包含的任何IP地址都应该是面向公众的网络IP地址。例如,公司网络通常会将10.xxx或192.xxx地址等本地地址分配给员工工作站,然后在公司网络外发送请求时将其NAT设置为公共IP地址。由于群集客户端节点位于公司网络外部的Linode云中,因此它将看到来自此公共IP地址的监视请求。所以这是应该列入白名单的公共IP地址。

  1. 可以创建任何数量或类型的附加ipsets,只要它们被添加到主ipset中即可。 有关可用的ipsets类型,请参阅ipset手册中Set Types部分。请注意,手册中列出的某些类型可能在客户端节点上不可用,因为使用Ubuntu或Debian软件包管理器安装的ipset版本可能是旧版本。
  2. 输入所有必需的ipsets,保存文件,然后关闭编辑器。
  3. 使用以下update-user-whitelist命令激活新的ipsets : ./storm-cluster-linode.sh update-user-whitelist storm-cluster1
  4. 从Cluster Manager Linode登录客户机节点: ssh -i ~/.ssh/clusterroot root@storm-cluster1-private-client1 验证是否已正确配置新的ipsets: ipset list 您应该看到类似于以下内容的输出(除了自定义ipsets,如果添加它们,以及Storm和Zookeeper集群节点的ipsets):
ipset输出
ipset输出

断开与客户机节点的连接并导航回storm-linode集群管理器节点上的目录: exit

  1. 从集群管理器节点,获取客户机节点的公共IP地址。应将此IP地址提供给有权访问Storm UI监控Web应用程序的用户。要显示IP地址,请使用以下describe命令: ./storm-cluster-linode.sh describe storm-cluster1
  2. 最后,通过http://public-IP-of-client-node在每个列入白名单的工作站上的Web浏览器中打开来验证是否可以访问Storm UI Web应用程序。您应该看到Storm UI Web应用程序,如下所示:
风暴UI
风暴UI

Storm UI显示拓扑列表和执行它们的主管列表:

风暴UI监控
风暴UI监控

如果群集正在执行任何拓扑,则它们将列在“ 拓扑摘要”部分下。单击拓扑以访问其统计信息,管理程序节点日志或诸如终止该拓扑之类的操作。

测试新的Storm Cluster

  1. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  2. 获取目标集群的客户机节点的私有IP地址。这对于安全性和最小化对数据传输配额的影响是首选,但公共IP地址也起作用: ./storm-cluster-linode.sh describe storm-cluster1
  3. 使用授权私钥通过SSH 以其IMAGE_ADMIN_USER用户(默认为clusteradmin在Storm映像配置文件中配置)登录客户机节点: ssh -i ~/.ssh/clusteradmin clusteradmin@192.168.42.13
  4. 运行以下命令以启动预先安装的字数统计示例拓扑: cd /opt/apache-storm-0.9.5/bin ./storm jar ../examples/storm-starter/storm-starter-topologies-0.9.5.jar storm.starter.WordCountTopology "wordcount"
  5. 成功提交应产生类似于此的输出: Running: java -client -Dstorm.options= -Dstorm.home=/opt/apache-storm-0.9.5 -Dstorm.log.dir=/var/log/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /opt/apache-storm-0.9.5/lib/disruptor-2.10.1.jar:/opt/apache-storm-0.9.5/lib/minlog-1.2.jar:/opt/apache-storm-0.9.5/lib/commons-io-2.4.jar:/opt/apache-storm-0.9.5/lib/clj-time-0.4.1.jar:/opt/apache-storm-0.9.5/lib/clout-1.0.1.jar:/opt/apache-storm-0.9.5/lib/ring-devel-0.3.11.jar:/opt/apache-storm-0.9.5/lib/tools.macro-0.1.0.jar:/opt/apache-storm-0.9.5/lib/ring-jetty-adapter-0.3.11.jar:/opt/apache-storm-0.9.5/lib/jetty-util-6.1.26.jar:/opt/apache-storm-0.9.5/lib/commons-exec-1.1.jar:/opt/apache-storm-0.9.5/lib/tools.cli-0.2.4.jar:/opt/apache-storm-0.9.5/lib/objenesis-1.2.jar:/opt/apache-storm-0.9.5/lib/jetty-6.1.26.jar:/opt/apache-storm-0.9.5/lib/ring-servlet-0.3.11.jar:/opt/apache-storm-0.9.5/lib/storm-core-0.9.5.jar:/opt/apache-storm-0.9.5/lib/hiccup-0.3.6.jar:/opt/apache-storm-0.9.5/lib/clojure-1.5.1.jar:/opt/apache-storm-0.9.5/lib/commons-codec-1.6.jar:/opt/apache-storm-0.9.5/lib/servlet-api-2.5.jar:/opt/apache-storm-0.9.5/lib/compojure-1.1.3.jar:/opt/apache-storm-0.9.5/lib/json-simple-1.1.jar:/opt/apache-storm-0.9.5/lib/commons-logging-1.1.3.jar:/opt/apache-storm-0.9.5/lib/math.numeric-tower-0.0.1.jar:/opt/apache-storm-0.9.5/lib/asm-4.0.jar:/opt/apache-storm-0.9.5/lib/commons-lang-2.5.jar:/opt/apache-storm-0.9.5/lib/clj-stacktrace-0.2.2.jar:/opt/apache-storm-0.9.5/lib/kryo-2.21.jar:/opt/apache-storm-0.9.5/lib/logback-classic-1.0.13.jar:/opt/apache-storm-0.9.5/lib/slf4j-api-1.7.5.jar:/opt/apache-storm-0.9.5/lib/reflectasm-1.07-shaded.jar:/opt/apache-storm-0.9.5/lib/ring-core-1.1.5.jar:/opt/apache-storm-0.9.5/lib/joda-time-2.0.jar:/opt/apache-storm-0.9.5/lib/logback-core-1.0.13.jar:/opt/apache-storm-0.9.5/lib/snakeyaml-1.11.jar:/opt/apache-storm-0.9.5/lib/carbonite-1.4.0.jar:/opt/apache-storm-0.9.5/lib/tools.logging-0.2.3.jar:/opt/apache-storm-0.9.5/lib/core.incubator-0.1.0.jar:/opt/apache-storm-0.9.5/lib/chill-java-0.3.5.jar:/opt/apache-storm-0.9.5/lib/jgrapht-core-0.9.0.jar:/opt/apache-storm-0.9.5/lib/jline-2.11.jar:/opt/apache-storm-0.9.5/lib/commons-fileupload-1.2.1.jar:/opt/apache-storm-0.9.5/lib/log4j-over-slf4j-1.6.6.jar:../examples/storm-starter/storm-starter-topologies-0.9.5.jar:/opt/apache-storm-0.9.5/conf:/opt/apache-storm-0.9.5/bin -Dstorm.jar=../examples/storm-starter/storm-starter-topologies-0.9.5.jar storm.starter.WordCountTopology wordcount 1038 [main] INFO backtype.storm.StormSubmitter - Jar not uploaded to master yet. Submitting jar... 1061 [main] INFO backtype.storm.StormSubmitter - Uploading topology jar ../examples/storm-starter/storm-starter-topologies-0.9.5.jar to assigned location: /var/lib/storm/nimbus/inbox/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar Start uploading file '../examples/storm-starter/storm-starter-topologies-0.9.5.jar' to '/var/lib/storm/nimbus/inbox/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar' (3248678 bytes) [==================================================] 3248678 / 3248678 File '../examples/storm-starter/storm-starter-topologies-0.9.5.jar' uploaded to '/var/lib/storm/nimbus/inbox/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar' (3248678 bytes) 1260 [main] INFO backtype.storm.StormSubmitter - Successfully uploaded topology jar to assigned location: /var/lib/storm/nimbus/inbox/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar 1261 [main] INFO backtype.storm.StormSubmitter - Submitting topology wordcount in distributed mode with conf {"topology.workers":3,"topology.debug":true} 2076 [main] INFO backtype.storm.StormSubmitter - Finished submitting topology: wordcount
  6. 通过在Web浏览器中打开Storm UI来验证拓扑是否正确运行。“wordcount”拓扑应该在“ 拓扑摘要”部分中可见。

上述说明将使用示例“wordcount”拓扑,该拓扑不提供可见输出以显示其正在运行的操作的结果。但是,此拓扑只是对生成的句子中的单词进行计数,因此“发出”下的数字是实际的单词计数。

对于更实际的测试,请随意下载另一个拓扑,例如Reddit Comment Sentiment Analysis Topology,它输出给定subreddits中的基本线程列表,根据该拓扑,随着时间的推移,它具有最多的正面和负面评论。如果您确实选择下载第三方拓扑,请确保它来自可靠的来源,并将其下载到正确的目录。

启动新拓扑

如果您或开发人员已创建拓扑,请执行以下步骤以在其中一个Linode Storm集群上启动新拓扑:

注意开发人员应具有clusteradmin(或clusterroot)授权登录目标Storm集群的客户端节点。 (可选)要获取客户端节点的IP地址,开发人员应具有clustermgrguest(或clustermgrroot)授权登录Cluster Manager Linode。如果其他方法知道IP地址,则不需要此授权。

  1. 将拓扑以及它们所依赖的所有第三方类打包到单个JAR(Java Archive)文件中。
  2. 如果部署了多个群集,请选择目标Storm群集以运行拓扑。获取目标集群的客户机节点的公共IP地址。有关如何执行此操作的详细信息,请参阅群集说明
  3. 将拓扑JAR从本地工作站传输到客户机节点: scp -i ~/.ssh/private-key local-topology-path clusteradmin@public-ip-of-client-node:topology-jar 替换private-keyStorm客户端的私钥,local-topology-pathJAR文件的本地文件路径,PUBLIC-IP-OF-CLIENT-NODEStorm客户端的IP地址,以及topology-jar您希望用于在客户端节点上存储拓扑的文件路径。
  4. 登录到客户端节点clusteradmin,替换为适当的值: ssh -i ~/.ssh/private-key clusteradmin@PUBLIC-IP-OF-CLIENT-NODE
  5. 将拓扑提交到集群: cd /opt/apache-storm-0.9.5/bin ./storm jar topology-jar.jar main-class arguments-for-topology 替换topology-jar.jar为要提交的JAR文件的路径main-class与主类的拓扑结构,并arguments-for-topology通过拓扑结构的主类接受的参数。
  6. 监视新拓扑的执行情况。

注意Storm UI将仅显示有关拓扑执行的信息,而不显示其正在处理的实际数据。数据(包括其输出目标)在拓扑的JAR文件中处理。

其他Storm Cluster Operations

在本节中,我们将介绍管理Storm集群一旦启动并运行的其他操作。

应从storm-linode集群管理器Linode上的目录执行本节中的所有命令。clustermgr除非另有说明,否则您将需要特权。

展开Storm Cluster

如果Storm集群的管理程序节点因过多拓扑或其他CPU密集型作业而过载,则可能有助于添加更多管理程序节点以减轻部分负载。

使用该add-nodes命令展开集群,指定新节点的计划和计数。例如,要将三个新的4GB管理程序节点添加到名为的集群storm-cluster1

./storm-cluster-linode.sh add-nodes storm-cluster1 api_env_linode.conf "4GB:3"

或者,将2GB和两个4GB管理程序节点添加到storm-cluster1

./storm-cluster-linode.sh add-nodes storm-cluster1 api_env_linode.conf "2GB:1 4GB:2"

此语法可用于向现有群集添加任意数量的不同节点。

描述一个Storm Cluster

具有clustermgr授权的用户可以使用describe命令来描述Storm集群:

./storm-cluster-linode.sh describe storm-cluster1

仅具有clustermgrguest授权的用户可以cluster_info.sh用来描述Storm集群,list以获取所有集群的名称列表,以及info描述给定集群的命令。使用该info命令时,还必须指定群集的名称:

./cluster_info.sh list
./cluster_info.sh info storm-cluster1

停止风暴群

停止Storm集群会停止在该集群上执行的所有拓扑,停止所有节点上的Storm守护程序,并关闭所有节点。可以稍后重新启动群集。需要注意的是,节点停止时仍收取每小时收费甚至。

要停止Storm集群,请使用以下stop命令:

./storm-cluster-linode.sh stop storm-cluster1 api_env_linode.conf

破坏风暴群

销毁Storm集群会永久删除该集群的所有节点及其数据。他们将不再收取小时费用。

要销毁Storm集群,请使用以下destroy命令:

./storm-cluster-linode.sh destroy storm-cluster1 api_env_linode.conf

在Storm Cluster 所有节点上运行命令

您可以在Storm集群的所有节点上运行命令(例如,安装软件包或下载资源)。这在更新和升级软件或更改文件权限时也很有用。请注意,使用此方法时,命令将root在每个节点上执行。

要在所有节点上执行命令,请使用该run命令,指定群集名称和要运行的命令。例如,要在以下所有节点上更新软件包存储库storm-cluster1

./storm-cluster-linode.sh run storm-cluster1 "apt-get update"

将文件复制到Storm Cluster 所有节点

您可以将一个或多个文件从集群管理器节点复制到Storm集群的所有节点。这些文件将作为root用户复制到每个节点上,因此在复制需要特定权限的文件时请记住这一点。

  1. 如果文件尚未在您的集群管理器节点上,则首先需要从工作站复制它们。替换local-file本地计算机上文件的名称或路径,以及PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE集群管理器节点的IP地址。您还可以指定其他文件路径并将其替换为~: scp -i ~/.ssh/clustermgr local-files clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE:~
  2. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  3. 执行cp命令,指定每个节点上的目标目录以及要复制的本地文件列表: ./storm-cluster-linode.sh cp target-cluster-name "target-directory" "local-files" 请记住源文件列表之前指定目标目录(这与常规cpscp命令相反)。 例如,如果拓扑需要名为“* .data”的数据文件进行处理,则可以将它们复制到root所有群集节点上的用户主目录,其中包括: ./storm-cluster-linode.sh cp storm-cluster1 "~" "~/*.data"

删除风暴图片

要删除Storm映像,请使用以下delete-image命令:

./storm-cluster-linode.sh delete-image storm-image1 api_env_linode.conf

请注意,此命令将删除图像,但不会删除从中创建的任何群集。

Zookeeper群集操作

在本节中,我们将介绍在Zookeeper集群启动并运行后管理其他操作。

应从storm-linode集群管理器Linode上的目录执行本节中的所有命令。clustermgr除非另有说明,否则您将需要特权。

描述Zookeeper群集

具有clustermgr授权的用户可以使用该describe命令来描述Zookeeper集群:

./zookeepercluster-linode.sh describe zk-cluster1

具有唯一clustermgrguest授权的用户可以使用cluster_info.sh来描述Zookeeper集群,list以获取所有集群的名称列表,以及info描述给定集群的命令。使用该info命令时,必须指定群集的名称:

./cluster_info.sh list
./cluster_info.sh info zk-cluster1

停止Zookeeper群集

停止Zookeeper群集会干净地停止所有节点上的Zookeeper守护程序,并关闭所有节点。可以稍后重新启动群集。请注意,节点仍然招致的Linode的每小时收费停止时。

警告当依赖它的任何Storm集群正在运行时,不要停止Zookeeper集群。这可能会导致数据丢失。

要停止集群,请使用以下stop命令:

./zookeeper-cluster-linode.sh stop zk-cluster1 api_env_linode.conf

销毁Zookeeper群集

销毁Zookeeper群集会永久删除该群集的所有节点及其数据。与仅关闭,销毁或删除的Linode不同,Linodes不再需要每小时收费。

警告在依赖它的任何Storm集群正在运行时,不要销毁Zookeeper集群。它可能会导致数据丢失。

要销毁群集,请使用以下destroy命令:

./zookeeper-cluster-linode.sh destroy zk-cluster1 api_env_linode.conf

在Zookeeper群集 所有节点上运行命令

您可以立即在Zookeeper集群的所有节点上运行命令。在更新和升级软件,下载资源或更改新文件的权限时,这非常有用。请注意,使用此方法时,命令将root在每个节点上执行。

要在所有节点上执行命令,请使用该run命令,指定群集名称和要运行的命令。例如,要在所有节点上更新软件包存储库:

./zookeeper-cluster-linode.sh run zk-cluster1 "apt-get update"

将文件复制到Zookeeper群集 所有节点

您可以将一个或多个文件从集群管理器节点复制到Storm集群的所有节点。这些文件将作为root用户复制到每个节点上,因此在复制需要特定权限的文件时请记住这一点。

  1. 如果文件尚未在您的集群管理器节点上,则首先需要从工作站复制它们。替换local-file本地计算机上文件的名称或路径,以及cluster-manager-IP集群管理器节点的IP地址。您还可以指定其他文件路径并将其替换为~: scp -i ~/.ssh/clustermgr local-files clustermgr@cluster-manager-IP:~
  2. 登录到Cluster Manager Linode,clustermgr然后导航到storm-linode目录: ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode
  3. 执行cp命令,指定每个节点上的目标目录以及要复制的本地文件列表: ./zookeeper-cluster-linode.sh cp target-cluster-name "target-directory" "local-files" 请记住源文件列表之前指定目标目录(这与常规cpscp命令相反)。 例如,如果您的群集需要名为“* .data”的数据文件进行处理,则可以将它们复制到root所有群集节点上的用户主目录,其中包括: ./zookeeper-cluster-linode.sh cp zk-cluster1 "~" "~/*.data"

删除Zookeeper图像

要删除Zookeeper映像,请执行以下delete-image命令:

./zookeeper-cluster-linode.sh delete-image zk-image1 api_env_linode.conf

请注意,此命令将删除图像,但不会删除从中创建的任何群集。

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始之前
  • 操作系统要求
    • 命名约定
      • 获取Linode API密钥
      • 设置Cluster Manager
      • 创建风暴群
        • 创建Zookeeper映像
          • 创建Zookeeper群集
            • 创建风暴图像
              • 创建风暴群
              • 启动Storm Cluster
              • 监控Storm Cluster
                • 用于监控风暴群固定链路的白名单工作站
                • 测试新的Storm Cluster
                • 启动新拓扑
                • 其他Storm Cluster Operations
                  • 展开Storm Cluster
                    • 描述一个Storm Cluster
                      • 停止风暴群
                        • 破坏风暴群
                          • 在Storm Cluster 所有节点上运行命令
                            • 将文件复制到Storm Cluster 所有节点
                              • 删除风暴图片
                              • Zookeeper群集操作
                                • 描述Zookeeper群集
                                  • 停止Zookeeper群集
                                    • 销毁Zookeeper群集
                                      • 在Zookeeper群集 所有节点上运行命令
                                        • 将文件复制到Zookeeper群集 所有节点
                                          • 删除Zookeeper图像
                                          • 更多信息
                                          相关产品与服务
                                          大数据
                                          全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
                                          领券
                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档