工具:
logstash5.1.1
hdfs:
hadoop2.8.3
应用:将mysql中的某个表同步到hdfs系统中。
input {
stdin{}
jdbc {
jdbc_driver_library => "/home/logstash/logstash-5.6.9/lib/mysql-connector-java-5.1.47-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://10.10.x.x:3306/x"
jdbc_user => "root"
jdbc_password => "root"
parameters => { "ip" => "11.12.10.9" }
jdbc_paging_enabled => "true"
schedule => "* * * * *"
statement => "SELECT * FROM bm_device"
}
}
output{
webhdfs{
host => "master"
port => 50070
path => "/usr/logstash/bm_device"
user => "hdfs"
codec => json_lines
}
}
host => "master"可以为ip,也可以为hostname
codec => json_lines一定要设置,这样才能写入到hdfs中。
一开始,我在webhdfs外面设置了,但是并不能成功同步到hdfs中,不准确的脚本如下:
output{
webhdfs{
host => "master"
port => 50070
path => "/usr/logstash/bm_device"
user => "hdfs"
}
stdout{
codec => json_lines
}
}
stdout表示将数据打印到控制台
同步到hdfs中的数据,只有三个默认的字段,如下:
2019-03-18T18:36:00.825Z %{host} %{message}
2019-03-18T18:36:00.826Z %{host} %{message}
2019-03-18T18:36:00.828Z %{host} %{message}
2019-03-18T18:36:00.828Z %{host} %{message}
2019-03-18T18:36:00.829Z %{host} %{message}
2019-03-18T18:36:00.829Z %{host} %{message}
2019-03-18T18:36:00.830Z %{host} %{message}
2019-03-18T18:36:00.830Z %{host} %{message}
2019-03-18T18:36:00.831Z %{host} %{message}
2019-03-18T18:36:00.831Z %{host} %{message}
所以,codec => json_lines一定要设置在webhdfs这个标签的内部,才能作用于hdfs。
codec => json_lines 与codec => json没有明显的区别。