知识库 : UDH Search系统构建及其应用

 

 

Edit Document

 

 

 

 

 

 

 

 

 

 

UDH Search系统构建及其应用

 

 

 

作者 费英林

 


目录

1.               Search 概要

1.1.               Search 中索引创建的主要流程

1.2.               主要组件

2.               Search 安装与配置

2.1.               安装节点选择

2.2.               安装命令

2.3.               初始化 Solr

2.4.               配置 Solr 使用 Secure HDFS

2.5.               HDFS 中创建 solr 目录

2.6.               ZooKeeper 中初始化 Solr 命名空间

2.7.               启动 Solr

2.8.               配置 – Hue Search

3.               批量创建 HBase 索引

3.1.               创建 HBase

3.2.               生成 collection

3.3.               创建 Lily HBase Indexer 配置文件

3.4.               创建 Morphline 配置文件

3.5.               运行 Lily HBase Indexer

3.6.               验证

3.7.               应用场景

4.               实时生成 HBase 索引

4.1.               建立 HBase 主从 Replication 集群

4.2.               设置 ZK 集群

4.3.               设置 HBase 表的列族为 Replication 模式

4.4.               生成 collection 和配置文件

4.5.               注册一个 Indexer

4.6.               HBase 主集群中新增数据,验证结果

4.7.               应用场景

5.               安装包

 

UDH Search 是一个索引创建与检索服务,它与 UDH 高度集成,核心系统是 Apache Solr  - 包括 Apache Lucene SolrCloud Apache Tika Solr Cell Search 生成的索引数据存储在 HDFS ,避免了海量数据的移动问题,缩短了索引的创建周期;同时, HDFS 的多数据备份保证了索引数据的安全性。借助于 UDH Search ,我们实现了对于存储在 HDFS HBase 中的数据的近实时访问。在 UDH 平台,索引的创建有两种方式:批处理方式和近实时方式。

UDH Search 提供了标准的 Solr API 供客户端调用,它还提供了一个简单的 UI ,可集成在 Hue 的框架里。 UDH Search 的主要特性如下:

1 )生成的索引文件存储在 HDFS

2 )可以使用 MapReduce 批量创建索引

3 )可以在数据导入 HDFS HBase 时实时创建索引

4 )可以与 Hue 集成,通过 Hue 实现界面访问

5 )可以通过索引数据检索 HBase 数据

 

本文以HBase数据的索引创建为例,阐述了利用 UDH Search 的基本工作原理及配置方法,包括批处理方式和实时处理方式。

 

 

1.     Search 概要

searcharchitect.jpg

1.1.   Search中索引创建的主要流程

              Search 有三种方式创建索引:

1 )实时索引创建

这是一种近实时的索引创建方式。通过 Flume 的配置文件,可以将输入数据中的字段映射到标准的 Solr schema Lucene 建立索引并将索引数据写到 HDFS ,然后加载到 Solr 搜索引擎。

2 )使用 MapReduce 批量创建索引

对于存储在 HDFS 中的数据,我们可启动一个 MapReduce 工作流,在 Map 阶段执行字段抽取和 schema 映射,在 Reduce 阶段生成索引文件或索引分片。

3 HBase 数据索引创建

  对于存储在 HBase 中的数据,有两种创建索引的方式:批处理方式和实时方式。

批处理方式 通过运行一个 MapReduce 作业,对已有数据批量创建索引;

实时方式 利用 HBase Replication 机制,实时获取 HBase 的数据流。

1.2.   主要组件

1 Morphline - 是一个开源框架,用于辅助 Search 的索引创建工作。通过配置文件来定义 ETL 流程,可实现数据读取、数据处理及数据加载。

2 Lily HBase NRT Indexer - HBase 启用了复制模式后,可通过 Lily HBase NRT Indexer 实时获取 HBase 的增删改数据,动态创建索引并加载到 Solr 服务器。

3 MapReduceIndexerTool   批量索引创建工具,生成的索引文件存储在 HDFS

2.     Search 安装与配置

2.1.   安装节点选择

    UDH Search 是一个分布式索引创建框架,需要访问 HDFS HBase 中的数据。为降低网络 IO ,提高索引创建效率,可以在每个 DataNode HBase RegionServer 所在的主机上部署 Search 服务。考虑到 Search 服务可能会影响到整个集群的性能,我们也可以单独搭建一个索引服务器集群。

 

2.2.   安装命令

安装 Solr 服务器: sudo yum install solr-server solr-doc

安装 Hue Search 服务: sudo yum install hue-search

安装 Spark Indexer:  sudo yum install solr-crunc MapReduce h

安装 MapReduce Indexer sudo yum install solr-mapreduce

安装 Lily HBase Indexer sudo yum install hbase-solr-indexer hbase-solr-doc

