通过数据导入处理程序将Solr与aws RDS Mysql连接

问题描述 投票:0回答:1

我最近开始在AWS EC2上为搜索应用程序实现solr-cloud。我创建了2个具有以下配置的AWS Ec2实例---

  1. EC2类型-t2.medium
  2. 内存-4GB
  3. 磁盘空间-8GB
  4. OS-ubuntu 18.04

对于2个EC2实例,我创建了一个安全组,该安全组允许所有入站流量。 NACL具有默认设置,该设置也允许所有入站流量。

安装Apache Solr的步骤-

  1. ssh进入ec2:
ssh -i "pem_file" ubuntu@ec2-public-ipv4-address
  1. cd到/ opt目录
  2. 运行-> sudo apt-update
  3. 运行-> sudo apt-get openjdk-11
  4. 检查Java-版本
  5. 运行-> wget https://archive.apache.org/dist/lucene/solr/8.3.0/solr-8.3.0.tgz
  6. 运行-> tar -xvzf solr-8.3.0.tgz
  7. export SOLR_HOME=/opt/solr-8.3.0
  8. 将/opt/solr-8.3.0添加到Path环境变量中
  9. 使用主机更新sudo vim / etc / hosts文件-一个。 EC2 solr-node-1的公共IP v4地址
  10. 使用以下命令启动Solr->sudo bin/solr start -c -p 8983 -h solr-node-1 -force
  11. 使用--C sudo lsof -i -P -n | grep LISTEN检查了打开的端口
  12. 使用---创建的集合,分片和副本bin/solr create -c travasko -d sample_techproducts_configs -n travasko_configs -shards 2 -rf 2 -p 8983

我在另一台EC2机器上重复了相同的过程,并在上面运行了Solr。现在,要在solr中使用数据导入处理程序,我编辑了以下文件:

  1. solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
</requestHandler>
  1. data-config.xml
<dataConfig>
<dataSource type="JdbcDataSource" 
            driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://examplerds.cuhj86yfdpid.us-east-1.rds.amazonaws.com:3306/TRAVASKODB1" 
            user="examplerds" 
            password="examplerds#123"/>
<document>
  <entity name="MOMENTS"  
    pk="MOMENT_ID"
    query="SELECT MOMENT_ID,MOMENT_TEXT FROM MOMENTS"
    deltaImportQuery="SELECT MOMENT_ID,MOMENT_TEXT FROM MOMENTS WHERE MOMENT_ID='${dih.delta.MOMENT_ID}'"
    deltaQuery="SELECT MOMENT_ID FROM MOMENTS  WHERE LAST_MODIFIED > '${dih.last_index_time}'"
    >
     <field column="MOMENT_ID" name="MOMENT_ID"/>
     <field column="MOMENT_TEXT" name="MOMENT_TEXT"/>       
  </entity>
</document>
</dataConfig>
  1. managed_schema
<schema name="MOMENTS" version="1.5">
    <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="MOMENT_ID" type="integer" indexed="true" stored="true" required="true" multiValued="false" /> 
    <field name="MOMENT_TEXT" type="string" indexed="true" stored="true" multiValued="false" />
</schema>
  1. 使用以下命令下载了mysql jdbc:
wget -q "http://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.32/mysql-connector-java-5.1.32.jar" -O mysql-connector-java.jar
  1. 添加到solrconfig.xml:
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java.jar" />

  1. 编辑完上面的文件后,我使用以下zookeper命令将它们上传到solr-cloud->
bin/solr zk -n travasko_config -z solr-node-1:9983 cp /opt/solr-8.3.0/server/solr/configsets/_default/conf/managed-schema zk:/configs/travasko_config/managed-schema
  1. 然后我在solr-cloud中检查了上述所有文件,并且可以注意到我添加的更改。
  2. 当前问题是,当我选择上面创建的集合并单击Dataimport时,它将引发如下错误--->
The solrconfig.xml file for this index does not have an operational DataImportHandler defined!

注意: AWS RDS和EC2实例位于共享相同安全组的同一VPC中。

所以为什么solrconfig.xml文件在数据导入期间引发错误?我在这里想念什么?

mysql amazon-ec2 solr amazon-rds dataimporthandler
1个回答
0
投票

上述问题的解决方案基本上是将大于8.2.0的solr版本设置为java系统属性,如下所示:

-Denable.dih.dataConfigParam=true

此参数可以在solr.in.cmd或solr.in.sh中设置,可以在以下目录中找到:,

/opt/solr-8.3.0/bin 

如果,/ opt / solr-8.3.0是solr的安装目录。

另一种方法是在如下所示启动solr时将此参数作为命令行参数传递:

sudo bin/solr start -c -p 8983 -h solr-node-1 -Denable.dih.dataConfigParam=true -force

solr-node-1是在其上配置了solr的AWS Ec2实例的公共IPv4地址。

© www.soinside.com 2019 - 2024. All rights reserved.