📜  Apache Solr-在Hadoop上(1)

📅  最后修改于: 2023-12-03 14:59:20.908000             🧑  作者: Mango

Apache Solr 在 Hadoop 上

Apache Solr 是一个基于 Apache Lucene 的开放源代码搜索平台。它可通过 Web 接口配置和管理 Apache Lucene 个性化搜索,自然语言搜索,带分片分布式搜索,并提供了一个 RESTful API。

Hadoop 是一个用于处理大规模数据集的开源软件框架。它可将大规模数据集分成多个部分,然后在不同的数据节点上同时处理这些部分。Hadoop 可在普通计算机集群上执行分布式处理。

结合 Apache Solr 和 Hadoop 可以将 Solr 的搜索引擎技术和 Hadoop 的分布式计算技术结合起来,让 Solr 可以更快、更准确地处理大量的数据。

安装 SolrCloud

在 Hadoop 上部署 Solr 的第一步是安装 SolrCloud,SolrCloud 是 Solr 的一个分布式模式,它使得 Solr 可以跨多个服务器进行分布式处理。

安装 SolrCloud 可以通过以下步骤完成:

  1. 下载最新的 SolrCloud 发行版,并解压缩到您的 Hadoop 节点上。
  2. 使用 Solr 的脚本启动 SolrCloud:bin/solr start -cloud
  3. 检查 SolrCloud 状态:bin/solr status

现在 SolrCloud 已经在 Hadoop 上运行。

配置 Solr

在 Hadoop 上配置 Solr 的下一步是设置 Solr 的配置文件。您需要在 Hadoop 上创建一个 Solr 配置文件。该文件的默认名称是 solr.xml。该文件应该包含 SolrCloud 集合名称、配置文件和 SolrCloud 实例的数量等信息。

在 Hadoop 上,Solr 配置文件通常位于 Solr/WP/conf 目录中。

以下是 solr.xml 文件的简单示例:

<solr>
  <cloud>
    <collection name="mycollection">
      <numShards>3</numShards>
      <int name="replicationFactor">2</int>
      <str name="router.field">id</str>
    </collection>
    <zkHost>localhost:9983</zkHost>
  </cloud>
</solr>
配置 SolrCloud 节点

要在 Hadoop 上配置 SolrCloud 节点,需要编辑 Solr 的配置文件( solrconfig.xml ),并指定使用 HDFS 目录作为数据目录。

以下是 solrconfig.xml 文件的简单示例:

<config>
  <luceneMatchVersion>LATEST</luceneMatchVersion>
  <directoryFactory name="HdfsDirectoryFactory">
    <str name="solr.hdfs.home">solr_hdfs</str>
  </directoryFactory>
  <updareRequestProcessorChain>
    <processor class="solr.DistributedUpdateProcessorFactory">
      <str name="update.chain">add-unknown-fields-to-the-schema</str>
      <bool name="distrib-duplication-check">false</bool>
      <bool name="forwardUpdates">false</bool>
      <str name="solr.autoCommit.maxTime">15000</str>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory" />
    <processor class="solr.RunUpdateProcessorFactory" />
  </updareRequestProcessorChain>
  <requestHandler name="/update" class="solr.UpdateRequestHandler">
    <lst name="defaults">
      <str name="update.chain">add-unknown-fields-to-the-schema</str>
    </lst>
  </requestHandler>
  <requestHandler name="/" class="solr.SearchHandler" />
</config>

注意:

  1. <directoryFactory> 元素指定 HDFS 目录用于存储索引。
  2. <updareRequestProcessorChain> 元素指定 SolrCloud 节点的更新处理程序。
  3. <requestHandler> 元素指定 SolrCloud 节点的请求处理程序。
将 SolrCloud 集成到 Hadoop 中

要将 SolrCloud 集成到 Hadoop 中,您需要在 Hadoop 群集中运行 Solr 查询程序。

以下是在 Hadoop 上运行 Solr 查询程序的步骤:

  1. 下载并解压缩 Solr 发行版。
  2. 将 Solr 的 JAR 文件添加到 Hadoop 类路径中。
  3. 启动 SolrCloud
bin/solr start -cloud -p 8983 -s /opt/solr -z zk01:2181,zk02:2181,zk03:2181
  1. 在 Hadoop 上编写和执行 Solr 查询程序。
from SolrClient import SolrClient

solr = SolrClient('http://localhost:8983/solr/mycollection', search_handler='/select')
query = 'q=name:lucene'
result = solr.query(query)

print("Number of hits found: %d" % result.docs.length)