尝试从python代码创建一个简单的流数据,附加到日志文件,然后使用Kinesis Agent-> Kinesis Firehose将流数据加载到Redshift集群。
我确认python代码运行正常,创建了附加到日志文件的流数据。 我的kinesis代理已成功启动并且我已经验证,并且还进行了适当的配置以从日志文件中提取数据并将其推送到firehose流。
python文件是一个简单的代码,可以随机记录纬度/长度位置。这只是做一个示例firehose流,因此使用了样本数据:
latitude = 19.99
longitude = 73.78
file_n = '/tmp/random_lat_lon.log'
def generate_random_data(lat, lon, num_rows, file_name):
with open(file_name, 'w+', 1) as output:
# for _ in xrange(num_rows):
while True:
hex1 = '%012x' % random.randrange(16**12)
flt = float(random.randint(0,100))
dec_lat = random.random()/100
dec_lon = random.random()/100
output.write('%s,%.1f,%.6f,%.6f \n' % (hex1.lower(), flt, lon+dec_lon, lat+dec_lat))
time.sleep(5)
generate_random_data(latitude, longitude, 5, file_n)
random_lat_lon.log文件中的输出:
> 83d6c9f7a0be,25.0,73.782042,19.997504
> 18b69c5c5248,25.0,73.788921,19.995153
> 6a0d182996f0,91.0,73.783399,19.998097
> 431ba9e4f38e,0.0,73.781139,19.995481
当我检查kinesis-Agent时,我发现它无效,我收到以下错误跟踪:
(FileTailer[kinesis:python-stream:/tmp/random_lat_lon.log*]) com.amazon.kinesis.streaming.agent.tailing.FileTailer [ERROR] FileTailer[kinesis:python-stream:/tmp/random_lat_lon.log*]: Error when processing current input file or when tracking its status.
java.lang.IllegalStateException
at com.google.common.base.Preconditions.checkState(Preconditions.java:158)
at com.amazon.kinesis.streaming.agent.tailing.TrackedFileRotationAnalyzer.findCurrentOpenFileAfterTruncate(Unknown Source)
at com.amazon.kinesis.streaming.agent.tailing.SourceFileTracker.updateCurrentFile(Unknown Source)
at com.amazon.kinesis.streaming.agent.tailing.SourceFileTracker.refresh(Unknown Source)
at com.amazon.kinesis.streaming.agent.tailing.FileTailer.updateRecordParser(Unknown Source)
at com.amazon.kinesis.streaming.agent.tailing.FileTailer.processRecords(Unknown Source)
at com.amazon.kinesis.streaming.agent.tailing.FileTailer.runOnce(Unknown Source)
at com.amazon.kinesis.streaming.agent.tailing.FileTailer.run(Unknown Source)
at com.google.common.util.concurrent.AbstractExecutionThreadService$1$2.run(AbstractExecutionThreadService.java:60)
at com.google.common.util.concurrent.Callables$3.run(Callables.java:95)
at java.lang.Thread.run(Thread.java:748)
我的kinesis-Agent.json配置如下:
{
"cloudwatch.emitMetrics": true,
"kinesis.endpoint": "https://kinesis.us-east-1.amazonaws.com",
"firehose.endpoint": "",
"flows": [
{
"filePattern": "/tmp/random_lat_lon.log*",
"kinesisStream": "python-stream"
}
]
}
这是我第一次使用Kinesis Firehose(使用Python)的示例实验室体验。我错过了一些我无法弄清楚的东西。
有人可以帮忙提出建议。如果需要任何细节,请告诉我。
此致
答案 0 :(得分:1)
我正面临着同样的问题。看起来像是来自Amazon-kinesis-agent的open issue。我通过使用扩展名为.dummy的文件解决了该问题,因此代理可以在任何给定时间点读取文件。