本人英文水平有限,翻譯讀起來磕磕巴巴魂迄,大概只能表述基本意思禾乘,希望大家諒解,如果有好的建議措近,也歡迎指正.
翻譯原文地址:https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS
Solr支持從HDFS分布式文件系統(tǒng)讀寫它的索引和事務(wù)日志文件溶弟。它并不是利用Hadoop的MapReduce去處理solr數(shù)據(jù),而僅僅是用HDFS文件系統(tǒng)來進行索引和事務(wù)日志的存儲瞭郑。
利用HDFS替換本地存儲系統(tǒng)可很,你必須用Hadoop2.x版本,且你需要設(shè)置Solr使用HdfsDirectoryFactory凰浮,另外還有些其他的額外參數(shù)需要定義,你可以通過三種方式來設(shè)置它們:
1苇本、在啟動的時候作為JVM的參數(shù)傳遞給bin/solr這個腳本袜茧,不過它需要你每次啟動的時候都需要傳遞。
2瓣窄、更改solr.in.sh(solr.in.cmd windows上)去自動傳遞JVM參數(shù)笛厦,而不用手動指定。
3俺夕、在solrconfig.xml中定義裳凸,這些配置每個索引都要重復(fù)定義,不過對于部分需要存儲在HDFS的索引來說是個好的選項劝贸。
獨立模式
對于獨立的solr實例來說姨谷,在啟動前,一些參數(shù)需要修改映九∶蜗妫可以在solrconfig.xml或者直接在啟動的時候傳遞給bin/solr腳本。
l需要指定使用HdfsDirectory和hdfs格式的數(shù)據(jù)目錄:hdfs://host:port/path
l需要指定hdfs格式的更新日志目錄位置:hdfs://host:prot/path
l需要指定鎖定factory為hdfs或者空件甥。
如果你不想更改solrconfig.xml文件捌议,你可以使用:
bin/solr start -Dsolr.directoryFactory=HdfsDirectoryFactory
-Dsolr.lock.type=hdfs
-Dsolr.data.dir=hdfs://host:port/path
-Dsolr.updatelog=hdfs://host:port/path
云模式
在云模式中,最好的方式是簡單的指定solr.hdfs.home選項引有,由solr在創(chuàng)建索引時候瓣颅,會在solr.hdfs.home指定的目錄下自動創(chuàng)建數(shù)據(jù)和更新日志目錄。
l設(shè)定solr.hdfs.home=hdfs://host:port/path
l設(shè)定鎖定工廠為hdfs或者空.
bin/solr start -c -Dsolr.directoryFactory=HdfsDirectoryFactory
-Dsolr.lock.type=hdfs
-Dsolr.hdfs.home=hdfs://host:port/path
更改solr.in.sh(solr.in.cmd)文件
以上方式是通過啟動solr時候譬正,人工傳遞JVM參數(shù)來使用HDFS宫补,這樣在每次啟動的時候都需要設(shè)置檬姥。在Solr啟動的時候會去在bin目錄下找solr.in.sh(solr.in.cmd在windows下)去設(shè)置環(huán)境變量。你可以在這個文件里設(shè)置好相關(guān)參數(shù)守谓,不用每次啟動時候輸入穿铆。
如果solr云模式經(jīng)常是在HDFS上運行的,可以如下設(shè)置:
# Set HDFS DirectoryFactory & Settings
-Dsolr.directoryFactory=HdfsDirectoryFactory \
-Dsolr.lock.type=hdfs \
-Dsolr.hdfs.home=hdfs://host:port/path \
塊緩存
為了性能原因斋荞,HdfsDirectoryFactory用Directory進行緩存HDFS塊荞雏。這個緩存機制取代了solr利用的的標(biāo)準(zhǔn)文件系統(tǒng)緩存。默認(rèn)情況下平酿,緩存是在堆外分配的凤优。
這個緩存是相當(dāng)大的,你需要提高solr的特定JVM堆外緩存的限制蜈彼。在Oracle/OpenJDK JVM中筑辨,以下的命令行參數(shù)你可以用來提升限制:
-XX:MaxDirectMemorySize=20g
HdfsDirectoryFactory參數(shù)
HdfsDirectoryFactory有許多參數(shù)設(shè)置,被定義為directoryFactory的一部分幸逆。
Solr的HDFS設(shè)置
塊緩存設(shè)置
近實時查詢設(shè)置
HDFS的客戶端配置設(shè)置
Kerberos認(rèn)證設(shè)置
Hadoop可以配置使用Kerberos協(xié)議來確定用戶身份棍辕,當(dāng)用戶訪問類似HDFS等核心服務(wù)的時候,如果你的HDFS目錄是用Kerberos來包婚的,你需要配置solr的HdfsDIrectoryFactory來使用Kerberos進行認(rèn)證以便讀寫HDFS。
為此你需要設(shè)置下面參數(shù):
Solr.confg中配置例子
如果使用kerberos碰煌,你需要添加kerberos的相關(guān)屬性,如下:
Solr云模式下自動添加副本
將Solr運行在HDFS上有個好處抚太,就是監(jiān)工注意到一個shard有問題時候,有能力自動添加一個新的副本昔案。因為當(dāng)?shù)舻乃饕齭hard是保存在HDFS上的尿贫,新的core
將被創(chuàng)建。
Collection利用autoAddReplicas=true在一個共享的文件系統(tǒng)創(chuàng)建時候踏揣,可以具有自動添加一個副本能力庆亡。可以重寫配置在solr.xml中配置部分的默認(rèn)值呼伸。
暫時為整個集群禁用自動添加副本功能
在離線維護集群和其他各種使用情況下身冀,管理員想暫時禁止自動添加副本,下面的API將禁用和啟用集群中所有collection的autoAddReplicas功能括享。
禁用自動添加集群副本功能搂根,可以通過設(shè)置集群屬性autoAddReplicas為false來得到:
http://localhost:8983/solr/admin/collections?action=CLUSTERPROP&name=autoAddReplicas&val=false
再次啟用自動添加副本功能,當(dāng)沒有參數(shù)提供時候铃辖,集群屬性是未設(shè)置的剩愧。
http://localhost:8983/solr/admin/collections?action=CLUSTERPROP&name=autoAddReplicas