V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tqccc
V2EX  ›  分享创造

通过 Hive 查询语句查出结果集,向 elasticsearch 导入结果集的小工具

  •  
  •   tqccc · 2017-09-03 21:18:06 +08:00 · 2955 次点击
    这是一个创建于 2643 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过 Hive 查询语句查出结果集,向 elasticsearch 导入结果集的小工具

    公司的数据分析经常需要看各种报表,多是分析统计类需求,类 SQL 语言适合做具有筛选逻辑的数据(有时候有的数据无法从业务主库中查出来,只能直接前端埋点),Elasticsearch 适合做统计,而且结合 Kibana 可以直接生成报表!

    耗时查询不宜直接在线上查,还好公司已经实现每天在访问低谷期同步线上数据到 Hadoop 大数据中心。

    对这类常有的统计类需求,我的做法是先用 HQL 做筛选逻辑,ES 拿到数据再进行聚合统计,如每天、每月、某人的数据。 结合 ES 其实更多是因为需求方喜欢 Kibana 的图


    脚本使用说明 命令 #python hive_to_es.py <配置文件目录>
    配置文件使用说明: 使用.ini 后缀的配置文件

    [es]
    -- Elasticserch 地址、用户名、密码
    hosts = 192.168.2.100:9200
    username = elastic
    password = 888888

    [hive]
    -- Hive 地址、端口、数据库名、用户等配置

    host = 127.0.0.1
    port = 10000
    authMechanism = PLAIN
    user = sa_cluster
    database = julanling_g

    -- HiveQL 文件位置
    hql_path = ./hql_test.sql

    -- 存入 ES 时的分页大小
    -- 为了防止结果集过大,导致查询时内存吃不消,建议配置此项,无分页配置时默认分页大小 3000
    page_size = 2

    [es_bulk]
    -- 存入 ES 时,定义一个文档中的各个字段名称,注意与查询结果的各个字段按顺序对应,才能得到对应正确的数据值
    -- 如该例的 HQL 为 select r_name, r_id from user_role
    -- ES 文档:{"role_name": "xxx", "role_id":123}
    columns = role_name,role_id

    -- 存入 ES 的目标 index 和 type
    index = tqc_test
    type = tqc_test_type

    5 条回复    2017-09-04 09:37:33 +08:00
    tqccc
        1
    tqccc  
    OP
       2017-09-03 21:46:44 +08:00   ❤️ 1
    忘了给出工具地址 233
    在这: https://github.com/TQCCC/hive_to_es_by_hql
    movistar
        2
    movistar  
       2017-09-03 22:20:01 +08:00
    为啥不用官方工具....
    https://www.elastic.co/guide/en/elasticsearch/hadoop/current/hive.html
    相比之下功能更完善一点
    Cu635
        3
    Cu635  
       2017-09-04 02:07:17 +08:00
    乍一看还以为是生化危机。。。
    tqccc
        4
    tqccc  
    OP
       2017-09-04 08:42:07 +08:00 via Android
    @movistar 这个一开始就用,但是一直出错,提示 Cannot detect ES version ……,可能是我的 hive 版本太低,elasticsearch 是 5.5.1 的。尝试多次还是放弃了😔
    movistar
        5
    movistar  
       2017-09-04 09:37:33 +08:00
    怎么不科学?
    理论上用的是 HTTP 协议
    并不会出现 TCP Client 那种问题
    版本差太多?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2914 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:00 · PVG 21:00 · LAX 05:00 · JFK 08:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.