DataX
DataX 是阿里開源的一款離線數據同步工具,致力於實現包括關係型數據庫(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各種異構數據源之間穩定高效的數據同步功能。
本篇主要介紹 DataX 如何將數據寫入到 Easysearch,對於各種數據源的連接不會做深入的探討,感興趣的小夥伴可以訪問 DataX 的 Github 倉庫查看詳情。
下載與安裝
DataX 無需安裝,下載後解壓即可使用。
系統需求:
- JDK 1.8 及以上
- Python2 或 3
創建任務配置文件
每個數據同步的操作可稱為一個任務,任務的配置文件定義了數據源(reader)、數據目的(writer) ,以及任務的設置信息,如併發數、速度控制等。DataX 集成了如此多的數據源,如果靠純手工編寫任務配置顯然不現實。官方也出了個命令可以根據指定的數據源和數據目的幫助大家生成任務配置。
python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
測試配置文件
此次演示使用 streamreader 和 elasticsearchwriter 作為數據源和數據目的,任務配置如下:
{
"job": {
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"sliceRecordCount": 10000,
"column": [
{
"type": "long",
"value": "10"
},
{
"type": "string",
"value": "hello,你好,世界-DataX"
},
{
"type": "string",
"value": "hello,你好,Easysearch"
}
]
}
},
"writer": {
"name": "elasticsearchwriter",
"parameter": {
"endpoint": "http://localhost:9200",
"accessId": "admin",
"accessKey": "1ef0c661d8562aaa06be",
"index": "yf-test",
"column": [
{ "name": "no", "type": "long" },
{ "name": "content", "type": "keyword" },
{ "name": "content2", "type": "keyword" }
]
}
}
}
],
"setting": {
"speed": {
"channel": 50
}
}
}
}
streamreader 是一個從內存讀取數據的插件, 它主要用來快速生成期望的數據並對寫入插件進行測試。
我們用 streamreader 構造了 10000 個文檔,文檔含三個字段,任務啓動了 50 個 channel 進行數據發送,結果就是共計發送 50w 個文檔。
elasticssearchwriter 指定了 Easysearch 的連接信息:
- endpoint: Easysearch 的地址和端口
- accessId: 用户名
- accessKey: 密碼
- index: 寫入索引名
- column: 對 reader 發來數據的 schema 定義
- batchsize: 默認 1000
這次我們 Easysearch 開啓的 http 服務,因為 DataX 的 elasticsearchwriter 無法跳過證書驗證。對於必須使用 https 的場景,可使用 INFINI Gateway 代理 ES 服務,提供 http 通道給離線數據同步專用。
⚠️ 注意:
不同的 reader、writer 對 sliceRecordCount 和 channel 會有不同的行為。
Easysearch
本次測試使用的 Easysearch 版本是 1.9.0,需要注意是 Easysearch 要開啓兼容性參數:
elasticsearch.api_compatibility: true
否則創建索引報錯退出。(實際索引創建成功了但是 mapping 信息是空的)
運行任務
編輯好任務配置文件後,下一步就是執行任務。
python3 datax.py yf-test.json
寫入數據時索引不存在,Datax 根據 schema 定義創建了索引。
OK 任務執行完畢,寫入 50w 個文檔耗時 10 秒。
如果有其他問題歡迎與我聯繫。
關於 Easysearch
INFINI Easysearch 是一個分佈式的搜索型數據庫,實現非結構化數據檢索、全文檢索、向量檢索、地理位置信息查詢、組合索引查詢、多語種支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同時添加和完善多項企業級功能。Easysearch 助您擁有簡潔、高效、易用的搜索體驗。
官網文檔:https://infinilabs.cn/docs/latest/easysearch
作者:楊帆,極限科技(INFINI Labs)高級解決方案架構師、《老楊玩搜索》欄目 B 站 UP 主,擁有十餘年金融行業服務工作經驗,熟悉 Linux、數據庫、網絡等領域。目前主要從事 Easysearch、Elasticsearch 等搜索引擎的技術支持工作,服務國內私有化部署的客户。