使用spark和querystringquery读取elasticsearch集群上的数据

时间:2018-03-12 14:41:53

标签: hadoop apache-spark elasticsearch

我想阅读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中吗?

0 个答案:

没有答案