借助Apache Hadoop大规模扩展Apache Solr实时实时索引

播客的第22集是与Patrick Hunt的谈话

我们讨论了Apache Solr(上游)中的新工作,使它可以在Apache Hadoop上工作。 Solr支持将其索引和事务日志文件写入和读取到HDFS分布式文件系统。 这不使用Hadoop Map-Reduce处理Solr数据,而是仅使用HDFS文件系统存储索引和事务日志文件。 https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS

我们还讨论了Solr Cloud以及分片功能如何使Solr可以通过Hadoop集群进行扩展https://cwiki.apache.org/confluence/display/solr/SolrCloud 。

Apache Solr能够设置结合了容错能力和高可用性的Solr服务器集群。 这些功能称为SolrCloud ,这些功能提供了分布式索引和搜索功能,支持以下功能:

  • 整个集群的集中配置
  • 自动负载平衡和查询故障转移
  • ZooKeeper集成用于集群协调和配置。

SolrCloud是灵活的分布式搜索和索引,无需主节点即可分配节点,分片和副本。 相反,Solr使用ZooKeeper来管理这些位置,具体取决于配置文件和架构。 可以将文档发送到任何服务器,ZooKeeper会找出来。

Patrick向我介绍了Morphlines (适用于Hadoop的Cloudera开发工具包的一部分) http://cloudera.github.io/cdk/docs/current/cdk-morphlines/index.html

Cloudera Morphlines是一个开源框架,可减少构建和更改Hadoop ETL流处理应用程序所需的时间和技能,这些应用程序可将数据提取,转换并加载到Apache Solr,HBase,HDFS,企业数据仓库或分析在线仪表板中。 是否想在不进行编程和不具备大量MapReduce技能的情况下构建或促进ETL作业? 以最少的麻烦和支持费用完成工作? 这是入门方法。

morphline是一个丰富的配置文件,可以轻松定义一个转换链,该转换链可以使用来自任何类型数据源的任何类型的数据,处理数据并将结果加载到Hadoop组件中。 它用简单的配置步骤代替了Java编程,并相应地减少了与开发和维护定制ETL项目相关的成本和集成工作。

Morphlines是一个库,可嵌入任何Java代码库中。 morphline是转换命令的内存容器。 命令是用于执行诸如加载,解析,转换或以其他方式处理单个记录之类的任务的morphline插件。 记录是具有可选blob附件或POJO附件的名称/值对的内存中数据结构。 该框架是可扩展的,并且以直接的方式集成了现有功能和第三方系统。

morphline命令是Cloudera Search的一部分。 Morphlines支持ETL数据从Flume和MapReduce以及HBase流入Apache Solr。 Flume涵盖了实时情况,而MapReduce涵盖了批处理情况。 自从推出Cloudera Search morphline开发以来,毕业于Cloudera Development Kit (CDK)的目的是使除Search之外的更多用户和产品都可以使用该技术。 CDK是一组库,工具,示例和文档,旨在简化在Hadoop生态系统之上构建系统的过程。 CDK托管在GitHub上,并鼓励社区参与。 例如,可以将变形线嵌入Crunch,HBase,Impala,Pig,Hive或Sqoop中。 让我们知道您想去哪里!

Morphlines可以看作是Unix管道的演进,其中数据模型被通用化以与通用记录流(包括任意二进制有效载荷)一起工作。 morphline是一种使用记录(例如Flume事件,HDFS文件,RDBMS表或Avro对象),将它们转换为记录流并通过一系列易于配置的转换将记录流通过管道传递给用户的一种有效方式。目标应用程序(例如Solr),如下图所示:

变形线

在此图中,Flume Source接收系统日志事件并将其发送到Flume Morphline Sink,后者将每个Flume事件转换为一条记录,并将其通过管道传递给readLine命令。 readLine命令提取日志行并将其通过管道grokgrok命令。 grok命令使用正则表达式模式匹配来提取该行的某些子字符串。 它将生成的结构化记录通过管道loadSolrloadSolr命令。 最后, loadSolr命令将记录加载到Solr(通常为SolrCloud)中。 在此过程中,原始数据或半结构化数据根据应用程序建模要求转换为结构化数据。

Morphline框架附带了一组常用的高级转换和I / O命令,可以将它们组合为特定于应用程序的方式。 插件系统允许添加新的转换和I / O命令,并以简单的方式集成现有功能和第三方系统。

这种集成可以实现快速的Hadoop ETL应用程序原型制作,实时的复杂流和事件处理,灵活的日志文件分析,多种异构输入模式和文件格式的集成,以及在Hadoop ETL应用程序之间重用ETL逻辑构造块。

CDK附带了一个高效的运行时,该运行时可以动态编译一个吗啉。 运行时在同一线程中执行给定吗啉的所有命令。 将记录从一个命令传递到另一个命令仅意味着廉价的Java方法调用。 特别是,没有队列,没有线程之间的切换,没有上下文切换,也没有命令之间的序列化,这使性能开销最小化。

