×

Samza 入门

Samza 你好Samza 下载Samza 功能预览

Samza 详细介绍

Samza 背景Samza 概念Samza 结构

Samza 与其他流处理项目比较

Samza 比较介绍Samza MUPD8Samza 与 StormSamza 与 Spark Streaming

Samza API

Samza API概述

Samza 核心

Samza ContainerSamza 流Samza 序列化Samza 定期检查Samza 状态管理Samza 窗口功能Samza 协调器流Samza 事件循环Samza 指标Samza JMX

Samza 作业部署

Samza JobRunnerSamza 配置Samza 打包Samza YARN工作Samza 记录Samza 再处理Samza Web UI和REST APISamza 分离框架和作业部署

Samza YARN

Samza Application MasterSamza YARN执行隔离Samza 主机关联和 YARNSamza YARN资源本地化Samza YARN安全Samza 写入HDFSSamza 从HDFS文件读取

Samza 相关操作

Samza 安全Samza Kafka自动创建主题

Samza REST服务

Samza REST服务概观Samza REST服务资源Samza REST服务监视器

Samza 附录

附录一 工作资源附录二 任务资源附录三 远程调试附录四 从HDFS部署Samza工作附录五 部署Samza Job到CDH附录六 在多节点YARN中运行附录七 在没有联网的情况下运行附录八 Samza REST入门附录九 Async API和多线程指南附录十 代码附录十一 Samza配置参考

Samza 从HDFS文件读取


您可以将 Samza 作业配置为从 HDFS 文件中读取。HdfsSystemConsumer 可以从HDFS文件中读取。Avro 编码记录支持开箱即用,易于扩展以支持其他格式(纯文本,csv,json 等)。参见 Event format 下面的部分。

环境

您的工作需要在托管您要消费的 HDFS 的同一个 YARN 群集上运行。

分区

分区工作在单独的 HDFS 文件级别。每个文件被视为流分区,而包含这些文件的目录是流。例如,如果要从包含10个单独文件的 HDFS 路径中读取,则自然会创建10个分区。您最多可以配置10个 Samza 容器来处理这些分区。如果要从单个 HDFS 文件中读取,目前无法分解消耗 - 只能有一个容器来处理该文件。

事件格式

HdfsSystemConsumer 目前支持从 avro 文件读取。收到的 IncomingMessageEnvelope 包含三个重要的字段:

  1. 空的关键
  2. 设置为 avro GenericRecord 的消息
  3. 流分区设置为 HDFS 文件的名称

为了将支持扩展到 avro 文件(例如 json,csv 等)之外,您可以实现接口 SingleFileHdfsReader(以一个示例的形式查看 AvroFileHdfsReader 的实现)。

结束流支持

HDFS 数据和 Kafka 数据之间的一个主要区别是,当 kafka 主题具有无限的消息流时,HDFS 文件是有限的,并且具有 EOF 的概念。

当所有分区都在流结束时,您可以选择实现 EndOfStreamListenerTask 来接收回调。当任务处理的所有分区都处于流结束(即所有文件都已达到 EOF)时,Samza 作业将自动退出。

基本配置

以下是设置 HdfsSystemConsumer 的几个基本配置:

# The HDFS system consumer is implemented under the org.apache.samza.system.hdfs package,
# so use HdfsSystemFactory as the system factory for your system
systems.hdfs-clickstream.samza.factory=org.apache.samza.system.hdfs.HdfsSystemFactory

# You need to specify the path of files you want to consume in task.inputs
task.inputs=hdfs-clickstream.hdfs:/data/clickstream/2016/09/11

# You can specify a white list of files you want your job to process (in Java Pattern style)
systems.hdfs-clickstream.partitioner.defaultPartitioner.whitelist=.*avro

# You can specify a black list of files you don't want your job to process (in Java Pattern style),
# by default it's empty.
# Note that you can have both white list and black list, in which case both will be applied.
systems.hdfs-clickstream.partitioner.defaultPartitioner.blacklist=somefile.avro

安全配置

访问启用了 kerberos的HDFS 群集时,需要以下附加配置:

# Use the SamzaYarnSecurityManagerFactory, which fetches and renews the Kerberos delegation tokens when the job is running in a secure environment.
job.security.manager.factory=org.apache.samza.job.yarn.SamzaYarnSecurityManagerFactory

# Kerberos principal
yarn.kerberos.principal=your-principal-name

# Path of the keytab file (local path)
yarn.kerberos.keytab=/tmp/keytab

高级配置

您可能需要设置的一些高级配置:

# Specify the group pattern for advanced partitioning.
systems.hdfs-clickstream.partitioner.defaultPartitioner.groupPattern=part-[id]-.*

高级分区超出了每个文件是分区的基本假设。使用高级分区,您可以任意地将文件分组到分区。例如,如果您有一组文件为 [part-01-a.avro,part-01-b.avro,part-02-a.avro,part-02-b.avro,part-03-a.avo] 你想组织成三个分区(part-01-a.avro,part-01-b.avro),(part-02-a.avro,part-02-b.avro),(part- 03-a.avro),其中中间的数字作为“组标识符”,您可以将此属性设置为 “part- [id] - “(请注意,* [id] ** 是这里的保留期限,即您必须将其字面意思放在 [id])。分区器将该模式应用于所有文件名,并提取模式中的“组标识符”(“[id]”),然后使用“组标识符”将文件分组到分区。

# Specify the type of files your job want to process (support avro only for now)
systems.hdfs-clickstream.consumer.reader=avro

# Max number of retries (per-partition) before the container fails.
system.hdfs-clickstream.consumer.numMaxRetries=10

更多信息

HdfsSystemConsumer设计文档


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)