我正在尝试创建一个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个小时来获取所有数据。
提前感谢任何建议。
答案 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// /:}" \
我希望这会有所帮助。如果您可以提供有关脚本失败的更多详细信息,我可以提供更多帮助。您收到特定的错误消息吗?