从零开始实施推荐系统的落地部署——21.推荐系统案例(十一)使用logstash做数据同步

举报
wuyicom 发表于 2020/11/30 23:11:18 2020/11/30
【摘要】 本章只有是mysql建库,建表,导入数据到表中。在通过logstash把mysql数据同步到elasticsearch,并在kibana查看数据有乱码。
  1. 导入数据到mysql

https://github.com/Kidand/dianping-project下载ddl.sql和dml.sql目录/opt/datas,因为mysqldocker的形式安装,要把SQL格式的文档拷贝到mysql/opt/目录里。

docker cp /opt/datas/ddl.sql zabbix-mysql:/opt/

docker cp /opt/datas/dml.sql zabbix-mysql:/opt/ 

如图所示在mas5的主机里。

使用命令进入mysqldocker系统里:docker exec -it zabbix-mysql /bin/bash

在登录mysql数据库里,建立数据库dianpingdb。使用source /opt/ddl.sql建表。在进入dianpingdb,使用source /opt/dml.sql导入数据到表中。

      2. 使用logstash做数据同步

到官方https://www.elastic.co/cn/downloads/past-releases/logstash-7-6-2下载相对应的logstash包,下载到/opt/elk/并进到其目录里。解压tar -zvxf logstash-7.6.2.tar.gz。进到logstash-7.6.2/bin的目录里建立mysql目录,把mysql-connector-java-5.1.40-bin.jar拷贝到mysql文件夹里。

编辑jdbc.sqllast_value_meta,这两个文件的主要作用是判断是否要做数据更新。

jdbc.conf这个配置文件比较重要。配置如下:

input {

    jdbc {

      #设置timezone

      jdbc_default_timezone => "Asia/Shanghai"

      # mysql 数据库链接,dianpingdb为数据库名

      jdbc_connection_string => "jdbc:mysql://mas5.wuyi.com:3306/dianpingdb"

      # 用户名和密码

      jdbc_user => "root"

      jdbc_password => "123456"

      # 驱动 注意:如果不要下面这行代码,那就要把mysql-connector-java-5.1.40-bin.jar放到/opt/elk/logstash-7.6.2/logstash-core/lib/jars目录里即可。

      jdbc_driver_library => "/opt/elk/logstash-7.6.2/bin/mysql/mysql-connector-java-5.1.40-bin.jar"

      # 驱动类名

      jdbc_driver_class => "com.mysql.jdbc.Driver"

      jdbc_paging_enabled => "true"

      jdbc_page_size => "50000"

           codec => plain{ charset => "UTF-8"}

      last_run_metadata_path => "/opt/elk/logstash-7.6.2/bin/mysql/last_value_meta"

    # 执行的sql 文件路径+名称;

      statement_filepath => "/opt/elk/logstash-7.6.2/bin/mysql/jdbc.sql"

      # 设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新

      schedule => "* * * * *"

    }

}

 

output {

    elasticsearch {

      # ESIP地址及端口

        hosts => ["mas2.wuyi.com:9200"]

      # 索引名称

        index => "shop"

       # document_type => "_doc"

      # 自增ID 需要关联的数据库中有有一个id字段,对应索引的id

        document_id => "%{id}"

                   codec => plain{ charset => "UTF-8"}

    }

    stdout {

     # JSON格式输出

        codec => json_lines

    }       

}

配置完成后,使用浏览器打开http://mas2.wuyi.com:5601/app/kibana#/dev_tools/console

建立shop索引,代码如下:

PUT shop

{

  "settings" : {

    "number_of_shards" : 1,

    "number_of_replicas" : 1},

    "mappings": {

      "properties": {

        "id":{

          "type":"integer"},

          "name":{

            "type":"text",

            "analyzer": "ik_max_word",

            "search_analyzer":"ik_smart"},

            "tags":{

              "type":"text",

              "analyzer": "whitespace",

              "fielddata":true},

              "location":{

                "type":"geo_point"},

                "remark_score":{

                  "type":"double"},

                  "price_per_man":{

                    "type":"integer"},

                    "category_id":{

                      "type":"integer"},

                      "category_name":{

                        "type":"keyword"},

                        "seller_id":{

                          "type":"integer"},

                          "seller_remark_score":{

                            "type":"double"},

                            "seller_disabled_flag":{

                              "type":"integer"}

      }

    }

 }

运行后,获取的结果和右图所示一样,说明创建shop索引成功。

使用命令执行./logstash -f mysql/jdbc.conf

虽然执行成功,但是中文出现乱码。即使在jdbc.conf添加inputoutput都添加codec => plain{ charset => "UTF-8"}还是出现乱码。如图所示:

http://mas2.wuyi.com:5601/app/kibana#/dev_tools/console使用GET /shop/_search查询全表,还是乱码。

经多次排查,有可能是之前mysql的编码没弄好出现的问题,进入docker版的mysql,使用show variables like 'character%';查出character_set_client的值为latin1,使用set names utf8;命令把character的值都变为utf8,但是重启docker生效后,character的值有变回到latin1

因为这个mysql配置的数据库太多了,有hue,hive, zabbix。暂时不想弄这个mysql。明天再重新配置一个mysql再做测试。

      这次排查乱码的原因,一直以为是logstash的问题,浪费了很多时间,同时也发现了我对logstash还不熟悉,要多花点时间去学习logstash

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。