借助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命令提取日志行并將其通過管道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
總結
以上是生活随笔為你收集整理的借助Apache Hadoop大规模扩展Apache Solr实时实时索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10电脑工具菜单在哪(win10电
- 下一篇: 成本低适合一个女人做的生意(低成本适合女