HDFS 上の Solr
Solr HDFS モジュールは、Solr のインデックスファイルとトランザクションログファイルを HDFS 分散ファイルシステムに書き込み、読み取る機能をサポートしています。Solr データの処理に Hadoop MapReduce は使用しません。
ローカルファイルシステムではなく HDFS を使用する場合は、Hadoop 2.x を使用している必要があり、HdfsDirectoryFactory
を使用するように Solr に指示する必要があります。また、定義する必要がある追加パラメータがいくつかあります。これらは 3 つの方法のいずれかで設定できます。
-
bin/solr
スクリプトに JVM 引数を渡します。これは、bin/solr
で Solr を起動するたびに渡す必要があります。 -
bin/solr
を使用した際に手動で設定する必要なく、JVM 引数を自動的に渡すように、solr.in.sh
(または Windows の場合はsolr.in.cmd
)を変更します。 -
solrconfig.xml
でプロパティを定義します。これらの構成変更は、コレクションごとに繰り返す必要があるため、一部のコレクションのみを HDFS に保存する場合に適しています。
モジュール
これは、使用前に有効にする必要がある hdfs
Solr モジュール を介して提供されます。
HDFS 上の Solr の起動
ユーザー管理クラスタと単一ノードインストール
ユーザー管理クラスタまたは単一ノードの Solr インストールでは、Solr を起動する前にいくつかのパラメータを変更する必要があります。これらは solrconfig.xml
で設定できます(詳細は 下記)、または起動時に bin/solr
スクリプトに渡すことができます。
-
HdfsDirectoryFactory
とhdfs://host:port/path
形式のデータディレクトリを使用する必要があります。 -
hdfs://host:port/path
形式のupdateLog
の場所を指定する必要があります。 -
ロックファクトリタイプを
'hdfs'
または none に指定する必要があります。
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
この例では、定義された JVM プロパティ(詳細は 下記)を使用して Solr が起動します。
SolrCloud インスタンス
SolrCloud モードでは、データディレクトリと更新ログディレクトリを Solr のデフォルトのままにして、solr.hdfs.home
を指定するだけで十分です。動的に作成されたすべてのコレクションは、solr.hdfs.home
ルートディレクトリの下に適切なディレクトリを自動的に作成します。
-
solr.hdfs.home
をhdfs://ホスト名:ポート番号/パス
の形式で設定します。 -
ロックファクトリタイプを
'hdfs'
または none に指定する必要があります。
bin/solr start -c -Dsolr.directoryFactory=HdfsDirectoryFactory
-Dsolr.lock.type=hdfs
-Dsolr.hdfs.home=hdfs://host:port/path
このコマンドは、定義されたJVMプロパティを使用してSolrを起動します。
solr.in.sh (*nix)またはsolr.in.cmd (Windows)の修正
上記の例では、Solrを起動するためにbin/solr
を使用するたびに、JVM引数を開始コマンドの一部として渡すことを前提としています。しかし、bin/solr
は環境変数を設定するためのsolr.in.sh
(Windowsではsolr.in.cmd
)という名前のインクルードファイルを探します。デフォルトでは、このファイルはbin
ディレクトリにあります。このファイルを修正してHdfsDirectoryFactory
の設定を永続的に追加し、Solrが起動されるたびにそれらが使用されるようにすることができます。
例えば、SolrCloudモードで実行する場合に常にHDFSを使用するようにJVM引数を設定するには(上記参照)、次のようなセクションを追加します。
# Set HDFS DirectoryFactory & Settings
-Dsolr.directoryFactory=HdfsDirectoryFactory \
-Dsolr.lock.type=hdfs \
-Dsolr.hdfs.home=hdfs://host:port/path \
ブロックキャッシュ
パフォーマンス向上のため、HdfsDirectoryFactory
はHDFSブロックをキャッシュするディレクトリを使用します。このキャッシュメカニズムは、Solrが使用する標準のファイルシステムキャッシュに置き換わります。デフォルトでは、このキャッシュはオフヒープに割り当てられます。このキャッシュは非常に大きくなることが多いため、Solrを実行している特定のJVMのオフヒープメモリ制限を引き上げる必要がある場合があります。Oracle/OpenJDK JVMの場合、Solrの起動時に制限を引き上げるために使用できるコマンドラインパラメータの例を以下に示します。
-XX:MaxDirectMemorySize=20g
HdfsDirectoryFactoryパラメータ
HdfsDirectoryFactory
には、directoryFactory
設定の一部として定義された多くの設定があります。
Solr HDFS設定
solr.hdfs.home
-
必須
デフォルト:なし
Solrがコレクションデータを書き込むHDFSのルートロケーション。データディレクトリまたは更新ログディレクトリのHDFSロケーションを指定する代わりに、このパラメータを使用して1つのルートロケーションを指定し、すべてが自動的にこのHDFSロケーション内に作成されるようにします。このパラメータの構造は
hdfs://ホスト名:ポート番号/パス/solr
です。
ブロックキャッシュ設定
solr.hdfs.blockcache.enabled
-
オプション
デフォルト:
true
ブロックキャッシュを有効にします。
solr.hdfs.blockcache.read.enabled
-
オプション
デフォルト:
true
読み取りキャッシュを有効にします。
solr.hdfs.blockcache.direct.memory.allocation
-
オプション
デフォルト:
true
ダイレクトメモリ割り当てを有効にします。これが
false
の場合、ヒープが使用されます。 solr.hdfs.blockcache.slab.count
-
オプション
デフォルト:
1
割り当てるメモリのスラブ数。各スラブは128MBです。
solr.hdfs.blockcache.global
-
オプション
デフォルト:
true
すべてのSolrCoreに対して1つのグローバルキャッシュを使用するかどうかを有効/無効にします。使用される設定は、最初に作成されたHdfsDirectoryFactoryの設定になります。
NRTCachingDirectory設定
solr.hdfs.nrtcachingdirectory.enable
-
オプション
デフォルト:
true
NRTCachingDirectoryの使用を有効にします。
solr.hdfs.nrtcachingdirectory.maxmergesizemb
-
オプション
デフォルト:
16
マージのためのNRTCachingDirectoryの最大セグメントサイズ。
solr.hdfs.nrtcachingdirectory.maxcachedmb
-
オプション
デフォルト:
192
NRTCachingDirectoryの最大キャッシュサイズ。
Kerberos認証設定
Hadoopは、HDFSなどのコアサービスへのアクセスを試行する際に、ユーザーIDを確認するためにKerberosプロトコルを使用するように設定できます。HDFSディレクトリがKerberosを使用して保護されている場合、HDFSへの読み書きを行うために、Kerberosを使用して認証するようにSolrのHdfsDirectoryFactoryを設定する必要があります。SolrからKerberos認証を有効にするには、次のパラメータを設定する必要があります。
solr.hdfs.security.kerberos.enabled
-
オプション
デフォルト:
false
Kerberos認証を有効にするには
true
に設定します。 solr.hdfs.security.kerberos.keytabfile
-
必須
デフォルト:なし
キータブファイルには、Kerberosプリンシパルと暗号化されたキーのペアが含まれており、SolrがセキュアなHadoopと認証しようとする際にパスワード不要の認証を可能にします。
このファイルは、このパラメータで指定された同じパスですべてのSolrサーバーに存在する必要があります。
solr.hdfs.security.kerberos.principal
-
必須
デフォルト:なし
セキュアなHadoopに対して認証するためにSolrが使用するKerberosプリンシパル。一般的なKerberos V5プリンシパルの形式は、
プライマリ/インスタンス@レルム
です。
更新ログ設定
HDFSを使用してSolrインデックスを保存する場合、トランザクションログもHDFSに保存することをお勧めします。これは、solr.HdfsUpdateLog
更新ログハンドラークラスを使用することで実現できます。solrconfig.xmlは、変数参照または直接指定を使用して更新ログハンドラーのクラス名を定義するために使用されることがよくあります。
<updateLog class="${solr.ulog:solr.UpdateLog}">
このようなクラスを指定する場合は、正しいクラス名が指定されていることを確認する必要があります。クラス名が指定されていない場合、SolrはHdfsDirectory Factoryを使用するように構成されているコレクションに対して、適切な更新ログハンドラークラスsolr.HdfsUpdateLog
を自動的に選択します。
HDFSのsolrconfig.xml例
HDFSにSolrインデックスを保存するためのsolrconfig.xml
設定のサンプルを次に示します。
<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を使用する場合は、次のようにsolrconfig.xml
の<directoryFactory>
要素に3つのKerberos関連のプロパティを追加する必要があります。
<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>