2015-05-05 19 views
5

Sto provando a creare un utente Python Amazon Kinesis utilizzando la libreria KCL per Python (https://github.com/awslabs/amazon-kinesis-client-python). Ho iniziato controllando il codice di esempio. Sono stato in grado di eseguire sia le parti del codice di esempio sia quelle di script consumer e consumer, ma non sono in grado di verificare se i dati del mio stream kinesis (con un frammento) vengono trasferiti allo script di esempio Python, sample_kclpy_app.py.Come verificare che il client Python Amazon Kinesis funzioni

Ho utilizzato il amazon_kclpy_helper.py per generare il comando Java che chiamerebbe lo script Python tramite il file sample.properties. Ho eseguito il comando Java e posso vedere dall'output del terminale che vengono letti i dati dal flusso Kinesis. Ho aggiunto un'istruzione print nella funzione process_record dello script consumer Python per verificare se i dati venivano trasferiti su di esso. Ma non appare nell'output del terminale.

Ho anche provato a utilizzare logging per generare messaggi STDOUT, nonché scrivere su un file. Ho anche aggiunto la riga assert 0 nel codice Python per forzare l'esito negativo dello script e visualizzare un'eccezione nell'output del registro. Quindi, ho volutamente aggiunto un errore di sintassi nel codice Python. Tuttavia, sembra che tutti questi non siano stati rilevati da Java MultiLangDaemon, che ha continuato a funzionare e sfornare i messaggi del registro INFO.

Quale potrebbe essere il problema? E c'è un modo migliore per verificare se i dati vengono effettivamente inviati alla funzione process_record dello script consumer Python?

risposta

5

Dopo numerosi tentativi ed errori, ho scoperto che lo script Python assegnato a executableName dovrebbe essere visibile dal processo Java KCL che lo chiama.

La soluzione rapida è quella di impostare la variabile ambientale PATH alla directory dello script e rendere lo script di un file eseguibile (ad esempio chmod +x)

+0

Ho anche dovuto eseguire di nuovo 'python setup.py install' – sheldonkreger

3

Avevo lo stesso problema in cui il mio codice sembrava non funzionare mai. Non è stato fino a quando ho guardato la versione di nodo che ho capito che executableName in sample.properties era il comando che viene eseguito e non solo il nome del file python. Ho cambiato executableName = sample_kclpy_app.py in executableName = python sample_kclpy_app.py e ha iniziato a funzionare come previsto.

+0

Grazie per la risposta. L'ho fatto anche io e l'ho fatto funzionare. Penso che il vero trucco sia che lo script dovrebbe essere visibile ovunque (ad esempio, imposta la variabile PATH nella directory principale dello script). Ho impostato il PATH in modo che indicasse la directory degli script, reso lo script come eseguibile tramite 'chmod' e ottenuto il suo funzionamento. – Carlos