Kettle, Solr
http://antkillerfarm.github.io/
Kettle
ETL,是英文Extract-Transform-Load的縮寫,用來描述將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。這個過程有時又被叫做“數據清洗”。
Kettle是一款國外開源的ETL工具。其官網為:
http://community.pentaho.com/projects/data-integration/
從大的方面來說,Kettle的工作,可分為Job和Trans兩類。
Job是個大尺度的工作分類,它操作的對象是文件或數據庫級別的。
相對的,Trans只要是些小尺度的工作。它操作的對象是Row,也就是一條記錄。
Sqoop是另一個數據轉換工具,但是沒有IDE,功能也局限于數據格式的轉換(僅相當于Kettle中的Trans)。其官網:
http://sqoop.apache.org/
Job可以調用Trans,也可以執行shell、SQL、Sqoop等多種腳本。因此,Kettle和Sqoop的關系不是二選一,而是可以協作的。
Kettle是一個大的工具集,主要包括以下組件:
1.spoon。Kettle的IDE。
2.pan。用于執行Trans文件(以ktr為后綴)。
3.Kitchen。用于執行Job文件(以kjb為后綴)。
命令行執行Job和Trans
pan -file=/path/to/ktr
kitchen -file=/path/to/kjb
參見:
http://www.cnblogs.com/wxjnew/p/3620792.html
官網資料:
http://wiki.pentaho.com/display/EAI/Pan+User+Documentation
http://wiki.pentaho.com/display/EAI/Kitchen+User+Documentation
命令行不僅可以執行Job和Trans,還可以向Job和Trans傳遞參數。參見pan和kitchen命令的-param選項。
Job和Trans對命令行參數的處理,有相關的插件,參見:
http://blog.csdn.net/scorpio3k/article/details/7872179
文本處理
Kettle的文本處理以“行”為單位。下圖是一個實際的使用流程圖:
1.原始數據來自網絡爬蟲抓取的數據,它的主體是一個json文件,然而在每一條記錄的前后都有一些特殊的字符串,因此從整體來說,并不是一個合法的json文件。
2.采用“字符串替換”插件,去除非法字符串。這里需要注意的是,由于整個過程是數據流形式的,因此,無法在一個步驟中,同時去掉前后兩個字符串,而必須分為兩個步驟。
3.替換之后,原先有字符串的行,可能變成空行,這是可以使用“過濾記錄”插件。
文件的增量處理
kettle沒有提供直接的插件用于增量處理,因此需要自己設計增量處理的方法。
增量處理的方法很多,這里僅展示其中一種方法:
1.獲得需要處理文件總表A。
注意:獲取某個路徑下的文件名,要用正則式,而不是常見的*.*,*.txt。
對應關系如下:
*.* -> .*
*.txt -> .*\.txt
2.獲得已經處理過的文件列表B。這個列表可以來源于數據庫,也可來源于文本文件。這里采用后者。
3.使用“合并記錄”插件,從A中過濾掉B。“合并記錄”插件的flagfield字段,會給出合并的結果。
4.使用“過濾記錄”插件,根據flagfield字段的結果,得到過濾后的列表C。C就是真正需要處理的文件列表了。
字段合并操作
Kettle并未提供“字段合并”的插件,因為這個功能如果使用Javascript的話,也就是一行的事情。
調用外部的Java庫
1.首先將該庫的jar包,放到Kettle的lib文件夾下。
2.其他步驟和一般Java程序沒啥區別:import用到的package,然后寫代碼,over。
HDFS
HDFS的處理比較簡單,將普通例子中的本地文件路徑,替換為hdfs://形式的hdfs路徑即可。
Hbase
Hbase插件中比較費解的是Mapping name這個名詞。
從設計初衷來說,kettle本意上是打算利用Mapping將kettle字段映射為Hbase表格的列,從而達到分離兩者概念的目的。然而當前的實現中,kettle的所有字段都必須導出到Hbase表格中,不然就會出如下錯誤:
Can't find incoming field "short_field1" defined in the mapping "mapping_test"
用戶對Mapping所做的修改,僅限于修改字段名、設定Key、設定字段類型等。
解決辦法:
使用“字段選擇”插件過濾掉不必要的字段,然后再導出到Hbase。
參見:
http://forums.pentaho.com/archive/index.php/t-94392.html
Solr
Solr和Lucene的關系
Lucene是一個基于Java的全文信息檢索工具包,它不是一個完整的搜索應用程序,而是為你的應用程序提供索引和搜索功能。
Solr是一種開放源碼的基于Lucene的Java搜索服務器。它是Lucene的子項目,是Lucene面向企業搜索應用的擴展。
簡單的說,Lucene是庫,而Solr是一個調度Lucene庫的Web服務器。
概況
官網:
http://lucene.apache.org/solr/
教程:
http://lucene.apache.org/solr/quickstart.html
網上的資料有些已經很老了,不看也罷。這是官方的Quick Start,必看之。
除了Solr,類似的軟件還有senseidb和elasticsearch。參見:
http://www.cnblogs.com/ibook360/archive/2013/03/22/2975345.html
相關資料:
http://www.solr.cc/blog/
http://blog.csdn.net/aidayei/article/details/6526986
solr中文分詞
http://outofmemory.cn/code-snippet/3659/Solr-configuration-zhongwen-fenci-qi
Solr配置中文分詞器
http://www.importnew.com/12707.html
全文檢索引擎Solr系列—–全文檢索基本原理
http://iamyida.iteye.com/category/338597
跟益達學Solr5系列教程
http://iamyida.iteye.com/category/335240
跟益達學Lucene5系列教程
start命令
Solr的運行需要啟動相應的服務程序。啟動命令如下:
bin/solr start -e cloud -noprompt
其中的cloud表示SolrCloud示例模式,即在一臺PC上啟動若干進程的所謂偽分布式模式。除此之外,還有techproducts、dih、schemaless等示例模式。
這些示例模式對于快速了解Solr很有幫助。
Post工具
從本質來說,Solr是一個Web服務器。所有的服務請求都以http post的形式提交給Solr。因此,為了方便使用,Solr項目專門提供了post工具。
post工具在bin文件夾下,是一個Unix shell腳本。對于Windows用戶,Solr提供了post.jar可執行文件,它在example/exampledocs下。
SolrCloud概述
這是官方Quick Start的默認模式。我們首先對一些概念進行一下講解。(相關內容參見《Apache Solr Reference Guide》末尾的術語表)
Cluster: 由若干Node組成的集群,使用Zookeeper進行協調。這是Solr中物理層面的最大單元。
Node: 一個運行Solr的JVM實例。
文件的索引(index)用于對文件資源進行定位,它分為邏輯索引和物理索引兩種。從冗余備災的角度出發,一個物理索引被備份到若干個Node中,而這些不同Node上內容相同的物理索引,由于表示的含義是相同的,因此從邏輯上說,算是同一個邏輯索引。
在Solr中,物理索引被叫做Replica,其中副本個數被稱為Replication Factor。一個Node可包含多個Replica。
由于物理索引分散在若干不同Node中,因此,其對應的邏輯索引,也分散在若干不同Node中。這些邏輯索引的其中一個實例被稱為Core。因此,Core和Replica是一一對應的(盡管它們的含義不同)。顯然一個邏輯索引包含了若干個位于不同Node中的Core。
若干個邏輯索引組成了一個Shard。而若干Shard組成一個Collection。Collection是Solr中邏輯層面的最大單元,類似于其他分布式系統中的Task。
屬于同一個Shard的若干個Replica中,有且僅有一個Leader,用于協調索引的更新。
上圖是SolrCloud模式默認情況下的圖示。
其中包括一個名叫gettingstarted的Collection。這個Collection有兩個Shard,每個Shard有兩個Replica。
這里來個今年美國大選的梗:
記的以前有人說硅谷的政治正確已經到給程序起名字不能帶slave了。所以以前熟悉的master slave模式現在很少用了。現在叫leader follower,也可以叫master worker,就是不能有slave。
Quick Start
這是官方Quick Start的摘要版本,相關步驟不做過多解釋。
1.啟動Solr。
bin/solr start -e cloud -noprompt
2.查看Solr Admin UI。
http://localhost:8983/solr/
2.創建索引。
bin/post -c gettingstarted docs/
索引文件默認存儲在example/cloud下。
3.對索引結果進行查詢搜索。
Web方式:
http://localhost:8983/solr/#/gettingstarted/query
HTTP方式:
http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation
Luke
Luke是一個查看Lucene/Solr/Elasticsearch索引文件的工具。其官網為:
https://github.com/DmitryKey/luke
SolrCloud的其他細節
1.配置文件在server/solr/configsets/data_driven_schema_configs下。初次啟動SolrCloud時,會復制到example/cloud下,但存儲形式未知。
2.每個Replica存儲的索引文件一般是不同的,因此使用Luke的時候,如果有些數據查詢不到的話,可以到其他Replica下查詢。
Solr的配置
1.Node配置
solr.xml
2.Core配置
全局配置:core.properties
Solr配置:solrconfig.xml
數據域配置:schema.xml
3.
IKAnalyzer
IKAnalyzer是一個中文分詞器。作者:林良益。
官網:
http://git.oschina.net/wltea/IK-Analyzer-2012FF
作者主頁:
https://my.oschina.net/linliangyi/home
github上的fork:
https://github.com/yozhao/IKAnalyzer
參考:
http://blog.csdn.net/frankcheng5143/article/details/52292897
這個網頁提供了將IKAnalyzer集成到Solr 6的辦法,經測試對Solr 6.3也是適用的。
Ansj
Ansj是一個開源的Java中文分詞工具,基于中科院的ictclas中文分詞算法,比其他常用的開源分詞工具(如mmseg4j)的分詞準確率更高。
https://github.com/ansjsun/ansj_seg
Solrj
https://wiki.apache.org/solr/Solrj
https://cwiki.apache.org/confluence/display/solr/Using+SolrJ
Lucene
http://lucene.apache.org/core/6_3_0/index.html
總結
以上是生活随笔為你收集整理的Kettle, Solr的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt, Python(一)
- 下一篇: R, Groovy