tonglin0325的个人主页

wherehows踩坑记录

wherehows是Linkedin开源的大数据治理框架,提供了元数据管理,数据血缘,数据预览,集成多种数据源的功能,最近在进行调研工作

类似的框架有Netflix的metacat,这个两个开源项目都是坑不少,目前还在踩坑阶段中…由于网上关于这两个项目的文章有价值,本文希望能对你有帮助

其他公司也有很多类似的数据发现系统,参考:Data Discovery Platforms and Their Open Source Solutions

 

首先的坑是项目文档不统一的问题,项目首页的文档和get-start的文档不一致,get-start的文档比较首页的文档步骤要多不少

1
2
https://github.com/linkedin/WhereHows

 

1
2
https://github.com/linkedin/WhereHows/blob/master/wherehows-docs/getting-started.md

 wherehows提供了VM和quick start版本,我根本就没有去看这个版本,直接尝试了从源码编译

1.官方的guide第一步是让你创建mysql的用户和密码

1
2
3
4
5
6
7
8
CREATE DATABASE wherehows
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

CREATE USER 'wherehows';
SET PASSWORD FOR 'wherehows' = PASSWORD('wherehows');
GRANT ALL ON wherehows.* TO 'wherehows';

去workbench中查看一下 users and privileges , 多了wherehows用户

2.第二步,从github上git clone源代码,我git的是master分支

1
2
git@github.com:linkedin/WhereHows.git

3.在刚刚创建的wherehows database中做一些初始化的操作

wherehows这个database还是空的,官方的教程是 Execute the DDL files to create the required repository tables in wherehows database.

就是让你执行 wherehows-data-model/DDL 目录下的脚本来创建表以及插入一些数据

到这个子项目中查看一下 READMR文档 ,执行下面的代码来批量创建表和插入数据

1
2
3
cd WhereHows/wherehows-data-model/DDL
mysql -hlocalhost -uwherehows -pwherehows -Dwherehows < create_all_tables_wrapper.sql

成功的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
lintong@master:~/coding/java/WhereHows/wherehows-data-model/DDL$ mysql -hlocalhost -uwherehows -pwherehows -Dwherehows < create_all_tables_wrapper.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
Tables_in_wherehows
cfg_application
cfg_cluster
cfg_data_center
cfg_database
cfg_deployment_tier
cfg_job_type
cfg_job_type_reverse_map
cfg_object_name_map
cfg_search_score_boost
comments
dataset_capacity
dataset_case_sensitivity
dataset_compliance
dataset_constraint
dataset_deployment
dataset_index
dataset_inventory
dataset_owner
dataset_partition
dataset_partition_layout_pattern
dataset_reference
dataset_schema_info
dataset_tag
dict_business_metric
dict_dataset
dict_dataset_field_comment
dict_dataset_instance
dict_dataset_sample
dict_dataset_schema_history
dict_field_detail
dir_external_group_user_map
dir_external_group_user_map_flatten
dir_external_user_info
favorites
field_comments
filename_pattern
flow
flow_dag
flow_execution
flow_execution_id_map
flow_job
flow_owner_permission
flow_schedule
flow_source_id_map
job_attempt_source_code
job_execution
job_execution_data_lineage
job_execution_ext_reference
job_execution_id_map
job_execution_script
job_source_id_map
log_dataset_instance_load_status
log_lineage_pattern
log_reference_job_id_pattern
source_code_commit_info
stg_cfg_object_name_map
stg_database_scm_map
stg_dataset_owner
stg_dataset_owner_unmatched
stg_dict_business_metric
stg_dict_dataset
stg_dict_dataset_field_comment
stg_dict_dataset_instance
stg_dict_dataset_sample
stg_dict_field_detail
stg_dir_external_group_user_map
stg_dir_external_group_user_map_flatten
stg_dir_external_user_info
stg_flow
stg_flow_dag
stg_flow_dag_edge
stg_flow_execution
stg_flow_job
stg_flow_owner_permission
stg_flow_schedule
stg_git_project
stg_job_execution
stg_job_execution_data_lineage
stg_job_execution_ext_reference
stg_product_repo
stg_repo_owner
stg_source_code_commit_info
track_object_access_log
user_login_history
user_settings
users
watch
wh_etl_job_history
wh_etl_job_schedule

4.由于这个项目是gradle构建的,所以需要使用gradle来编译

1
2
lintong@master:~/coding/java/WhereHows$ ./gradlew build

在编译的过程中,在编译子项目wherehows-etl的时候报错了

原来是少了jar包,再次去看README文档,官方说

 

需要在 wherehows-etl/extralibs 目录下添加一些第三方的jar包,这些jar是在maven仓库下载不到的

我首先看文档,下载了 gsp.jar 这个jar包, 下载地址,解压了之后将 gsp.jar 放在 extralibs 目录下

1
2
http://www.sqlparser.com/dl/gsp_java_trial_1_9_4_4.zip

 

然后再次编译试试,如果编译之中下载jar包比较慢的话,我会直接wget下载这个jar包,然后丢到~/.m2/repository下面各个不同jar包的本地仓库中

最终编译成功

5.然后按照官方的文档,打开两个终端,分别启动 wherehows 的后端和前端组件

1
2
3
lintong@master:~/coding/java/WhereHows$ ./gradlew wherehows-backend:runPlayBinary
lintong@master:~/coding/java/WhereHows$ ./gradlew wherehows-frontend:runPlayBinary

然后访问 localhost:9001看web界面,第一次当然是不可能成功的

 至此,wherehows首页的readme已经走不通了,继续参考get-start的文档

1
2
https://github.com/linkedin/WhereHows/blob/master/wherehows-docs/getting-started.md

文档中说需要继续添加第3放的jar,需要添加的jar包地址,我只加了这两个,另外两个Oracle的jar我没有添加

1
2
https://github.com/linkedin/WhereHows/tree/master/wherehows-etl/extralibs

 

按照文档还需要创建一些mysql用户

注意这里官方文档写错了,不是 GRANT ALL ON wherehows.* TO ‘wherehows‘@’wherehows’; 而是 GRANT ALL ON wherehows.* TO ‘wherehows‘@’localhost’;

1
2
3
4
5
6
7
8
CREATE USER 'wherehows'@'localhost' IDENTIFIED BY 'wherehows';
GRANT ALL ON wherehows.* TO 'wherehows'@'localhost';

CREATE USER 'wherehows_ro'@'localhost' IDENTIFIED BY 'readmetadata';
CREATE USER 'wherehows_ro'@'%' IDENTIFIED BY 'readmetadata';
GRANT SELECT ON wherehows.* TO 'wherehows_ro'@'localhost';
GRANT SELECT ON wherehows.* TO 'wherehows_ro'@'%';

 结果成功

1
2
Query OK, 0 rows affected (0.00 sec)

 文档中说还需要初始化一些表,不太清楚和刚开始的有没有区别,再初始化一遍

1
2
3
4
5
6
7
8
9
cd ~/coding/java/WhereHows/wherehows-data-model/DDL
进入mysql
mysql> use wherehows
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> source /home/lintong/coding/java/WhereHows/wherehows-data-model/DDL/create_all_tables_wrapper.sql

6.初始化es的索引

wherehows中数据集的搜索需要用到es,暂时先跳过

7.接着来安装wherehows的前端

上面报的错的原因,原来是由于需要修改application.conf配置文件去 match your environment

但是怎么做修改,在getting-start文档中缺没有说明白,所以只能去看子项目 wherehows-frontend 的README文档

 

界面

搜索

浏览功能

 

 

数据集页面

 Schema

属性页面

hive的数据集详情页

 hdfs的数据集详情页