從 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.useres.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 格式返回資料(預設)。