[Hadoop 2.2 + Solr 4.5]系列之四:基於HDFS的Solr配置
說明: 在作者上官網上下載solr的時候 solr最新版本已經發布到solr4.5.1了,這里我們就使用solr4.5.1代替了。
另外: solr4.4 以后的版本支持查詢HDFS
1、下載Solr4.5.1、解壓、賦予 用戶Hadoop
1)、下載地址: Solr-4.5.1
2)、unzip 解壓后,賦於hadoop用戶
# chown -R hadoop:hadoop /usr/solr-4.5.1 # mv solr-4.5.1 solr # su - hadoop
2、配置Solr 采用HDFS作為其INDEX Store.
作者根據官網:WIKI進行配置
https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS
另外: 替換掉solr服務下的5個jar文件:4個hadoop-*.jar + 1個protobuf-java-2.5.0.jar
1):/usr/solr/example/solr/collection1/conf/solrconfig.xml
找到directoryFactory 的配置,替換為Hdfs存儲,配置如下:
<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory"> <str name="solr.hdfs.home">hdfs://Master.Hadoop:9000/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.blockcache.write.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>
根據文檔要求:
- You should specify a lock factory type of 'hdfs' or none.
找到lockType,並替換為:
<lockType>${solr.lock.type:hdfs}</lockType>
該文檔配置完畢。
2)、配置Hadoop有操作HDFS的權限。
注意不配置的話會報無法create hdfs data Directory的錯誤!
配置:/usr/hadoop/etc/hadoop/hdfs-site.xml
<property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
3)、替換jar包
網上下載protobuf-java-2.5.0.jar。直接google搜索下載就行。
$ cd /usr/solr/example/solr-webapp/webapp/WEB-INF/lib $ rm hadoop-*.jar $ rm protobuf-java-2.5.0.jar $ cp /usr/hadoop/share/hadoop/common/hadoop-common-2.2.0.jar ./ $ cp /usr/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.2.0.jar ./ $ cp /usr/hadoop/share/hadoop/common/lib/hadoop-auth-2.2.0.jar ./ $ cp /usr/hadoop/share/hadoop/common/lib/hadoop-annotations-2.2.0.jar ./ $ cp ~/protobuf-java-2.5.0.jar ./ #注意: 我將protobuf-java-2.5.0.jar文件上傳到了/home/hadoop/下的。然后才cp過來的。
4)、啟動solr
$ cd /usr/solr/example
$ java -jar start.jar
5)、訪問Solr服務
再啟動沒有拋出任何異常后,訪問
http://master.hadoop:8983/solr
3、使用HDFS作為存儲測試
這里我們只是簡單的做一個測試,並沒有修改collection1的schema.xml的配置。HDFS數據使用的是上一節中,我們Mapred job生成的Lucene index。
[Hadoop 2.2 + Solr 4.5]系列之三:MapReduce + Lucene 生成Index文件
查看mapred job生成的lucene文件地址為:
查看lucene collection1的data文件為:
然后執行hadoop dfs -cp
$ hadoop dfs -cp -f /output/test_lucene_99/mmmm/part-00000 /solr/collection1/data/index #另外:/output/test_lucene_99/mmmm/part-00000中的index.done是個空文件,在MapReduce Job執行生成Lucene完成后被創建的。
最后查看Reload Index,查看效果: 效果一
由於,我們的文檔是隨便生成的,沒有配置schema,另外Mapred的map函數也沒有進行對應的格式解析,簡單的以行數為key,該行字符串為value,所以無法進行select查詢,
但是可以進行效果二:
完畢,下面將對Map方法和solr進行詳細的配置與設計,期待中....