從 ElasticSearch 載入資料
在檢查特定語法之前,讓我們看一下如何設定環境以載入所需的外掛。
建立
要直接從 ElasticSearch 載入資料,你需要下載 elasticsearch-hadoop
外掛。你可以通過不同的方式使其正常工作,對於快速設定,你可以執行以下操作。
為了使其工作,你需要將 jar 檔案 elasticsearch-hadoop-<version>.jar
放在安裝了 pig 伺服器的節點的資料夾中。在我的情況下 - 相當常見的谷歌搜尋 - 我還需要在該資料夾中新增 commons-httpclient-<version>.jar
。
然後你可以在 shell 模式下執行 pig
(稱為 grunt
),只需在控制檯上鍵入 pig
即可。然後你必須以下列方式載入這兩個罐子:
REGISTER /path/to/jars/commons-httpclient-<version>.jar;
REGISTER /path/to/jars/elasticsearch-hadoop-<version>.jar;
現在你已準備好編寫一些程式碼。
例
讓我們檢查語法以從複雜的案例中載入資料。
DATA = LOAD 'my_index/log' USING org.elasticsearch.hadoop.pig.EsStorage(
'es.nodes=https://server1:port1,https://server2:port2,https://server3:port3',
'es.query=?q=*',
'es.net.ssl=true',
'es.net.http.auth.user=user',
'es.net.http.auth.pass=pass',
'es.net.ssl.keystore.type=JKS',
'es.net.ssl.truststore.location=file:///path/to/truststore.jks',
'es.net.ssl.truststore.pass=pass');
這是完整的例子,現在讓我們一步一步地分析它。
es.nodes
包含 ElasticSearch 叢集的節點列表。你必須將節點指定為逗號分隔列表,並使用關聯的埠。es.query
儲存將提交給 ElasticSearch 以獲取資料的查詢。你也可以使用 DSL 格式進行查詢,但請注意,只會考慮查詢的匹配部分! 如果你嘗試通過查詢 DSL 限制欄位數量,它將無法工作:為了實現這一點,你需要使用es.read.source.filter
引數。查詢 DSL 的示例:'es.query = { "query":{ "match_all":{} } }'
es.net.ssl=true
是自解釋的,你還需要使用es.net.http.auth.user
和es.net.http.auth.pass
為 ElasticSearch 提供登入憑據。es.net.ssl.keystore.type
如果你需要一個信任庫,你可以在這裡選擇型別。在es.net.ssl.truststore.location
引數中設定檔案的位置,注意新增file://
字首,在es.net.ssl.truststore.pass
引數中設定信任庫檔案的密碼。
一些有用的設定
es.read.source.filter=field1,field2,field3
允許你僅從 ElasticSearch 中獲取指定的欄位(在此示例中為三個)。es.output.json=true
允許你以鍵值格式(JSON)獲取資料。設定為false
將以 CSV 格式返回資料(預設)。