CDH环境中SOLR入数据

1       创建集合

  1. SSH远程连接到安装了SOLR的CDH节点。
  2. 运行solrctl  instancedir  --generate  /solr/test/GX_SH_TL_TGRYXX_2015命令就会生成GX_SH_TL_TGRYXX_2015集合的默认配置。
  3. 进入/solr/test/GX_SH_TL_TGRYXX_2015/conf目录,先编辑schema.xml配置字段信息,具体网上一搜一片。
  4. solrconfig.xml文件中在其他<lib/>后面新增<lib dir="/iflytek/solrJar/" regex=".*\.jar"/>,将oracle驱动等依赖jar放在/iflytek/solrJar/目录下,然后远程拷贝/iflytek/solrJar/到其他SOLR节点。
  5. solrconfig.xml文件中在其他< requestHandler />后面新增如下节点。

    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">

    <lst name="defaults">

    <str name="config">data-config.xml</str>

    </lst>

    </requestHandler>

  6. 在/solr/test/GX_SH_TL_TGRYXX_2015/conf目录下新增文件data-config.xml,主要就是配置数据库信息,和要入的数据的对应的查询语句,其中${}表示参数,每次入数据都需要传入这几个参数,内容示例如下:

    <dataConfig>

    <dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@10.154.5.11:1521:test1" user="test" password="test" batchSize="10000"/>

    <document name="defualt">

    <entity pk="ID" name="GX_SH_TL_TGRYXX_2015" query="select ID,XM,SFZH as ZJHM,XB_MC as XB,MZ,TGKKDM AS KKBH,TGKKMC AS KKMC,TGKKSSD AS KKSZDZ,TGSJ,RKSJ AS RYBSJ,CREATEDATE,ETLDATE  from  ${dataimporter.request.tableName} t where t.etldate>=‘${dataimporter.request.dateStart}‘  and t.etldate < ‘${dataimporter.request.dateEnd}‘" >

    </entity>

    </document>

    </dataConfig>

  7. 运行命令solrctl instancedir --create GX_SH_TL_TGRYXX_2015 /solr/test /GX_SH_TL_TGRYXX_2015,将配置上传到zookeeper中,以后可用命令solrctl instancedir --update GX_SH_TL_TGRYXX_2015 /solr/test /GX_SH_TL_TGRYXX_2015将修改后的配置更新到zookeeper中。
  8. 用命令solrctl collection --create GX_SH_TL_TGRYXX_2015 -s 3创建集合,GX_SH_TL_TGRYXX_2015是集合名称,当集合名称与前面上传的配置名相同时这里不需要指定配置名称,不同时需要用-c参数指定配置名称,-s 3这个参数指定该集合的分片数,我现在的集群中有3个solr节点,这样就会分片到3个节点上,3个节点数据不是重复的,其中一个节点挂掉时可以加上shards.tolerant=true参数进行查询,数据量只有之前的2/3。

2       手动入数据

通过上述步骤就创建好了集合了,以后要创建其他集合时,可以再solr管理界面看到,如下图:

先去掉Clean的复选框,选择dataconfig中创建的实体,Custom Parameters可以让我们传入自定义参数,我前面创建集合时定义了3个参数,表名和一个时间范围,这样就可以在不修改配置的情况下分片入多个表的数据到一个集合中了。

为什么会定义上面3个参数呢?因为一个SOLR中一个集合一般都对应oracle中多张表(数据量大,分年或分月),一张表中数据量达到几亿时,一次性入进去可能会报快照过旧,这样入进入的数据也无法区分,只能全部重新入,所有这里定义了个时间范围以减小每次入库的数据量避免快照过旧的问题,哪次入库报错就重入哪一次的数据。

如果需要分片入的次数不多的话,可以就在该管理界面人工调整参数入。

3       自动入数据

上面的按时间分片若分片过大就用不到索引,分片过小人工调整参数就不现实了。

于是一般的想法可以写java定时任务,定时检测入库状态,一次入库完成就自动调整参数入下一批数据。

我比较熟悉kettle,我这里使用的是kettle来完成这个工作,不熟悉kettle的就使用java定时任务就行了,存量数据入了还需要持续的入增量数据,这个是必须要有定时任务的。

自动入库每次都要记录日志,便于排查哪次数据入库失败,可以人工单独补进去。

Solr的dataimport有增量入库的方法,但没用过,自己写定时任务可以记录日志到数据库便于监控。

附件2是我正在使用的job,有存量入库和增量入库,我将其中的数据库信息删除了,无法直接运行,仅作参考,看不懂就自己写java吧。

如下两张图是job截图,具体还是用kettle打开看。

图- 1存量入库job示例

图- 2增量入库job示例

  • 对应文档和附件:http://pan.baidu.com/s/1kTxptMv
  • 附SOLR小知识
  1. 查询时在Raw Query Parameters对应的文本框中填入collection=collection1,collection2自定义参数,就可以查询多个集合。
  2. 删除一个查询结果的数据:http://slave3:8983/solr/GX_GA_JJZD_KKXX/update/?stream.body=<delete><query>ETLDATE:[20150106103453 TO 20150116103453]</query></delete>&commit=true
  3. 当集合分片中有分片损坏时,直接查询要报错,加上shards.tolerant=true参数可以忽略错误分片,只查询好的分片。
  4. 取消document唯一性检查(Disable unique document check):默认情况下,索引的时候Solr会检查主键是否有重复的,以避免不同的document使用相同的主键。如果你确认你的document不会有重复的主键,将参数allowDups=true加到url上可以取消检查,对于scv文档,使用overwrite=false。
  5. 根据用途设置字段类型,string类型是不会分词的,想实现如关系数据库的效果时最好用string类型,我就是开始没经验使用了text_general类型,讨了不少麻烦。
  • 附Solrctl帮助

