赞
踩
组件 | 安装包 | 下载地址 |
---|---|---|
Logstash | logstash-8.5.2-linux-x86_64.tar.gz | elastic官网:https://www.elastic.co/cn/downloads/past-releases#logstash elastic中文社区:https://elasticsearch.cn/download/ |
MovieLens 测试数据集 | ml-latest-small.zip | https://grouplens.org/datasets/movielens/ |
自定义部署标准 | 标准描述 |
---|---|
es | elasticsearch不允许使用root账号启动服务,如果你当前账号是root,则需要创建一个专有账户。本文档使用es作为专有用户。 |
/home/es/software | 用于解压安装elasticsearch、java、kibana、logstash的软件安装包和相关配置文件。 |
/home/es/software/logstash | logstash-8.5.2的软连接 |
/home/es/software/ml-latest-small | 解压后的Movielens测试数据集 |
/home/es/software/ml-latest-small的目录结构如图上:
links.csv
文件中的字段数据格式为:movieId,imdbId,tmdbId
movieId: 每部电影的id
imdbId: 电影排行榜
genres: 电影类型
movies.csv
文件里包含了一部电影的id和标题,以及该电影的类别,里包含了一些电影来源的链接。
文件中的字段数据格式为:movieId, title, genres
movieId: 每部电影的id
title: 电影的标题
genres: 电影的类别
ratings.csv
文件里面的数据包含了每一个用户对于每一部电影的评分,数据排序的顺序按照userId和movieId排列的。
文件中的字段数据格式为:userId, movieId, rating, timestamp
userId: 每个用户的id
movieId: 每部电影的id
rating: 用户评分,是5星制,按半颗星的规模递增(0.5 stars - 5 stars)
timestamp:时间戳,自1970年1月1日零点后到用户提交评价的时间的秒数。
tags.csv
文件中的字段数据格式为:userId,movieId,tag,timestamp
userId: 每个用户的id
movieId: 每部电影的id
tag: 电影分类
timestamp:时间戳,自1970年1月1日零点后到用户提交评价的时间的秒数。
本次安装复用es集群的中的192.168.168.1节点,所以新建用户、修改环境变量、安装jdk本次都不在意义叙述。如果需使用,请参考《Elasticsearch集群搭建手册及配置详情(基于elasticsearch-8.5.2版本)》文章。
IP | node.name | 安装组件 |
---|---|---|
192.168.168.1 | node-1 | logstash和MovieLens 测试数据集 |
上传logstash软件包和Movielens数据到/home/es/software目录下
scp logstash-8.5.2-linux-x86_64.tar.gz $ip:/home/es/software
scp ml-latest-small.zip $ip:/home/es/software
解压软件包,为logstash创建软连接,并解压Movielens数据集
cd /home/es/software
tar -zxvf logstash-8.5.2-linux-x86_64.tar.gz
rm -f logstash-8.5.2-linux-x86_64.tar.gz
ln -s logstash-8.5.2 logstash
unzip ml-latest-small.zip
chown -R es:es /home/es
切换到es用户下执行
su - es
cd /home/es/software/logstash/config/
logstash.conf文件重要配置项描述如下:
path: 为Movielens数据集movies.csv文件绝对路径
separator: 为movies.csv文件中的数据分割符
columns: 为movies.csv文件中数据的列名
**hosts: 填写es集群任意节点的curl地址。**默认localhost个别情况下可能无法识别,建议修改为es集群任意节点ip或域名。
index: 填写Movielens数据集的索引名称。movies索引名称可以随意改动
新建logstash.conf文件,在文件中追加如下配置。path和hosts需要修改为对应的配置项,其他配置项不需要做任何改动。
input { file { # 导入文件目录地址 path => "/home/es/software/ml-latest-small/movies.csv" start_position => "beginning" sincedb_path => "nul" } } filter { csv { separator => "," columns => ["id","content","genre"] } mutate { split => { "genre" => "|" } remove_field => ["path", "host","@timestamp","message"] } mutate { split => ["content", "("] add_field => { "title" => "%{[content][0]}"} add_field => { "year" => "%{[content][1]}"} } mutate { convert => { "year" => "integer" } strip => ["title"] remove_field => ["path", "host","@timestamp","message","content"] } } output { elasticsearch { # 连接elasticserach 并导入数据 hosts => "http://192.168.168.1:9200" index => "movies" document_id => "%{id}" } stdout {} }
切换到es用户下,启动Logstash并导入movies.csv数据
su - es
cd /home/es/software/logstash/bin/
./logstash -f /home/es/software/logstash/config/logstash.conf
如果数据导入成功,会打印如下格式的内容。反之,则证明数据导入失败,那就需要看具体的报错信息,重新启动Logstash并开始导入数据。
{ "year" => 2018, "@version" => "1", "log" => { "file" => { "path" => "/home/es/software/ml-latest-small/movies.csv" } }, "event" => { "original" => "193587,Bungo Stray Dogs: Dead Apple (2018),Action|Animation\r" }, "genre" => [ [0] "Action", [1] "Animation" ], "id" => "193587", "title" => "Bungo Stray Dogs: Dead Apple" } { "year" => 1991, "@version" => "1", "log" => { "file" => { "path" => "/home/es/software/ml-latest-small/movies.csv" } }, "event" => { "original" => "193609,Andrew Dice Clay: Dice Rules (1991),Comedy\r" }, "genre" => [ [0] "Comedy" ], "id" => "193609", "title" => "Andrew Dice Clay: Dice Rules" }
查看数据是否导入成功
#kibana页面可以使用如下命令查看集群中的索引
GET /_cat/indices?v
#或者在linux任意节点执行curl命令查看。前提任意节点与es节点网络互通。
curl -s -XGET http://192.168.168.1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open movies Ovg0Oyk5T2OosH0mqUhTSQ 1 1 9743 0 5.2mb 2.6mb
下图可以发现movies索引,证明数据导入成功。
导入失败的原因有很多,可能是logstash.conf文件的path和hosts配置错误,也有可能是文件的权限没有修改为es。这里为大家演示一遍导入第二个索引indextest的方法,以便用于演示重启Logstash再次导入数据的流程。
su - es #1、将logstash.conf文件中的索引名称 movies 修改为 indextest $ sed -i 's#"movies"#"indextest"#g' /home/es/software/logstash/config/logstash.conf #2、验证索引名称是否修改成功 $ grep "index" ../config/logstash.conf index => "indextest" #3、重启Logstash再次导入indextest索引数据 #3.1、jps命令查到Logstash的PID,此时Logstash的PID为21110 $ jps 21110 Logstash 12360 Elasticsearch 23199 Jps #3.2、关闭Logstash进程。kill -9 PID $ kill -9 21110 #3.3、将数据导入到indextest索引中 cd /home/es/software/logstash/bin/ ./logstash -f /home/es/software/logstash/config/logstash.conf
此时可以看到indextest,证明重启Logstash再次导入成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。