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帮助

[root@slave1 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]

转载于:https://www.cnblogs.com/majinju/p/4856270.html

大数据系列-CDH环境中SOLR入数据相关推荐

  1. powerha_在IBM PowerHA集群环境中实现存储数据的服务器端缓存

    本文介绍了如何将IBMPowerHA®集群配置为使用定制的应用程序脚本为应用程序提供高可用性(HA)时,如何在IBM®AIX®操作系统上启用服务器端存储数据缓存 . AIX提供AIX 7.1 TL4 ...

  2. (C语言)已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。

    (C语言)已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列. 输入样例: 5 2 4 9 10 11 6 1 2 4 6 7 8 输 ...

  3. sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据

    Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现. 1.Spark Streami ...

  4. 服务数据对象简介(Java 环境中的下一代数据编程)

    如果您认为 J2EE 编程模型和 API 迫使开发人员在特定于技术的配置.编程和调试上浪费了太多的时间,那么欢迎您阅读本文.很多 Java™ 开发人员都怀疑如何能以统一的方式访问异构的数据,并对各种提 ...

  5. Mysql在生产环境中快速清理数据及表空间释放

    Mysql数据快速清理及表空间释放 1.TABLES表主要字段说明: MySQL的 information_schema 数据库中的TABLES 表记录了MySQL数据库中每个表占用的空间.表记录的行 ...

  6. 1105 Spiral Matrix 给定数组向螺旋矩阵中填入数据

    两个测试用例超时,可直接跳转到 目录 超时点1 超时点2 ​​​​​​​ 要做的事情是,将数组按照非升序/降序,顺时针从外围到内部一圈一圈地把数据填到矩阵中,并打印出来.也就是将数组排好序后,将矩阵的 ...

  7. Nginx技术研究系列7-Azure环境中Nginx高可用性和部署架构设计

    前几篇文章介绍了Nginx的应用.动态路由.配置.在实际生产环境部署时,我们需要同时考虑Nginx的高可用性和部署架构. Nginx自身不支持集群以保证自身的高可用性,商业版本的Nginx+推荐: T ...

  8. node sqlite 插入数据_安卓手机中的应用数据都保存在哪些文件中?

    随笔 知识 案例 声音 其他 编者按 手机取证,品牌是一方面,从操作系统入手是另外一个渠道.手机中的重要数据基本上都以轻量数据库的形式保存在本地,也就是经常讲的sqlite db文件中. 从推特上得知 ...

  9. 机器学习 处理不平衡数据_在机器学习中处理不平衡数据

    机器学习 处理不平衡数据 As an ML engineer or data scientist, sometimes you inevitably find yourself in a situat ...

最新文章

  1. 控件的实际大小与呈现大小
  2. ccxprocess启动项可以禁用么_Mac怎么禁用Adobe无用自启动项-Mac禁用Adobe无用自启动项方法 - 河东软件园...
  3. c语言rtu crc16,Modbus-RTU-crc16校验方法C语言实现
  4. jdbc时区_什么比日期和时区更难? SQL / JDBC中的日期和时区!
  5. 如何在内存序列化中使用Java深克隆对象
  6. Easytrader踩坑之旅(二)
  7. html body最小高度,CSS网页布局中的最小高度问题的解决方法
  8. 并发之初章Java内存模型
  9. 计算机导论的计算题,计算机导论复习题(选择部分)汇总
  10. 最新cs1.6服务器ip地址,CS1.6服务器IP地址
  11. 灰色理论 光滑度处理 matlab,基于灰色理论的电子设备寿命预测研究
  12. 高瓴张磊对话高毅邱国鹭:如何越过投资的价值陷阱?(附实录)
  13. 【论文笔记_自知识蒸馏_2021】Revisiting Knowledge Distillation via Label Smoothing Regularization
  14. C语言函数针对训练--递归篇(动画讲解,由易到难递归例题)
  15. xman_2019_format(非栈上格式化字符串仅一次利用的爆破)
  16. 植物大战僵尸修改关卡及金币
  17. addEventListener 的第三个参数capture、once、passive
  18. 网络:IP地址和子网掩码
  19. 我看所谓“汉语编程”
  20. vscode突然无法登上remote端的一个解决方案

热门文章

  1. 如何与职场“老油条”和谐的相处
  2. 小飞鱼通达二开 通达OA工作流超时自动转交程序,让工作流加速到360迈!(图文)
  3. 最新版本 Stable Diffusion 开源 AI 绘画工具之图生图进阶篇
  4. Linux运维常问面试题总结
  5. 配置ntp时钟同步(tar包方式安装ntp)
  6. Windows编程的兼容性问题
  7. Nature子刊:刘威/潘玉峰等发现肠道微生物可以影响果蝇的攻击行为
  8. 对div实现右键弹出自定义菜单
  9. 服务器开机显示mm,【分享】mmrecov到新的服务器后,启动RPC服务的问题
  10. 我把废旧 Android 手机改造成了 Linux 服务器,Android开发学习视频