播客的第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
命令提取日志行并将其通过管道grok
到grok
命令。 grok
命令使用正则表达式模式匹配来提取该行的某些子字符串。 它将生成的结构化记录通过管道loadSolr
到loadSolr
命令。 最后, 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