Skip to content

Commit

Permalink
Merge pull request #296 from WeDataSphere/dev-1.0.0-rc
Browse files Browse the repository at this point in the history
 Modify install.sh, config.sh and sqoop engine pom.xml file
  • Loading branch information
Davidhua1996 authored Jun 7, 2022
2 parents 81fedaf + ee68b33 commit 5508cf4
Show file tree
Hide file tree
Showing 35 changed files with 563 additions and 497 deletions.
56 changes: 27 additions & 29 deletions README-ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,56 +2,54 @@

[English](README.md) | 中文

## 项目简介
## 引言

Exchangis 是微众银行大数据平台 WeDataSphere 自研的数据交换工具,支持异构数据源之间的结构化和非结构化数据传输同步。
Exchangis 1.0.0 是微众银行大数据平台 WeDataSphere 与社区用户共同研发的的新版数据交换工具,支持异构数据源之间的结构化和非结构化数据传输同步。

Exchangis 抽象了一套统一的数据源和同步作业定义插件,允许用户快速接入新的数据源,并只需在数据库中简单配置即可在页面中使用。

基于插件化的框架设计,及计算中间件 [Linkis](https://github.com/apache/incubator-linkis),Exchangis 可快速集成对接 Linkis 已集成的数据同步引擎,将 Exchangis 的同步作业转换成 Linkis 数据同步引擎的数据同步作业。

借助于 [Linkis](https://github.com/apache/incubator-linkis) 计算中间件的连接、复用与简化能力,Exchangis 天生便具备了高并发、高可用、多租户隔离和资源管控的金融级数据同步能力。

##界面预览

![image](https://user-images.githubusercontent.com/27387830/171488936-2cea3ee9-4ef7-4309-93e1-e3b697bd3be1.png)

## 核心特点

### 1. 数据源管理
### 1. 轻量化的数据源管理

- 基于 Linkis DataSource,抽象了底层数据源在 Exchangis 作为一个同步作业的 Source 和 Sink 所必须的所有能力。只需简单配置即可完成一个数据源的创建。

基于 Linkis DataSource,抽象了底层数据源在 Exchangis 作为一个同步作业的 Source 和 Sink 所必须的所有能力
- 特别数据源版本发布管理功能,支持历史版本数据源回滚,一键发布无需再次配置历史数据源

- **多传输引擎支持**
传输引擎可横向扩展;
当前版本完整聚合了离线批量引擎DataX、部分聚合了大数据批量导数引擎SQOOP

### 2. 高稳定,快响应的数据同步任务执行

- **近实时任务管控**
快速抓取传输任务日志以及传输速率等信息,实时关闭任务;
可根据带宽状况对任务进行动态限流
快速抓取传输任务日志以及传输速率等信息,对多任务包括CPU使用、内存使用、数据同步记录等各项指标进行监控展示,支持实时关闭任务;

- **支持无结构化传输**
DataX框架改造,单独构建二进制流快速通道,适用于无数据转换的纯数据同步场景
- **任务高并发传输**
多任务并发执行,并且支持复制子任务,实时展示每个任务的状态,多租户执行功能有效避免执行过程中任务彼此影响进行

- **任务状态自检**
监控长时间运行的任务和状态异常任务,及时释放占用的资源并发出告警。

## 与现有的系统的对比
对现有的一些数据交换工具和平台的对比:

| 功能模组 | 描述 | Exchangis | DataX | Sqoop | DataLink | DBus |
| :----: | :----: |-------|-------|-------|-------|-------|
| UI | 集成便捷的管理界面和监控窗口| 已集成 ||| 已集成 |已集成 |
| 安装部署 | 部署难易程度和第三方依赖 | 一键部署,无依赖 | 无依赖 | 依赖Hadoop环境 | 依赖Zookeeper | 依赖大量第三方组件 |
| 数据权限管理| 多租户权限配置和数据源权限管控 | 支持 | 不支持 | 不支持 | 不支持 | 支持 |
| |动态限流传输 | 支持 | 部分支持,无法动态调整 | 部分支持,无法动态调整| 支持 | 支持,借助Kafka |
| 数据传输| 无结构数据二进制传输 | 支持,快速通道 | 不支持 | 不支持 | 不支持,都是记录 | 不支持,需要转化为统一消息格式|
| | 嵌入处理代码 | 支持,动态编译 | 不支持 | 不支持 | 不支持 | 部分支持 |
| | 传输断点恢复 | 支持(未开源) | 不支持,只能重试 | 不支持,只能重试 | 支持 | 支持 |
| 服务高可用 | 服务多点,故障不影响使用| 应用高可用,传输单点(分布式架构规划中) | 单点服务(开源版本) | 传输多点 | 应用、传输高可用 | 应用、传输高可用 |
| 系统管理 | 节点、资源管理 | 支持 | 不支持 | 不支持 | 支持 | 支持 |
监控长时间运行的任务和状态异常任务,中止任务并及时释放占用的资源。


### 3. 首创与DSS工作流打通,一站式大数据开发的门户

- 实现DSS APPCONN包括一级 SSO 规范,二级组织结构规范,三级开发流程规范在内的三级规范

- 作为DSS工作流的数据交换节点,是整个工作流链路中的门户流程,为后续的工作流节点运行提供稳固的数据基础

- 由于 AppConn 对接了 Linkis,外部数据应用系统因此具备了资源管控、并发限流、用户资源管理等能力,且允许上下文信息跨系统级共享,彻底告别应用孤岛。

## 整体设计

### 架构设计

![架构设计](../../../images/zh_CN/ch1/architecture.png)
![架构设计](https://user-images.githubusercontent.com/27387830/171487056-842512b4-fd17-413f-97a1-8f4b72a3ebe9.png)

## 相关文档
[安装部署文档](exchangis_deploy_cn.md)
Expand All @@ -65,4 +63,4 @@ DataX框架改造,单独构建二进制流快速通道,适用于无数据转

## License

Exchangis is under the Apache 2.0 License. See the [License](../../../LICENSE) file for details.
Exchangis is under the Apache 2.0 License. See the [License](../../../LICENSE) file for details.
6 changes: 6 additions & 0 deletions assembly-package/config/config.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
LINKIS_GATEWAY_HOST=
LINKIS_GATEWAY_PORT=
LINKIS_SERVER_URL=
LINKIS_TOKEN=
EUREKA_PORT=
DEFAULT_ZONE=
9 changes: 9 additions & 0 deletions assembly-package/config/db.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 设置数据库的连接信息
# 包括IP地址、数据库名称、用户名、端口
MYSQL_HOST=
MYSQL_PORT=
MYSQL_USERNAME=
MYSQL_PASSWORD=
DATABASE=


104 changes: 39 additions & 65 deletions assembly-package/sbin/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@
# limitations under the License.
#

source ~/.bashrc
shellDir=`dirname $0`
workDir=`cd ${shellDir}/..;pwd`

SOURCE_ROOT=${workDir}
#load config
source ${SOURCE_ROOT}/config/config.sh
source ${SOURCE_ROOT}/config/db.sh
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
SHELL_LOG="${DIR}/console.out" #console.out是什么文件?
export SQL_SOURCE_PATH="${DIR}/../db/exchangis_ddl.sql"
Expand Down Expand Up @@ -78,20 +86,20 @@ uncompress_packages(){
if [ ${uncompress} == true ]; then
if [[ ${pack} =~ tar\.gz$ ]]; then
local do_uncompress=0
if [ ${FORCE_INSTALL} == false ]; then
interact_echo "Do you want to decompress this package: [${pack}]?"
do_uncompress=$?
fi
#if [ ${FORCE_INSTALL} == false ]; then
# interact_echo "Do you want to decompress this package: [${pack}]?"
# do_uncompress=$?
#fi
if [ ${do_uncompress} == 0 ]; then
LOG INFO "\033[1m Uncompress package: [${pack}] to modules directory\033[0m"
tar --skip-old-files -zxf ${PACKAGE_DIR}/${pack} -C ../
fi
elif [[ ${pack} =~ zip$ ]]; then
local do_uncompress=0
if [ ${FORCE_INSTALL} == false ]; then
interact_echo "Do you want to decompress this package: [${pack}]?"
do_uncompress=$?
fi
#if [ ${FORCE_INSTALL} == false ]; then
# interact_echo "Do you want to decompress this package: [${pack}]?"
# do_uncompress=$?
#fi
if [ ${do_uncompress} == 0 ]; then
LOG INFO "\033[1m Uncompress package: [${pack}] to modules directory\033[0m"
unzip -nq ${PACKAGE_DIR}/${pack} -d # n 解压缩时不要覆盖原有的文件
Expand Down Expand Up @@ -122,83 +130,49 @@ if [ "x${SQL_SOURCE_PATH}" != "x" ] && [ -f "${SQL_SOURCE_PATH}" ]; then
`mysql --version >/dev/null 2>&1`
if [ $? == 0 ]; then
LOG INFO "\033[1m Scan out mysql command, so begin to initalize the database\033[0m"
interact_echo "Do you want to initalize database with sql: [${SQL_SOURCE_PATH}]?"
if [ $? == 0 ]; then
read -p "Please input the db host(default: 127.0.0.1): " HOST
if [ "x${HOST}" == "x" ]; then
HOST="127.0.0.1"
fi
while [ 1 ]; do
read -p "Please input the db port(default: 3306): " PORT
if [ "x${PORT}" == "x" ]; then
PORT=3306
break
elif [ ${PORT} -gt 0 ] 2>/dev/null; then
break
else
echo "${PORT} is not a number, please input again"
fi
done
read -p "Please input the db username(default: root): " USERNAME
if [ "x${USERNAME}" == "x" ]; then
USERNAME="root"
fi
read -p "Please input the db password(default: ""): " PASSWORD
read -p "Please input the db name(default: exchangis)" DATABASE
if [ "x${DATABASE}" == "x" ]; then
DATABASE="exchangis"
fi
DATASOURCE_URL="jdbc:mysql:\/\/${HOST}:${PORT}\/${DATABASE}\?useSSL=false\&characterEncoding=UTF-8\&allowMultiQueries=true"
mysql -h ${HOST} -P ${PORT} -u ${USERNAME} -p${PASSWORD} --default-character-set=utf8 -e \
#interact_echo "Do you want to initalize database with sql: [${SQL_SOURCE_PATH}]?"
#if [ $? == 0 ]; then
DATASOURCE_URL="jdbc:mysql:\/\/${MYSQL_HOST}:${MYSQL_PORT}\/${DATABASE}\?useSSL=false\&characterEncoding=UTF-8\&allowMultiQueries=true"
mysql -h ${MYSQL_HOST} -P ${MYSQL_PORT} -u ${MYSQL_USERNAME} -p${MYSQL_PASSWORD} --default-character-set=utf8 -e \
"CREATE DATABASE IF NOT EXISTS ${DATABASE}; USE ${DATABASE}; source ${SQL_SOURCE_PATH};"
#sed -ri "s![#]?(DB_HOST=)\S*!\1${HOST}!g" ${BOOTSTRAP_PROP_FILE}
#sed -ri "s![#]?(DB_PORT=)\S*!\1${PORT}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.server.mybatis.datasource.username=)\S*!\1${USERNAME}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.server.mybatis.datasource.password=)\S*!\1${PASSWORD}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.server.mybatis.datasource.username=)\S*!\1${MYSQL_USERNAME}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.server.mybatis.datasource.password=)\S*!\1${MYSQL_PASSWORD}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.server.mybatis.datasource.url=)\S*!\1${DATASOURCE_URL}!g" ${BOOTSTRAP_PROP_FILE}
fi
#fi
fi
fi
}

init_properties(){
BOOTSTRAP_PROP_FILE="${CONF_PATH}/exchangis-server.properties"
APPLICATION_YML="${CONF_PATH}/application-exchangis.yml"
# Start to initalize propertis
interact_echo "Do you want to initalize exchangis-server.properties?"
if [ $? == 0 ]; then
read -p "Please input the linkis gateway ip(default: 127.0.0.1): " HOST
if [ "x${HOST}" == "x" ]; then
HOST="127.0.0.1"
fi
while [ 1 ]; do
read -p "Please input the linkis gateway port(default: 3306): " PORT
if [ "x${PORT}" == "x" ]; then
PORT=3306
break
elif [ ${PORT} -gt 0 ] 2>/dev/null; then
break
else
echo "${PORT} is not a number, please input again"
fi
done
#interact_echo "Do you want to initalize exchangis-server.properties?"
#if [ $? == 0 ]; then

LINKIS_GATEWAY_URL="http:\/\/${HOST}:${PORT}\/"
LINKIS_GATEWAY_URL="http:\/\/${LINKIS_GATEWAY_HOST}:${LINKIS_GATEWAY_PORT}\/"

read -p "Please input the exchangis datasource client serverurl(default: http://127.0.0.1:3306): " EXCHANGIS_DATASOURCE_URL
if [ "x${EXCHANGIS_DATASOURCE_URL}" == "x" ]; then
EXCHANGIS_DATASOURCE_URL="http://127.0.0.1:3306"
if [ "x${LINKIS_SERVER_URL}" == "x" ]; then
LINKIS_SERVER_URL="http://127.0.0.1:3306"
fi
read -p "Please input the linkis server url(default: ""): " LINKIS_SERVER_URL
if [ "x${LINKIS_SERVER_URL}" == "x" ]; then
LINKIS_SERVER_URL="http://127.0.0.1:3306"
fi

sed -ri "s![#]?(wds.linkis.gateway.ip=)\S*!\1${HOST}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.gateway.port=)\S*!\1${PORT}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.gateway.ip=)\S*!\1${LINKIS_GATEWAY_HOST}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.gateway.port=)\S*!\1${LINKIS_GATEWAY_PORT}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.gateway.url=)\S*!\1${LINKIS_GATEWAY_URL}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.exchangis.datasource.client.serverurl=)\S*!\1${EXCHANGIS_DATASOURCE_URL}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.exchangis.datasource.client.serverurl=)\S*!\1${LINKIS_SERVER_URL}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.exchangis.client.linkis.server-url=)\S*!\1${LINKIS_SERVER_URL}!g" ${BOOTSTRAP_PROP_FILE}
fi
sed -ri "s![#]?(wds.exchangis.datasource.client.authtoken.key=)\S*!\1${LINKIS_TOKEN}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.exchangis.datasource.client.authtoken.value=)\S*!\1${LINKIS_TOKEN}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.exchangis.client.linkis.token.value=)\S*!\1${LINKIS_TOKEN}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(wds.linkis.gateway.port=)\S*!\1${LINKIS_TOKEN}!g" ${BOOTSTRAP_PROP_FILE}
sed -ri "s![#]?(port: )\S*!\1${EUREKA_PORT}!g" ${APPLICATION_YML}
sed -ri "s![#]?(defaultZone: )\S*!\1${DEFAULT_ZONE}!g" ${APPLICATION_YML}
#fi
}

install_modules(){
Expand Down
Loading

0 comments on commit 5508cf4

Please sign in to comment.