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