在HDFS上運行Solr

2018-12-21 11:26 更新

Solr支持將其索引和事務(wù)日志文件寫入和讀取到HDFS分布式文件系統(tǒng)。

這不使用Hadoop MapReduce來處理Solr數(shù)據(jù),而只是使用HDFS文件系統(tǒng)進行索引和事務(wù)日志文件存儲。要使用Hadoop MapReduce處理Solr數(shù)據(jù),請參閱Solr contrib區(qū)域中的MapReduceIndexerTool。

要使用HDFS而不是本地文件系統(tǒng),您必須使用Hadoop 2.x,并且需要指示Solr使用HdfsDirectoryFactory。還有幾個要定義的附加參數(shù)。這些可以通過以下三種方式之一進行設(shè)置:

  • 將JVM參數(shù)傳遞給bin/solr腳本。每次使用bin/solr啟動Solr時都需要傳遞這些信息。
  • 修改solr.in.sh(或在Windows上為solr.in.cmd),以在使用bin/solr時自動傳遞JVM參數(shù),而無需手動設(shè)置它們。
  • 定義solrconfig.xml中的屬性。對于每個集合,都需要重復(fù)這些配置更改,因此,如果您只希望將某些集合存儲在HDFS中,那么這是一個很好的選擇。

在HDFS上啟動Solr

獨立的Solr實例

對于獨立的Solr實例,在啟動Solr之前,應(yīng)該確保修改一些參數(shù)。這些可以在solrconfig.xml中設(shè)置(下面的更多內(nèi)容),或者在啟動時傳遞給bin/solr腳本。

  • 您需要使用HdfsDirectoryFactory和表單hdfs://host:port/path的一個數(shù)據(jù)目錄
  • 您需要指定表單hdfs://host:port/path的UpdateLog位置
  • 您應(yīng)該指定一個鎖工廠類型'hdfs'或沒有。

如果不修改solrconfig.xml,則可以使用以下命令在HDFS上啟動Solr:

bin/solr start -Dsolr.directoryFactory=HdfsDirectoryFactory
     -Dsolr.lock.type=hdfs
     -Dsolr.data.dir=hdfs://host:port/path
     -Dsolr.updatelog=hdfs://host:port/path

這個例子將以獨立模式啟動Solr,使用定義的JVM屬性(在下面更詳細地解釋)。

SolrCloud實例

在SolrCloud模式中,最好將數(shù)據(jù)和更新日志目錄保留為Solr自帶的默認值,并簡單地指定solr.hdfs.home。所有動態(tài)創(chuàng)建的集合將在solr.hdfs.home根目錄下自動創(chuàng)建相應(yīng)的目錄。

  • 在hdfs://host:port/path表單中設(shè)置solr.hdfs.home
  • 您應(yīng)該指定一個鎖工廠類型'hdfs'或沒有。
bin/solr start -c -Dsolr.directoryFactory=HdfsDirectoryFactory
     -Dsolr.lock.type=hdfs
     -Dsolr.hdfs.home=hdfs://host:port/path

該命令使用定義的JVM屬性以SolrCloud模式啟動Solr。

修改solr.in.sh(* nix)或solr.in.cmd(Windows)

上面的例子假設(shè)您每次使用bin/solr啟動Solr的時候都會傳遞JVM參數(shù)作為start命令的一部分。但是,bin/solr查找名為solr.in.sh(在Windows上為solr.in.cmd)的包含文件來設(shè)置環(huán)境變量。默認情況下,該文件位于bin目錄中,您可以對其進行修改以永久添加HdfsDirectoryFactory設(shè)置,并確保每次啟動Solr時都使用它們。

例如,要將JVM參數(shù)設(shè)置為在SolrCloud模式下運行時始終使用HDFS(如上所示),則可以添加一個如下所示的部分:

# Set HDFS DirectoryFactory & Settings
-Dsolr.directoryFactory=HdfsDirectoryFactory \
-Dsolr.lock.type=hdfs \
-Dsolr.hdfs.home=hdfs://host:port/path \

塊緩存

為了提高性能,HdfsDirectoryFactory使用一個將緩存HDFS塊的目錄。這種緩存機制是為了替代Solr所使用的標(biāo)準(zhǔn)文件系統(tǒng)緩存。默認情況下,此緩存分配在堆外。此緩存通常需要相當(dāng)大,您可能需要提高您正在運行Solr的特定JVM的堆內(nèi)存限制。對于Oracle / OpenJDK JVM,以下是一個示例命令行參數(shù),您可以使用它在啟動Solr時提高限制:

-XX:MaxDirectMemorySize=20g

HdfsDirectoryFactory參數(shù)

HdfsDirectoryFactory 有許多設(shè)置,它們被定義為 directoryFactory 配置的一部分。

Solr HDFS設(shè)置

solr.hdfs.home

Solr將集合數(shù)據(jù)寫入HDFS中的根位置。不是為數(shù)據(jù)目錄或更新日志目錄指定HDFS位置,而是使用此位置來指定一個根位置,并在該HDFS位置中自動創(chuàng)建一切。這個參數(shù)的結(jié)構(gòu)是hdfs://host:port/path/solr。

塊緩存設(shè)置

solr.hdfs.blockcache.enabled

啟用塊緩存。默認是true。

solr.hdfs.blockcache.read.enabled

啟用讀緩存。默認是true。

solr.hdfs.blockcache.direct.memory.allocation

啟用直接內(nèi)存分配。如果為false,則使用堆。默認是true

solr.hdfs.blockcache.slab.count

要分配的內(nèi)存塊的數(shù)量。每個平板大小為128 MB。默認是1

