-
Notifications
You must be signed in to change notification settings - Fork 88
使用文档
FastIndex整体架构如上所示,整个项目主要分成ES插件,MR任务,Server模块三部分,各个模块的功能描述如下所示
- ES插件:负责接收Lucene文件,然后将Lucene文件导入ES内部
- MR任务:负责将Hive数据转化成Lucene文件,然后条用Server模块的接口,触发Lucene文件加载任务
- Server模块:负责调度Lucene加载任务,MR调用相关接口后,Server会发起对应的Lucene数据加载任务。
本项目的代码结构如下
├── mr
├── plugin
└── server
其中主要有3个独立的项目,和架构中个组件的对应关系如下
- ES插件:代码目录 /plugin
- MR任务:代码目录/mr
- Server模块:代码目录/server
由于ES插件中需要使用Lucene的IndexWriter对象,所以我们修改了ES代码,使得插件中能够访问各个shard的IndexWriter对象。对ES代码修改的diff见文件plugin/src/main/resources/es.diff
修改好ES代码之后,只需要将mr目录拷贝到ES源码的modules目录中,然后执行ES的编译打包命令,就可以获得安装了appendLucene插件的ES安装包了。
server主要负责获得、操作ES索引,以及管理Lucene文件搬迁任务,而搬迁任务的元数据就保存在ES中。因此需要给server模块配置一个ES集群。
这个ES集群即是保存元数据的地方,也是FastIndex需要导入数据的索引所在的ES集群。整个过程分成2部分
- 创建元数据索引,共2个索引,分别是fast_index_loadata和fast_index_op,不需要配置settting和mapping。
- 修改server中的文件/server/src/main/java/com/didichuxing/fastindex/dao/BaseEsDao.java,将变量ip和port配置成ES集群的地址。
server主要通过远程ssh的方式,在ES的dataNode上触发对应的数据加载脚本任务。滴滴内部,我们主要使用滴滴的zeus系统实现远程ssh的功能。因此你需要自己根据现有公司的情况,自己实现远程ssh功能。
在代码中,你需要实现/server/src/main/java/com/didichuxing/fastindex/remoteshell/RemoteShell.java这个接口类。
在实现了RemoteShell接口类之后,你还需要知道远程ssh触发的脚本,该脚本在/server/src/main/resources/shell/loadData.sh中,你需要通过RemoteShell实现类中,在es的dataNode中触发运行loadData.sh脚本
目前代码中Hive和Hdfs相关代码使用了滴滴内部的Hdfs集群,使用方式可能跟你所在的公司不同,需要你根据自己公司的使用方式修改相关代码,主要是MR模块中的代码。
通过es打包就可以实现对插件进行打包
通过运行脚本/server/build.sh对server模块打包, 打包的结果是/server/target/fast-index-server.jar
通过运行脚本/mr/build.sh对mr任务模块打包,打包的结果是/mr/mr.jar
通过部署es实现
找一台线上能够访问ES集群的机器,然后将fast-index-server.jar拷贝到任意目录
找一台线上能够访问Hive的机器,然后将mr.jar拷贝到任意目录
通过运行es实现
在jar包所在的目录,运行一下命令,启动server端 java -jar target/fast-index-server.jar com.didichuxing.fastindex.ServerLauncher
在mr jar包所在的目录运行一下命令,发起一次Hive表到ES索引的导入任务
hadoop jar mr.jar com.didichuxing.datachannel.arius.fastindex.FastIndex '{"hdfsOutputPath": ".","esTemplate": ".","hiveTable": ".","filter": {"dt": "."},"mrqueue": ".","passwd": ".","hiveDB": ".","time": x,"user": ".","key": ".","esWorkDir": ".","server": "."}'
参数定义如下所示
| 变量名 | 说明 | 例子 |
|---|---|---|
| hdfsOutputPath | Lucene文件保存的hdfs目录 | /user/test |
| esTemplate | ES模板名 | fastindex_test |
| hiveTable | hive表名 | ods_flow_order_stage_test |
| filter | Hive表分区选择 | {"dt": "2020-05-04"} |
| mrqueue | 使用的yarn队列名 | root.xxx |
| passwd | hdfs密码 | xxx |
| hiveDB | hive库 | pre |
| time | es索引的分区时间 | 1590639123499 |
| user | hdfs用户名 | prod_pre |
| key | hive中的主键 | id |
| esWorkDir | lucene文件加载到dataNode时使用的临时目录 | /data1/es/fastIndex |
| server | server端部署的地址 | 10.1.1.100:8080 |