用Samza遠程調(diào)試

2018-08-21 18:21 更新

讓我們使用 Eclipse 將一個遠程調(diào)試器附加到 Samza 容器。如果您是 IntelliJ 用戶,則必須填寫空白,但該過程應該非常相似。本教程假設(shè)您已經(jīng)運行了 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

設(shè)置環(huán)境

現(xiàn)在,我們來設(shè)置 Eclipse 項目文件。

cd samza
./gradlew eclipse

我們還將 Samza 發(fā)布到 Maven 的本地存儲庫,所以 hello-samza 可以訪問它需要的 JAR。

./gradlew -PscalaVersion=2.10 clean publishToMavenLocal

接下來,打開 Eclipse,并將 Samza 源代碼導入到您的工作區(qū):“文件”>“導入”>“現(xiàn)有項目進入工作區(qū)”>“瀏覽”。選擇 'samza' 文件夾,然后點擊 “完成”。

啟用遠程調(diào)試

現(xiàn)在,回到hello-samza項目,并編輯./src/main/config/wikipedia-feed.properties以添加以下行:

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

該 task.opts 配置參數(shù)是在運行時為您 Samza 容器覆蓋的 Java 參數(shù)的方式。在這個例子中,我們正在設(shè)置 agentlib 參數(shù),以便在本地主機端口 9009 上啟用遠程調(diào)試。在更現(xiàn)實的環(huán)境中,您還可以設(shè)置Java堆設(shè)置(-Xmx,-Xms等)以及垃圾回收記錄設(shè)置。

注意:如果您在同一臺機器上運行多個 Samza 容器,則可能會出現(xiàn)端口沖突。您必須配置 task.opts 為不同的 Samza 作業(yè)分配不同的端口。如果 Samza 作業(yè)有多個容器(例如,如果您使用 YARN with job.container.count = 2),那么這些容器必須在不同的機器上運行。

啟動網(wǎng)格

現(xiàn)在 Samza 的作業(yè)已經(jīng)被設(shè)置為在 Samza 容器啟動時啟用遠程調(diào)試,讓我們啟動 ZooKeeper,Kafka 和 YARN。

bin/grid

如果您收到 JAVA_HOME 未設(shè)置的投訴,則需要進行設(shè)置。這可以通過運行在 OSX 上完成:

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

一旦網(wǎng)格啟動,您可以啟動維基百科的 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

當維基百科自動作業(yè)啟動時,將創(chuàng)建一個單個 Samza 容器來處理所有傳入的消息。這是我們要從遠程調(diào)試器連接到的容器。

連接遠程調(diào)試器

切換回 Eclipse,并在 TaskInstance.process 中設(shè)置一個斷點,方法是單擊 TaskInstance.process 中的一行,然后單擊 “Run”>“Toggle Breakpoint”。藍色圓圈應該出現(xiàn)在該行的左側(cè)。這將讓您在收到的郵件到達時看到。

設(shè)置遠程調(diào)試會話:“運行”>“調(diào)試配置...”>右鍵單擊“遠程Java應用程序”>“新建”。將名稱設(shè)為 'wikipedia-feed-debug'。將端口設(shè)置為9009(與task.opts配置中的端口匹配)。點擊 “Source”>“Add ...”>“Java Project”。選擇您導入的所有 Samza 項目(即 samza-api,samza-core 等)。如果您想在自己的 Stream 任務中設(shè)置斷點,還可以添加包含 StreamTask 實現(xiàn)的項目。點擊“調(diào)試”。

過了一會兒,Eclipse 應該連接到維基百科的工作,并要求你切換到調(diào)試模式。一旦進行調(diào)試,您將看到它在 TaskInstance.process 方法中斷開。從這里,您可以逐步執(zhí)行代碼,檢查變量值等。

恭喜,您有一個遠程調(diào)試連接到您的 StreamTask!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號