solr.hdfs.blockcache.global

為所有SolrCores啟用/禁用一個全局緩存。使用的設(shè)置將來自第一個創(chuàng)建的HdfsDirectoryFactory。默認是true。

NRTCaching目錄設(shè)置

solr.hdfs.nrtcachingdirectory.enable

true | 啟用NRTCachingDirectory的使用。默認是true。

solr.hdfs.nrtcachingdirectory.maxmergesizemb

NRTCachingDirectory最大段大小的合并。默認是16

solr.hdfs.nrtcachingdirectory.maxcachedmb

NRTCachingDirectory最大緩存大小。默認是192。

HDFS客戶端配置設(shè)置

solr.hdfs.confdir

傳遞HDFS客戶端配置文件的位置 - 例如HDFS HA所需的位置。

Kerberos身份驗證設(shè)置

在嘗試訪問像 HDFS 這樣的核心服務(wù)時,可以將Hadoop配置使用Kerberos協(xié)議來驗證用戶身份。如果您的HDFS目錄使用Kerberos進行保護,那么您需要配置Solr的HdfsDirectoryFactory,以使用Kerberos進行身份驗證,以讀取和寫入HDFS。要從Solr啟用Kerberos身份驗證,您需要設(shè)置以下參數(shù):

solr.hdfs.security.kerberos.enabled

設(shè)置為true,則表示啟用Kerberos身份驗證。默認是false。

solr.hdfs.security.kerberos.keytabfile

密鑰表文件包含Kerberos主體和加密密鑰對,當(dāng)Solr嘗試使用安全的Hadoop進行身份驗證時,允許進行無密碼驗證。

此文件將需要在此參數(shù)中提供的相同路徑上的所有Solr服務(wù)器上存在。

solr.hdfs.security.kerberos.principal

Solr應(yīng)使用Kerberos主體進行身份驗證以確保Hadoop安全;典型的Kerberos V5主體的格式是:primary/instance@realm。

用于HDFS的示例solrconfig.xml

以下是solrconfig.xml在HDFS上存儲Solr索引的示例配置:

<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory">
  <str name="solr.hdfs.home">hdfs://host:port/solr</str>
  <bool name="solr.hdfs.blockcache.enabled">true</bool>
  <int name="solr.hdfs.blockcache.slab.count">1</int>
  <bool name="solr.hdfs.blockcache.direct.memory.allocation">true</bool>
  <int name="solr.hdfs.blockcache.blocksperbank">16384</int>
  <bool name="solr.hdfs.blockcache.read.enabled">true</bool>
  <bool name="solr.hdfs.nrtcachingdirectory.enable">true</bool>
  <int name="solr.hdfs.nrtcachingdirectory.maxmergesizemb">16</int>
  <int name="solr.hdfs.nrtcachingdirectory.maxcachedmb">192</int>
</directoryFactory>

如果使用Kerberos,則需要將三個與Kerberos相關(guān)的屬性添加到solrconfig.xml中的<directoryFactory>元素,例如:

<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory">
   ...
  <bool name="solr.hdfs.security.kerberos.enabled">true</bool>
  <str name="solr.hdfs.security.kerberos.keytabfile">/etc/krb5.keytab</str>
  <str name="solr.hdfs.security.kerberos.principal">solr/admin@KERBEROS.COM</str>
</directoryFactory>

在SolrCloud中自動添加副本

在HDFS中運行Solr的一個好處是,當(dāng)監(jiān)督注意到碎片已經(jīng)停止時,能夠自動添加新的副本。由于“gone”的索引分片存儲在HDFS中,所以會創(chuàng)建一個新的核心,新的核心將指向HDFS中現(xiàn)有的索引。

在共享文件系統(tǒng)上使用 autoAddReplicas = true 創(chuàng)建的集合自動添加了啟用的副本。以下設(shè)置可用于重寫 <solrcloud> solr. xml 部分中的默認值。

autoReplicaFailoverWorkLoopDelay

監(jiān)督團隊檢查之間的時間(以毫秒為單位)檢測并可能采取行動建立替代復(fù)制品。默認是10000。

autoReplicaFailoverWaitAfterExpiration

在首次發(fā)現(xiàn)替換副本之后,等待啟動替換副本的最短時間(以毫秒為單位)。這對于在停止或啟動群集時防止誤報很重要。默認是30000

autoReplicaFailoverBadNodeExpiration

延遲(以毫秒為單位)之后,標(biāo)記為關(guān)閉的副本將被標(biāo)記為未標(biāo)記。默認是60000。

暫時禁用整個群集的autoAddReplicas

在群集上進行脫機維護, 以及在管理員希望臨時禁用自動添加副本的各種其他用例中, 以下 api 將禁用和重新啟用群集中所有集合的 autoAddReplicas:
通過將群集屬性 autoAddReplicas 設(shè)置為 false, 禁用自動添加副本群集的功能:


在群集上進行脫機維護時,以及在管理員想暫時禁用自動添加副本的各種其他用例中,以下API將禁用并重新啟用群集中所有集合的 autoAddReplicas :

通過將群集屬性autoAddReplicas設(shè)置為false,禁用自動添加副本群集的功能:

http://localhost:8983/solr/admin/collections?action=CLUSTERPROP&name=autoAddReplicas&val=false

通過取消 autoAddReplicas 群集屬性 (如果未提供 val 參數(shù),則不設(shè)置群集屬性),重新啟用自動添加副本 (對于那些用 autoAddReplica = true 創(chuàng)建的集合):

http://localhost:8983/solr/admin/collections?action=CLUSTERPROP&name=autoAddReplicas
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號