WhereHows是LinkedIn公司开源的元数据管理系统,描述了数据相关的元信息,比如字段信息、存储位置、数据的血源关系等。
wiki:https://github.com/linkedin/WhereHows/wiki
github: https://github.com/linkedin/WhereHows
1. 背景
由于最近公司内数据量逐渐增大,并且来源多样,对于数据分析组的同事,想快速找到想要的相关数据,还是比较麻烦的一件事,需要找各个业务线的人去询问,阅读各种各样的文档。显然,需要一个统一的管理工具来对自己的一方数据进行更好的组织和梳理。于是调研了WhereHows,发现其以下的特性还是挺不错的:
- 通过ETL插件可接入不同的数据源
- 提供了基于Markdown的字段描述能力
- 对不同数据源统一模型,并支持定时抽取能力
- 强大的搜索能力
一段WhereHows的爬坑之旅开启...
2. 安装编译
基本的安装过程可参考wiki,官方虽然提供了Quick Start with VM,但大小有11G,没有使用这种方案,而是基于源码进行编译安装。
需要注意的是:
- 在创建数据库,并执行data-model目录下的DDL语句时,可能会出现时区问题而导致失败,这个时候检查一下DDL中的语句,发现需要调整time_zone相关的设置,默认为US,改为system或local,问题解决
- 部分表的创建,不是UTF8方式,会导致后续数据源中的中文字符无法正常显示,可调整为UTF8
3. 启动
在根目录下执行./gradlew build可进行编译,完成后,可以不着急执行dist命令发布,在生成的target目录中,找到执行文件的命令进行启动即可。
需要启动的有两个服务,包括backend-service 和web服务。启动前,留意下两个服务代码目录下的application.conf配置。
假设启动时,backend-service端口为19001,web服务端口为9000。正常启动后,进入localhost:9000 页面,可看到登陆窗口,可以通过创建新用户或者在后台数据库中的user表增加一个用户,用来登陆。
登陆成功后,左侧的列表页中空空如也,因为还没有配置要抓取的数据源。
4.配置数据源
先看下官方说明:
https://github.com/linkedin/WhereHows/wiki/Set-Up-New-Metadata-ETL-Jobs
我估计这个文档更新的不是那么及时,但是不看也不行,因为添加数据源,是通过Restful API来进行的,总要了解下需要哪些参数。于是,我打开Postman,开始手动敲配置。(此过程相当艰辛,因为总有那么几个参数是文档上没有提到的,需要追下源码看看)
第一个接口,添加应用基本信息,此处以Hive为例 :
Post localhost:19001/cfg/app
Post Body:
{ "app_id":"hive_app_id_0412", "app_code":"hive_app_code", "description":"hive_desc", "short_connection_string":"hive", "parent_app_id":0, "app_status":"A" }
第二个接口,配置定时调度及属性
Post http://localhost:19001/etl
{ "wh_etl_job_name": "HIVE_DATASET_METADATA_ETL", "ref_id": 1, //此ID是之前调用第一个接口时,数据库中产生的主键ID "cron_expr": "0 0/5 * * * ?", //定时执行的cron表达式 "properties": {"hive.metastore.jdbc.url":"jdbc:mysql://localhost:3307/hive_meta?useSSL=false", "hive.metastore.jdbc.driver":"com.mysql.jdbc.Driver", "hive.metstore.username":"dtowner", "hive.metastore.password":"ahNe", "hive.schema_json_file":"/tmp/wherehows/json", "hive.schema_csv_file":"/tmp/wherehows/csv", "hive.field_metadata":"/tmp/wherehows/field" }, "timeout": null, "next_run": null, "comments": "hive metadata etl" }
配置完成后,backend服务会按照配置的周期来执行抓取任务,更新自身mysql中的元数据信息。
5.结语
在配置数据源的过程中,可能会出现一些异常情况,通过查看运行日志可以看到具体信息。同时,仍然需要去看下插件的源码来定位问题。下一篇文章,会简述WhereHows的源码结构以及如何开发自定义的ETL插件。
网友评论