[[email protected] conf]# solrctl --help

usage: /usr/bin/solrctl [options] command [command-arg] [command [command-arg]] ...

Options:

--solr solr_uri

--zk   zk_ensemble

--help

--quiet

Commands:

init        [--force]

instancedir [--generate path [-schemaless]]

[--create name path]

[--update name path]

[--get name path]

[--delete name]

[--list]

collection  [--create name -s <numShards>

[-a Create collection with autoAddReplicas=true]

[-c <collection.configName>]

[-r <replicationFactor>]

[-m <maxShardsPerNode>]

[-n <createNodeSet>]]

[--delete name]

[--reload name]

[--stat name]

[--deletedocs name]

[--list]

core        [--create name [-p name=value]...]

[--reload name]

[--unload name]

[--status name]

cluster     [--get-solrxml file]

[--put-solrxml file]

时间: 2024-10-12 18:17:24

CDH环境中SOLR入数据的相关文章

Hadoop环境中管理大数据存储八大技巧

随着IT互联网信息技术的飞速发展和进步.目前大数据行业也越来越火爆,从而导致国内大数据人才也极度缺乏,下面介绍一下关于Hadoop环境中管理大数据存储技巧. 在现如今,随着IT互联网信息技术的飞速发展和进步.目前大数据行业也越来越火爆,从而导致国内大数据人才也极度缺乏,下面介绍一下关于Hadoop环境中管理大数据存储技巧. 1.分布式存储 传统化集中式存储存在已有一段时间.但大数据并非真的适合集中式存储架构.Hadoop设计用于将计算更接近数据节点,同时采用了HDFS文件系统的大规模横向扩展功能

分布式环境中,模块数据交互协议分析 (百度brpc)

1. 背景 之前听到同事说,要为自己的模块考虑写个数据协议.今天有空想了一下.写出来,方便后续使用. 开源代码brpc中可以支持多种协议,nshead.redis.mongo等20多种协议. 2. 什么是数据交互协议? 这里说的协议,不是tcp/ip这些网络协议. 在分布式环境中,我们需要将模块的数据通过网络bit流传给上.下游模块,就会涉及到数据完整性.正确性校验. 为了能够校验数据,就需要定义数据交换协议. 3. 代码brpc中的实现 每种协议类型,都需要实现自己的parser类,进行消息的

创建触发器在表中播入数据时ID自动增长

create table ttt (id number primary key ,name varchar2(20),age number(2)) create or replace trigger gger_tt before insert on ttt for each row when (new.id is null) begin select ttt_sequence.nextval into :new.id from dual; end;

理解Docker(6):若干企业生产环境中的容器网络方案

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 Docker 在早期只有单机上的网络解决方案,在 1.19 版本引入了原生的 overlay 网络解决方案,但是它的性能损耗较大,可能无法适应一些生产环

Oracle rac集群环境中的特殊问题

备注:本文摘抄于张晓明<大话Oracle RAC:集群 高可用性 备份与恢复> 因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战. 1.并发控制 在集群环境中,关键数据通常是并发存放的,比如放在共享磁盘上.而集群内各个成员的生身份是对等的,所有节点对数据有相同的访问权利.这时就必须有某种机制能够控制节点对数据的访问. 在Oracle rac中,是利用DLM (Distribute Look Management)机制来进行多个实例间的并发控制. 2.健忘症

ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

转:http://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解.由于内容比较多,一口气吃不成胖子,得慢慢来一步一个脚印,因此我对后期ZooKeeper的学习规划如下: 第一阶段: |---理解ZooKeeper的应用 |---ZooKeeper是什么 |--

模块化之后的项目在正式环境中的数据迁移(含代码生成器)

先说下背景,项目以前一直使用EntityFramework中的自动迁移功能,虽然一开始就知道存在一些不妥的地方,但由于时间原因一直没有更改这个方式,而这一次由于协同开发的人越来越多不得不进行改造. 为什么不再使用EntityFramework的自动迁移功能 1.迁移过程不可控 EntityFramework自动迁移所生成的脚本我们不可见,并不知道执行了什么内容,这对正式运行的项目是一个很危险的因素. 2.可能存在表丢失的情况 因为项目是模块化的,所以当一些模块在特定的情况下(我们当然希望是100

大数据落地的大挑战,明略数据在老环境中寻找新路径

"大数据"一词进入了十九大报告中,报告提出要"推动互联网.大数据.人工智能和实体经济深度融合".换句话说,就是要把大数据这样的先进技术,落地到实际的行业应用和业务场景中,对实体经济发挥真正的作用,创造实在的价值. 从2015年起,"大数据"一词就被移出了Gartner的新兴技术炒作曲线.然而,据有关统计,截至2017年8月初,我国大数据领域有183家企业获得融资,其中A轮81家.天使轮51家,也就是72%的大数据企业仍处于创业初期,商业模式仍有待

Jmeter请求响应后的数据截取特定数据并修改特定参数再下一请求中作为入参使用

1.查询用户信息,出参中包含用户id 使用jsonPath提取出用户id 2.获取任务详情,出参信息列表list要在第三步任务处理中做入参使用,但是要要修改list中的数据(如上一步提取的id) 使用beanShell PostProcessor提取获取任务详情参数并修改其中的值 3.处理任务 处理任务的入参为第二步修改后的出参,即"var_data_obj",直接在地散步引用即可: 原文地址:https://www.cnblogs.com/cjy-blog/p/10293718.ht