用Samza远程调试

2018-08-21 18:21 更新

让我们使用 Eclipse 将一个远程调试器附加到 Samza 容器。如果您是 IntelliJ 用户,则必须填写空白,但该过程应该非常相似。本教程假设您已经运行了 Hello Samza 教程。

获取代码

首先检查Samza,所以我们可以访问源。

git clone http://git-wip-us.apache.org/repos/asf/samza.git

接下来,抓住你好萨姆扎。

git clone https://git.apache.org/samza-hello-samza.git

设置环境

现在,我们来设置 Eclipse 项目文件。

cd samza
./gradlew eclipse

我们还将 Samza 发布到 Maven 的本地存储库,所以 hello-samza 可以访问它需要的 JAR。

./gradlew -PscalaVersion=2.10 clean publishToMavenLocal

接下来,打开 Eclipse,并将 Samza 源代码导入到您的工作区:“文件”>“导入”>“现有项目进入工作区”>“浏览”。选择 'samza' 文件夹,然后点击 “完成”。

启用远程调试

现在,回到hello-samza项目,并编辑./src/main/config/wikipedia-feed.properties以添加以下行:

task.opts=-agentlib:jdwp=transport=dt_socket,address=localhost:9009,server=y,suspend=y

该 task.opts 配置参数是在运行时为您 Samza 容器覆盖的 Java 参数的方式。在这个例子中,我们正在设置 agentlib 参数,以便在本地主机端口 9009 上启用远程调试。在更现实的环境中,您还可以设置Java堆设置(-Xmx,-Xms等)以及垃圾回收记录设置。

注意:如果您在同一台机器上运行多个 Samza 容器,则可能会出现端口冲突。您必须配置 task.opts 为不同的 Samza 作业分配不同的端口。如果 Samza 作业有多个容器(例如,如果您使用 YARN with job.container.count = 2),那么这些容器必须在不同的机器上运行。

启动网格

现在 Samza 的作业已经被设置为在 Samza 容器启动时启用远程调试,让我们启动 ZooKeeper,Kafka 和 YARN。

bin/grid

如果您收到 JAVA_HOME 未设置的投诉,则需要进行设置。这可以通过运行在 OSX 上完成:

export JAVA_HOME=$(/usr/libexec/java_home)

一旦网格启动,您可以启动维基百科的 Samza 工作。

mvn clean package
mkdir -p deploy/samza
tar -xvf ./target/hello-samza-0.12.0-dist.tar.gz -C deploy/samza
deploy/samza/bin/run-job.sh --config-factory=org.apache.samza.config.factories.PropertiesConfigFactory --config-path=file://$PWD/deploy/samza/config/wikipedia-feed.properties

当维基百科自动作业启动时,将创建一个单个 Samza 容器来处理所有传入的消息。这是我们要从远程调试器连接到的容器。

连接远程调试器

切换回 Eclipse,并在 TaskInstance.process 中设置一个断点,方法是单击 TaskInstance.process 中的一行,然后单击 “Run”>“Toggle Breakpoint”。蓝色圆圈应该出现在该行的左侧。这将让您在收到的邮件到达时看到。

设置远程调试会话:“运行”>“调试配置...”>右键单击“远程Java应用程序”>“新建”。将名称设为 'wikipedia-feed-debug'。将端口设置为9009(与task.opts配置中的端口匹配)。点击 “Source”>“Add ...”>“Java Project”。选择您导入的所有 Samza 项目(即 samza-api,samza-core 等)。如果您想在自己的 Stream 任务中设置断点,还可以添加包含 StreamTask 实现的项目。点击“调试”。

过了一会儿,Eclipse 应该连接到维基百科的工作,并要求你切换到调试模式。一旦进行调试,您将看到它在 TaskInstance.process 方法中断开。从这里,您可以逐步执行代码,检查变量值等。

恭喜,您有一个远程调试连接到您的 StreamTask!

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号