Elasticsearch的JDBC馈送器

时间:2014-11-18 05:54:24

标签: sql-server bash jdbc elasticsearch bulkinsert

我正在尝试创建一个JBDC馈送器,以将数据从SQL Server加载到elasticsearch中。我在这里使用指南:https://github.com/jprante/elasticsearch-river-jdbc(搜索标题'如何运行独立的JDBC馈送器')。

我已成功下载并安装了elasticsearch并启动并运行。我已经下载了SQL Server的JDBC驱动程序并将其移动到./plugins/jdbc文件夹中。

我要参与创建bash脚本的部分。在今天之前,我从来没有看过一个bash脚本,因为我还不知道一半的语法,所以我无法使用它。

elasticsearch目录是c:\ elasticsearch-1.4.0

这是我的bash脚本:

#!/bin/sh

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# ES_HOME required to detect elasticsearch jars
export ES_HOME= C:\elasticsearch-1.4.0

echo '
{
    "elasticsearch" : {
         "cluster" : "elasticsearch",
         "host" : "localhost",
         "port" : 9200
    },
    "type" : "jdbc",
    "jdbc" : {
        "url" : "jdbc:sqlserver://localhost;databaseName=MyDatabase",
        "user" : "MyUser",
        "password" : "MyPassword",
        "sql" :  "select * From MyTable",
        "treat_binary_as_string" : true,
        "index" : "MyFirstESIndex"
      }
}
' | java \
    -cp "${DIR}/*" \
    org.xbib.elasticsearch.plugin.jdbc.feeder.Runner \
    org.xbib.elasticsearch.plugin.jdbc.feeder.JDBCFeeder

我需要在此脚本中更新什么?这是脚本的这一行:

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

我这样做的原因是因为我正在寻找最好的方法,可以一次性从sql server插入有数千万条记录到elasticsearch中,即批量插入。

我们的第一次迭代涉及获取表中的每一行数据,将其转换为JSON文档,然后插入ES。这需要大约10个小时来获取所有数据。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

而不是:

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

这样做,如果您在该工作目录中非常重要:

DIR="$( dirname "${BASH_SOURCE[0]}" )"
cd $DIR

此外,如果它不是拼写错误,请删除ES_HOME=之后的空格,如果有疑问,请使用引号:

export ES_HOME="C:\elasticsearch-1.4.0"

此外,使用Java -cp参数,如果要包含所有jar文件(我假设),请不要使用引号,以便使用globbing:

# Since you are already in the directory, you don't need DIR
JARS=$(echo ./*jar)
...
# On the cp line, substitute spaces with : to build the classpath
-cp "${JARS// /:}" \

我希望这会有所帮助。如果您可以提供有关脚本失败的更多详细信息,我可以提供更多帮助。您收到特定的错误消息吗?