从 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 格式返回数据(默认)。