变形线处理连续或任意大的记录流。 命令将一条记录转换为零个或多个记录。 数据模型可以描述如下:记录是一组命名字段,其中每个字段都有一个或多个值的有序列表。 值可以是任何Java对象。 即,一条记录本质上是一个哈希表,其中每个哈希表条目都包含一个String键和一个Java Objects列表作为值。 请注意,一个字段可以具有多个值,并且任何两个记录都不必使用公共字段名。 这种灵活的数据模型完全符合Solr / Lucene数据模型的特征。

不仅结构化数据,而且二进制数据都可以传递到吗啉并由其处理。 按照约定,一条记录可以包含一个名为_attachment_body的可选字段,该字段可以是Java java.io.InputStream或Java byte []。 可选地,可以通过设置名为_attachment_mimetype(例如“ application / pdf”)和_attachment_charset(例如“ UTF-8”)和_attachment_name(例如“ cars.pdf”)的字段来更详细地表征此类二进制输入数据,这有助于检测和解析数据类型。 这类似于电子邮件的工作方式。

此通用数据模型对于支持广泛的应用程序很有用。 例如, Apache Flume Morphline Solr Sink嵌入了morphline库并执行了morphline,将水槽事件转换为morphline记录并将其加载到Solr中。 该接收器将Flume事件的主体填充到morphline记录的_attachment_body字段中,并将Flume事件的标题复制到同名的记录字段中。 作为另一个示例, MapReduceIndexerTool的Mappers将JavaXML java.io.InputStream引用当前处理的HDFS文件填充到morphline记录的_attachment_body字段中。 MapReduceIndexerTool的Mappers还将有关HDFS文件的元数据填充到记录字段中,例如文件的名称,路径,大小,上次修改时间等。这样,吗啉可以作用于从Flume和HDFS接收的所有数据。 作为另一个示例, Morphline Lily HBase索引器将HBase结果Java POJO填充到morphline记录的_attachment_body字段中。 这样,诸如extractHBaseCells类的extractHBaseCells命令就可以从HBase更新中提取数据并相应地更新Solr索引。

我们还谈到了许多有关Apache Zookeeper的信息,以及有关Zookeeper最初在Yahoo!上的历史。 和帕特里克从那以后的经历。 要听到帕特里克必须说的一切,请订阅播客。

翻译自: https://www.javacodegeeks.com/2014/05/apache-solr-real-time-live-index-updates-at-scale-with-apache-hadoop.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言,关于getchar()清空回车符的几点经验

最近被getchar()弄的有点糊涂&#xff0c;现在基本缕清了。 拿程序举个例子&#xff1a; #include<stdio.h> int main(void) {char ch1,ch2;printf("Iam testing *********.\n");printf("So hard! ***********\n");ch1getchar();printf("$$$$$…

面试中关于多线程同步,你必须要思考的问题

ReentrantLock的实现网上有很多文章了&#xff0c;本篇文章会简单介绍下其java层实现&#xff0c;重点放在分析竞争锁失败后如何阻塞线程。因篇幅有限&#xff0c;synchronized的内容将会放到下篇文章。 Java Lock的实现 ReentrantLock是jdk中常用的锁实现&#xff0c;其实现逻…

C语言学习,关于fflush 和setvbuf

最近学习C语言的时候&#xff0c;学到文件的输入和输出函数&#xff0c; 对fflush和setvbuf 一直很困惑&#xff0c;现在虽然没有解开&#xff0c;但是有了一点浅显的理解。 1、ffulsh 针对的是输出流&#xff0c;是将输出缓存中的数据推到指向的文件里。 2、如果想清空输入缓…

可怜的mysql

唉&#xff0c;今天刚看到新闻&#xff0c;mysql 5.1 GA 虽然正式发布&#xff0c;但是却有一堆bug。 连mysql的创始人自己都批评sun不应该在未修复重大bug的前提下发布mysql 5.1 GA. 可怜的mysql,可怜的sun转载于:https://www.cnblogs.com/nevernet/archive/2008/12/04/134726…

linux查看用户、创建用户、设置密码、修改用户、删除用户命令

查看用户 tail -1 /etc/passwd tail -1 /etc/shadow id alex echo 123 |passwd --stdin alex # 设置密码&#xff0c;不需要交互[rootlocalhost ~]# tail -l /etc/passwd rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS …

c# 笔记 数据类型转换 数组 函数

1、数据类型的转换&#xff08;cast&#xff09;包括隐性转换和显性转换。 当目标类型一定能满足源类型转换后的要求的话就是隐性转换&#xff0c;不需要任何代码直接转换&#xff0c;如果目标类型不一定能满足源类 型转换后的要求的话就是显性转换&#xff0c;显性转换需要在要…

使用外星人进行测试:如何使用Arquillian测试JPA类型转换器

该帖子与 Aslak Knutsen &#xff08; aslakknutsen &#xff09;一起撰写。 JPA类型转换器为定义实体属性如何持久存储到数据库提供了一种简便的方法。 您可以使用它们来实现许多不同的功能&#xff0c;例如&#xff0c;如上一篇文章中所示&#xff1a;加密数据&#xff1a; …

