我想阅读ES群集上的批量数据。使用滚动API,我可以轻松阅读它,直到滚动不返回新的ID。以下是我的实施:
while(searchHits != null && searchHits.length > 0){
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(scroll);
searchResponse = client.searchScroll(scrollRequest);
scrollId = searchResponse.getScrollId();
searchHits = searchResponse.getHits().getHits();
for(SearchHit s: searchHits){
String source = s.getSourceAsString();
System.out.println(source);
}
}
我使用querybuilder从查询字符串查询创建查询,如下所示:
QueryStringQueryBuilder query = QueryBuilders.queryStringQuery("(a AND (b OR c OR d OR e))");
考虑到eshadoop没有这样的功能,但基本上使用相同的概念,搜索分为多个分区/分片,我只是将代码转换为spark连接器:
val spark = SparkSession
.builder()
.config("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
.config("fs
.s3n.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem")
.config("spark.hadoop.fs.s3n.access.key", ""))
.config("spark.hadoop.fs.s3n.secret.key",""))
.config("es.nodes", "my aws cluster name")
.appName("Spark SQL basic example")
.enableHiveSupport()
.master("local[*]")
.getOrCreate()
我在这里遇到了很多错误。我得到的第一个错误是连接到群集时:
18/03/12 10:31:40 INFO HttpMethodDirector: I/O exception
(java.net.ConnectException) caught when processing request: Operation timed out (Connection timed out)
18/03/12 10:31:40 INFO HttpMethodDirector: Retrying request
如果这个问题解决了,我不知道如何继续并向spark客户端添加一个查询字符串查询。请有人帮我解决I / O错误,然后添加QSQ查询。
P.S。:在旁注中,在spark应用程序中,建议使用普通的滚动API来读取大量数据并将其加载到rdd中吗?