×

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 记录


Samza 使用 SLF4J 进行所有日志记录。默认情况下,Samza 只依赖于 slf4j-api ,所以您必须将 SLF4J 运行时的依赖关系添加到您的 Samza 软件包中,以用于任何您希望使用的基础日志平台。

Log4j

该 HELLO-samza 项目展示了如何使用 log4j 与 Samza。要打开 log4j 日志记录,您只需要确保 slz4j-log4j12 在您的 SamzaContainer 的类路径中。在 Maven 中,可以通过在Samza 包项目中添加以下依赖关系来实现。

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <scope>runtime</scope>
  <version>1.6.2</version>
</dependency>

如果您不使用 Maven,请确保 slf4j-log4j12 最终在 Samza 软件包的 lib 目录中。

Log4j配置

如果 Samza包 的 lib 目录中存在 log4j.xml,Samza 的 run-class.sh 脚本将自动设置以下设置。

-Dlog4j.configuration=file:$base_dir/lib/log4j.xml

该 run-class.sh 脚本还将设置以下 Java 系统属性:

-Dsamza.log.dir=$SAMZA_LOG_DIR

该 run-container.sh 还将设置:

-Dsamza.container.id=$SAMZA_CONTAINER_ID -Dsamza.container.name=samza-container-$SAMZA_CONTAINER_ID"

同样,run-am.sh 设置:

-Dsamza.container.name=samza-application-master

如果您使用基于文件的 appender,这些设置非常有用。例如,当通过配置 log4j.xml 达到一定大小时,您可以使用滚动追加程序分隔日志文件:

<appender name="RollingAppender" class="org.apache.log4j.RollingFileAppender">
   <param name="File" value="${samza.log.dir}/${samza.container.name}.log" />
   <param name="MaxFileSize" value="256MB" />
   <param name="MaxBackupIndex" value="20" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%p] %m%n" />
   </layout>
</appender>

建议使用基于文件的 appender 作为使用标准输出的是一个更好的方法。标准的日志文件(见下文)不要滚动,如果用于日志记录,可能会变得非常大。

启动记录器

当使用滚动文件追加程序时,长时间运行的作业通常超过最大文件大小和计数。在这种情况下,日志的开始将丢失。由于日志的开头包括一些最关键的信息,如配置,重要的是不要丢失此信息。为了解决这个问题,Samza 除了正常的记录器之外,还将这些关键信息记录到“启动记录器”中。您可以通过在 log4j.xml 中包含以下代码段将这些日志消息写入单独的有限文件:

<appender name="StartupAppender" class="org.apache.log4j.RollingFileAppender">
   <param name="File" value="${samza.log.dir}/${samza.container.name}-startup.log" />
   <param name="MaxFileSize" value="256MB" />
   <param name="MaxBackupIndex" value="1" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%p] %m%n" />
   </layout>
</appender>
<logger name="STARTUP_LOGGER" additivity="false">
   <level value="info" />
   <appender-ref ref="StartupAppender"/>
</logger>

更改日志级别

有时候,将 Log4J 日志级别从 INFO 更改为在运行时进行调试,以便开发人员可以为展示不良行为的 Samza 容器启用更多日志记录。Samza 提供了一个名为 JmxAppender 的 Log4j 类,它将允许您在运行时动态修改日志级别。JmxAppender 类位于 samza-log4j 包中,可以通过首先向 samza-log4j 包添加运行时依赖关系来打开它:

<dependency>
  <groupId>org.apache.samza</groupId>
  <artifactId>samza-log4j</artifactId>
  <scope>runtime</scope>
  <version>${samza.version}</version>
</dependency>

然后更新您的 log4j.xml 以包含 appender:

<appender name="jmx" class="org.apache.samza.logging.log4j.JmxAppender" />

流Log4j Appender

Samza 提供了一个 StreamAppender 来将日志发布到特定的系统中。您可以使用 “task.log4j.system” 指定系统名称,并使用参数 “StreamName” 更改日志流的名称。此外,我们还有 MDC 密钥 “containerName”,“jobName” 和 “jobId”,帮助您识别日志源。为了使用这个 appender,只需添加:

<appender name="StreamAppender" class="org.apache.samza.logging.log4j.StreamAppender">
   <!-- optional -->
   <param name="StreamName" value="EpicStreamName"/>
   <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%X{containerName} %X{jobName} %X{jobId} %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%p] %m%n" />
   </layout>
</appender>

<appender-ref ref="StreamAppender"/>

到 log4j.xml 并通过指定 config 来定义系统名称:

task.log4j.system="<system-name>"

记录器的默认流名称是使用以下约定生成的,尽管您可以使用 StreamNamelog4j.xml 中的属性来覆盖它,如上所示。java "__samza_%s_%s_logs" format (jobName.replaceAll("_", "-"), jobId.replaceAll("_", "-"))

配置 StreamAppender 将使用 logstash 的 Log4J JSON格式 自动对消息进行编码。Samza 还支持那些喜欢非 JSON 日志记录事件的插件序列化。这可以与其他流序列化器定义相同的方式进行配置:

serializers.registry.log4j-string.class=org.apache.samza.logging.log4j.serializers.LoggingEventStringSerdeFactory
systems.mock.streams.__samza_jobname_jobid_logs.samza.msg.serde=log4j-string

StreamAppender 将始终将邮件发送到由容器名称键入的作业的日志流。

日志目录

Samza 将 SAMZA_LOG_DIR 在执行时查找环境变量。如果定义了此变量,则所有日志将被写入此目录。如果环境变量为空或未定义,则 Samza 将使用 $base_dir,这是从 Samza 的 run-class.sh 脚本一级的目录。这个环境变量也可以在 log4j.xml 文件中引用(见上文)。

垃圾收集记录

Samza 将自动设置以下垃圾回收记录设置,并将其输出 $SAMZA_LOG_DIR/gc.log。

-XX:+PrintGCDateStamps -Xloggc:$SAMZA_LOG_DIR/gc.log

回转

在旧版本的 Java 中,无法使用辅助工具,无法根据时间或大小来滚动 GC 日志。这意味着在 Samza 作业停止运行之前,您的 GC 日志永远不会被删除。从 Java 6 Update 34 和 Java 7 Update 2开始,添加了新的GC命令行开关来支持此功能。如果 JVM 支持 GC 日志文件旋转,Samza 还将设置:

-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10241024

YARN

当在 YARN 网格上执行 Samza 作业时,$SAMZA_LOG_DIR 环境变量将指向受保护的目录,以便只有执行 Samza 作业的用户才能读取并写入,如果 YARN 被安全地配置。

STDOUT

Samza 的ApplicationMaster将所有 STDOUT 和 STDERR 输出分别管理到 logs / stdout 和 logs / stderr。这些文件永远不会旋转。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)