Elasticsearch JDBC river 之 ms sql 篇

還沒接觸elasticsearch之前大家免不了都會用數據庫, 像我這種微軟狗當好幾年的, Microsoft Sql Server之唯一方案.

現在時代不同了都邁向no-sql, 那數據移轉就是首要的工作, elasticsearch知道這事情的重要性, 所以有了river 這種技術來輔助我們移轉.

此外, river-jdbc有2種方式可以把sql數據同步過來, 我這篇介紹的是river, 其實還有個效能更好的feeder的方案(下次介紹)

我使用的elasticsearch版本是1.2.1

首先river是以plugin的形式成為elasticsearch的功能, 所以我們得來安裝一下elasticsearch-river-jdbc, 請到elasticsearch文件夾下的bin文件夾進行以下命令

plugin --install jdbc --url http://xbib.org/repository/org/xbib/elasticsearch/plugin/elasticsearch-river-jdbc/1.2.1.1/elasticsearch-river-jdbc-1.2.1.1-plugin.zip

安裝好之後, 這次要移轉的是MS SQL請到這裡下載, 並解壓找到sqljdbc4.jar檔案, 然後拷貝到elasticsearch文件夾下的lib文件夾, 這裡面已經有很多jar的文件了(jar的大本營).

現在可以把你的elasticsearch給啟動了, 執行bin\elasticsearch.bat

如果你的Windows無法執行curl,建議用Git bash,這時代大家都用Git吧,執行以下命令

curl -XPUT 'localhost:9200/_river/njmssql/_meta' -d '
{
  "type": "jdbc",
  "jdbc": {
    "url": "jdbc:sqlserver://192.168.92.226:1433;databaseName=log8k2605(140310)",
    "user": "",
    "password": "",
    "sql": "SELECT PID as _id, SiteID as _type, year(StartTime) as _index, Length, StartTime, EndTime FROM T_Record_Info",
    "maxbulkactions" : 1000,
    "schedule" : "*/20 * * * * ?"
  }
}'

njmssql這裡可以自行命名

在url那邊要注意到端口的開啟,還有MS SQL是否能用TCP/IP的方式訪問

如果法順利啟動, 那關閉elasticsearch, 再次執行bin\elasticsearch.bat

這裡我用了個技巧, 直接在sql語法中指定了_index, _type, _id這些重要的字段, 因為我的data flow是隨時間增加數據的, 所以我不可能讓全部數據寫進同一個index下.

maxbulkactions是bulk一次寫入的筆數

schedule那個字段是屬於排程控制的(我是設定每20秒執行一次), 可參考這裡,還有這裡.

没有配置schedule就只会运行一次而已

接下來你可以看看你的index文件數量是不是增加了

http://localhost:9200/_count

如果要移除剛剛創建的njmssqlriver請在執行

curl -XDELETE 'localhost:9200/_river/njmssql'

注意:如果想更新配置只能删了再新增, 想停止就执行删除

posted @ 2014-05-29 13:58  Henry JAO  阅读(2373)  评论(0编辑  收藏  举报