关于 C语言的 按位取反 ~

1、相关概念&#xff1a; 不管是正整数 还是 负整数在计算机中都是以 补码的形式存在的&#xff1b; 取反&#xff1a;0变1&#xff0c;1变0 就叫做取反&#xff0c;取反 符号位也要改变&#xff1b; 反码&#xff1a;符号位不变&#xff0c;其他位置0变1&#xff0c;1变0&a…

英语句型之展现问题篇3

表达不确定的用词&#xff1a;May, seem, be likely to, possible, probably, perhaps, be said that, be said to...51. In my mind, the following factors/reasons/causes need to be taken into consideration我认为&#xff0c;我们需要考虑下列因素/原因&#xff1a;52. …

【noip模拟赛5】任务分配 降维dp

描述 现有n个任务,要交给A和B完成。每个任务给A或给B完成&#xff0c;所需的时间分别为ai和bi。问他们完成所有的任务至少要多少时间。 输入 第一行一个正整数n&#xff0c;表示有n个任务。接下来有n行&#xff0c;每行两个正整数ai&#xff0c;bi。 输出 一个数&#xff0c;他…

解决win7下无法安装突击者NO.69驱动,“WINDOWS已找到设备的驱动程序,但在试图安装它时错误”...

本人装的是win7旗舰版&#xff0c;由于是ghost安装的&#xff0c;缺少一些文件&#xff0c;之前一直无法正确安装突击者电子狗的驱动程序&#xff0c;老是显示“WINDOWS已找到设备的驱动程序&#xff0c;但在试图安装它时错误”&#xff0c;baidu、google了几天都没解决&#x…

C语言 按位或 正整数与负整数 之间

按位或&#xff1a; 两个位 比对时&#xff0c;如果有一个位 为1&#xff0c;结果就为1&#xff1b; 按位或 时 &#xff0c;都是 按照补码来比对的 &#xff0c;正数的补码 是 本身&#xff0c;负数的补码 不是本身 所以 正负数按位或 要注意&#xff1a; 举例子&#xff1a;…

使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句

使用ORM从您的特定数据库中提取数据&#xff0c;并让它创建和发布您必须亲自编写的所有SQL语句似乎很方便。 这就是使ORM解决方案受欢迎的原因。 但是它也有一个缺点&#xff1a;由于ORM为您做了很多工作&#xff0c;因此您在某种程度上失去了对生成的SQL的控制&#xff0c;您…

C语言 >> 右移位运算符的原理和一些概念

1、右移位于左移位不同 左移位 不管是 逻辑移位 算术移位 都是低位补0&#xff1b; 右移位 的 逻辑移位和算术移位不同&#xff0c; 算术移位高位补符号位&#xff0c;逻辑移位 高位补0&#xff1b; 右移位 使用逻辑移位的话 需要强制转换成unsigned 无符号型&#xff1b; 2…

去除git版本控制

命令&#xff1a;find . -name ".git" | xargs rm –Rflinux $ find . -type d -iname __pycache__ -exec rm -rf {} \;转载于:https://www.cnblogs.com/gispathfinder/p/10555347.html

PHP基础语法6

//PHP循环语句//for循环for ($i 0; $i < 18; $i) {echo $i . <br>;}//while循环$l 0;while ($l < 18) {echo $l . <br>;$l;}//foreache()用于数组循环的语句$arr [a > 1, b > 2];foreach ($arr as $key > $value) {echo $key . . $value . <…

如何在Java中找到整数的质因数–因式分解

编程课程中的常见家庭作业/任务之一是关于Prime Factorization。 要求您编写一个程序以找到给定整数的素因子 。 一个数字的质数因子是将精确地除以给定数字的所有质数。 例如&#xff0c;35的素数因子分别是7和5&#xff0c;它们本身都是素数&#xff0c;并且精确地除以35。上…

Arduino Serial系列函数 有关print read 的总结

总结一下 在学习arduino srial函数时 的几个知识点&#xff1a; /*** 汇总一下Serial.print输出的一些情况&#xff0c;后面部分要和Serial.read配合使用&#xff1b;* 1. print 输出字符 和int数的结果&#xff0c;* 2. print 输出字符串和一连串的数字* 3. read 读取一个字符…

C#经典名著:《C#入门经典》(第4版)

博客园专题&#xff1a;http://book.cnblogs.com/zt/begin_csharp/ 作  者&#xff1a; &#xff08;美&#xff09;沃森&#xff08;Watson&#xff0c;K.&#xff09;&#xff0c;&#xff08;美&#xff09;内格尔&#xff08;Nagel&#xff0c;C.&#xff09; 等著&#…

inheritPrototypal.js

// 原型式继承// 其基本思路是借助原型可以基于已有的对象创建新的对象function object(o){function F(){}F.prototype o;return new F();}var person {name: "Tom",friends: ["Jack", "John", "Kim"]};var David object(person);…