2.3.   初始化 Solr

  编辑 /etc/default/solr , 设置如下参数:

1 ZK 集群: SOLR_ZK_ENSEMBLE=<zkhost1>:2181,<zkhost2>:2181,<zkhost3>:2181/solr

2 HDFS SOLR_HDFS_HOME=hdfs://namenodehost:8020/solr

3 Solr HDFS client SOLR_HDFS_CONFIG=/etc/hadoop/conf ( 包含 core-site.xml/hdfs-site.xml 的目录 )

 

2.4.   配置 Solr 使用 Secure HDFS

1 )为每个 Solr 服务器创建 principals/Keytab :

                            addprinc -randkey solr/fully.qualified.domain.name@YOUR-REALM.COM

                            xst -norandkey -k solr.keytab solr/fully.qualified.domain.name

 

              2 )在每个 Solr 服务器上配置 Keytab :

                            sudo mv solr.keytab /etc/solr/conf/

                            sudo chown solr:hadoop /etc/solr/conf/solr.keytab

                            sudo chmod 400 /etc/solr/conf/solr.keytab

 

3 )编辑 /etc/default/solr

                            SOLR_KERBEROS_ENABLED=true

                            SOLR_KERBEROS_KEYTAB=/etc/solr/conf/solr.keytab

                            SOLR_KERBEROS_PRINCIPAL=solr/fully.qualified.domain.name@YOUR-REALM.COM

2.5.   HDFS 中创建 solr 目录

              sudo -u hdfs hadoop fs -mkdir /solr

              sudo -u hdfs hadoop fs -chown solr /solr

2.6.   ZooKeeper 中初始化Solr命名空间

              solrctl init

              solrctl init --force # 清除全部 Solr data ,中断所有运行的 Solr 服务器

 

2.7.   启动 Solr

              sudo service solr-server restart

              sudo jps –lm

 

2.8.   配置 Hue Search

1 )设置 solr_url , 编辑 /etc/hue/hue.ini :

                            # Specify the Solr URL:

                            [search]

                            solr_url=http://SolrHostName:8983/solr/

 

2 )启用安全(在安全集群里) , 编辑 /etc/hue/hue.ini :

                            security_enabled=true

                           

3 )启用代理 , 编辑 /etc/default/solr:

                            SOLR_SECURITY_ALLOWED_PROXYUSERS=hue

                            SOLR_SECURITY_PROXYUSER_hue_HOSTS=*

                            SOLR_SECURITY_PROXYUSER_hue_GROUPS=*

                                         

4 )验证

                            http://hue-host.com:8888/search /

3.     批量创建 HBase 索引

              Search 有两种索引创建方式,即批量创建和实时创建。接下的两个章节将以 HBase 的索引创建为例,阐述相关的配置及运行方式。

3.1.   创建 HBase

              HBase 中生成一张测试表,并新增几条数据。例如:

              $ hbase shell

              hbase(main):002:0> create 'record', {NAME => 'data'}

              hbase(main):002:0> put 'record', 'row1', 'data', 'value'

              hbase(main):001:0> put 'record', 'row2', 'data', 'value2'

3.2.   生成 collection

1 )生成一个 collection 的本地目录:

                            $ solrctl instancedir --generate $HOME/hbase-collection1

                2 )编辑这个 collection schema.xml ,加入希望生成的字段:

                            <field name=" data " type=" string " indexed="true" stored="true" />

  3 )上传这个 collection ZK 集群:

              $ solrctl instancedir --create hbase-collection1 $HOME/hbase-collection1

              $ solrctl collection --create hbase-collection1

3.3.   创建 Lily HBase Indexer 配置文件

              collection 的本地目录中生成 Lily HBase Indexer 配置文件,如

$HOME/morphline-hbase-mapper.xml

<?xml version="1.0"?>

<indexer table="record" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper">

   <param name="morphlineFile" value="/etc/hbase-solr/conf/morphlines.conf"/>

   <!-- <param name="morphlineId" value="morphline1"/> -->

</indexer>

3.4.   创建 Morphline 配置文件

生成相应的 Morphline 配置文件 /etc/hbase-solr/conf/morphlines.conf

morphlines : [

  {

    id : morphline1

    importCommands : ["org.kitesdk.morphline.**", "com.ngdata.**"]

 

    commands : [                   

      {

        extractHBaseCells {

          mappings : [

            {

              inputColumn : "data:*"

              outputField : "data"

              type : string

              source : value

            }

          ]

        }

      }

      { logTrace { format : "output record: {}", args : ["@{}"] } }   

    ]

  }

]              

3.5.   运行 Lily HBase Indexer

hadoop --config /etc/hadoop/conf jar \

/usr/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar --conf \

