Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

使用文档

jokerZH edited this page Jun 2, 2020 · 10 revisions

架构介绍

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

代码准备

elasticSearch安装插件

由于ES插件中需要使用Lucene的IndexWriter对象,所以我们修改了ES代码,使得插件中能够访问各个shard的IndexWriter对象。对ES代码修改的diff见文件plugin/src/main/resources/es.diff

修改好ES代码之后,只需要将mr目录拷贝到ES源码的modules目录中,然后执行ES的编译打包命令,就可以获得安装了appendLucene插件的ES安装包了。

server端配置操作的ES集群

server主要负责获得、操作ES索引,以及管理Lucene文件搬迁任务,而搬迁任务的元数据就保存在ES中。因此需要给server模块配置一个ES集群。

这个ES集群即是保存元数据的地方,也是FastIndex需要导入数据的索引所在的ES集群。整个过程分成2部分

  1. 创建元数据索引,共2个索引,分别是fast_index_loadata和fast_index_op,不需要配置settting和mapping。
  2. 修改server中的文件/server/src/main/java/com/didichuxing/fastindex/dao/BaseEsDao.java,将变量ip和port配置成ES集群的地址。

server端增加远程shell调用功能

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相关代码适配

目前代码中Hive和Hdfs相关代码使用了滴滴内部的Hdfs集群,使用方式可能跟你所在的公司不同,需要你根据自己公司的使用方式修改相关代码,主要是MR模块中的代码。

代码打包

插件打包

通过es打包就可以实现对插件进行打包

server端打包

通过运行脚本/server/build.sh对server模块打包, 打包的结果是/server/target/fast-index-server.jar

mr任务打包

通过运行脚本/mr/build.sh对mr任务模块打包,打包的结果是/mr/mr.jar

代码部署

插件部署

通过部署es实现

server端部署

找一台线上能够访问ES集群的机器,然后将fast-index-server.jar拷贝到任意目录

mr任务部署

找一台线上能够访问Hive的机器,然后将mr.jar拷贝到任意目录

代码运行

插件运行

通过运行es实现

server端运行

在jar包所在的目录,运行一下命令,启动server端 java -jar target/fast-index-server.jar com.didichuxing.fastindex.ServerLauncher

mr任务运行

在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

AltStyle によって変換されたページ (->オリジナル) /