/etc/hbase/conf/hbase-site.xml -D 'mapred.child.java.opts=-Xmx500m' \

--hbase-indexer-file $HOME/morphline-hbase-mapper.xml --zk-host \

127.0.0.1/solr --collection hbase-collection1 --go-live --log4j \

src/test/resources/log4j.properties

3.6.   验证

在浏览器中输入地址 http:// solrhost :8983/solr ,选择相应的 collection ,点击查询进行验证。

3.7.   应用场景

批处理模式适用于数据量大,时效性要求不高的情况。

4.     实时生成 HBase 索引

              通过 HBase Replication 机制, Search 实现了 HBase 数据的(接近)实时索引创建。数据进入主集群,然后 Replicate 到从集群,从集群的 HBase Indexer 创建索引到在线 Solr 服务器。这个过程所用的时间通常是在秒级别。关于 HBase 备份集群的创建及配置方法请参考‘如何配置 UDH HBase Replication 集群’。

 

4.1.   建立 HBase 主从Replication集群

参见‘如何配置 UDH HBase Replication 集群’

4.2.   设置ZK集群

/etc/hbase-solr/conf/hbase-indexer-site.xml 中设置 HBase Indexer 需要访问的 ZK 集群:

<property>

   <name>hbase.zookeeper.quorum</name>

   <value>hbase-cluster-zookeeper</value>

</property>

<property>

   <name>hbaseindexer.zookeeper.connectstring</name>

   <value>hbase-cluster-zookeeper:2181</value>

</property>

4.3.   设置 HBase 表的列族为Replication模式

对于已经存在的表:

              hbase shell> disable 'record'

              hbase shell> alter 'record', {NAME => 'data', REPLICATION_SCOPE => 1}

              hbase shell> enable 'record'

 

对于新表:

              hbase shell> create 'record', {NAME => 'data', REPLICATION_SCOPE => 1}

4.4.   生成collection和配置文件

   相关的配置与批量创建索引的配置一致,参考上一个章节。

4.5.   注册一个Indexer

在服务中注册 Indexer

$ hbase-indexer add-indexer \

              --name myIndexer \

              --indexer-conf $HOME/morphline-hbase-mapper.xml \

              --connection-param solr.zk=solr-cloude-zk1,solr-cloude-zk2/solr \

              --connection-param solr.collection=hbase-collection1 \

              --zookeeper hbase-cluster-zookeeper:2181

检查是否注册成功:

     $ hbase-indexer list-indexers

4.6.   在HBase主集群中新增数据,验证结果

1 )重启服务:

              sudo service hbase-solr-indexer restart

2 )添加记录到主集群:

                               hbase(main):001:0> put 'record', 'row1', 'data', 'value'

                               hbase(main):002:0> put 'record', 'row2', 'data', 'value2'

3 )页面检查索引数据,确认主集群数据已经在从集群中出现并建立了索引。

4.7.   应用场景

实时处理模式适用于有持续数据量,时效性要求很高的情况。不适用于存在删除、修改的数据流。

5.     安装包

http://archive-primary.cloudera.com/cdh5/redhat/6/x86_64/cdh/5.0.4/RPMS/noarch/

hbase-solr-1.3+cdh5.0.4+49-1.cdh5.0.4.p0.11.el6.noarch.rpm

hbase-solr-doc-1.3+cdh5.0.4+49-1.cdh5.0.4.p0.11.el6.noarch.rpm

hbase-solr-indexer-1.3+cdh5.0.4+49-1.cdh5.0.4.p0.11.el6.noarch.rpm

search-1.0.0+cdh5.0.4+0-1.cdh5.0.4.p0.8.el6.noarch.rpm

solr-4.4.0+cdh5.0.4+198-1.cdh5.0.4.p0.14.el6.noarch.rpm

solr-doc-4.4.0+cdh5.0.4+198-1.cdh5.0.4.p0.14.el6.noarch.rpm

solr-mapreduce-1.0.0+cdh5.0.4+0-1.cdh5.0.4.p0.8.el6.noarch.rpm

solr-server-4.4.0+cdh5.0.4+198-1.cdh5.0.4.p0.14.el6.noarch.rpm              

 

http://archive-primary.cloudera.com/cdh5/redhat/6/x86_64/cdh/5.0.4/RPMS/x86_64/

hue-search-3.5.0+cdh5.0.4+387-1.cdh5.0.4.p0.11.el6.x86_64.rpm

 

Attachments:

基于UDH的一种实时查询系统构建方案 - 知识库 - 数据处理平台知识库.htm (text/html)
专题_基于UDH的一种实时查询系统构建方案.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
图1.png (image/png)
图2.png (image/png)
图3.png (image/png)
图4.png (image/png)
专题-UDH Search系统构建及其应用.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
专题-UDH Search系统构建及其应用.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)