Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据集数据发送到elasticsearch_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Apache Flink - Fatal编程技术网 elasticsearch,apache-flink,Java,elasticsearch,Apache Flink" /> elasticsearch,apache-flink,Java,elasticsearch,Apache Flink" />

Java 将数据集数据发送到elasticsearch

Java 将数据集数据发送到elasticsearch,java,elasticsearch,apache-flink,Java,elasticsearch,Apache Flink,我正在尝试使用新的elasticsearch连接器将数据集中的一些数据发送到elasticsearch,但在此处,除了用于数据流结构的资源外,我找不到任何其他资源: MyDataset是行的数据集(来自sql查询),这是内容: 199947,6 199958,3 199964,2 199985,2 我创建了一个静态嵌套类,它实现了ElasticsearchSinkFunction: public static class NumberOfTransactionsByBlocks implem

我正在尝试使用新的elasticsearch连接器将数据集中的一些数据发送到elasticsearch,但在此处,除了用于数据流结构的资源外,我找不到任何其他资源:

MyDataset是行的数据集(来自sql查询),这是内容:

199947,6
199958,3
199964,2
199985,2
我创建了一个静态嵌套类,它实现了ElasticsearchSinkFunction

public static class NumberOfTransactionsByBlocks implements ElasticsearchSinkFunction<Row> {

    public void process(Row element, RuntimeContext ctx, RequestIndexer indexer) {
        indexer.add(createIndexRequest(element));

    }

    public IndexRequest createIndexRequest(Row element) {
        Map<String, String> json = new HashMap<>();
        json.put("block_number", element.getField(0).toString());
        json.put("numberOfTransactions", element.getField(1).toString());

        return Requests.indexRequest()
                .index("nbOfTransactionsByBlocks")
                .type("count-transactions")
                .source(json);
    }
}
公共静态类NumberOfTransactionByBlocks实现ElasticSearchSink功能{
公共无效进程(行元素、RuntimeContext ctx、RequestIndexer indexer){
add(createIndexRequest(元素));
}
公共索引请求createIndexRequest(行元素){
Map json=newhashmap();
put(“block_number”,element.getField(0.toString());
put(“numberOfTransactions”,element.getField(1.toString());
返回请求。indexRequest()
.索引(“nbOfTransactionsByBlocks”)
.类型(“盘点交易”)
.来源(json);
}
}
然后我的问题是我不知道如何发送我的内部类的实例

DataSet<Row> data = tableEnv.toDataSet(sqlResult, Row.class);
List<HttpHost> httpHosts = new ArrayList<>();
httpHosts.add(new HttpHost("127.0.0.1", 9200, "http"));
httpHosts.add(new HttpHost("10.2.3.1", 9200, "http"));

Map<String, String> config = new HashMap<>();
config.put("bulk.flush.max.actions", "1");   // flush inserts after every event
config.put("cluster.name", "elasticsearch"); // default cluster name


data.output(new ElasticsearchSink<>(config, httpHosts, new NumberOfTransactionsByBlocks()));
DataSet data=tableEnv.toDataSet(sqlResult,Row.class);
List httpHosts=new ArrayList();
添加(新的HttpHost(“127.0.0.1”,9200,“http”);
添加(新的HttpHost(“10.2.3.1”,9200,“http”);
Map config=newhashmap();
config.put(“bulk.flush.max.actions”,“1”);//每次事件后刷新插入
config.put(“cluster.name”、“elasticsearch”);//默认群集名称
输出(新的ElasticsearchSink(配置、httpHosts、新的NumberOfTransactionsByBlocks());
我在实例化ElasticsearchSink时出错,它说:

无法推断参数

但当我指定类型(行)时,它会说:

ElasticsearchSink(java.util.Map, java.util.List, org.apache.flink.streaming.connectors.elasticsearch.elasticsearch函数, org.apache.flink.streaming.connectors.elasticsearch.ActionRequestFailureHandler, org.apache.flink.streaming.connectors.elasticsearch6.RestClientFactory)' 在中有私人访问权限 'org.apache.flink.streaming.connectors.elasticsearch6.ElasticsearchSink'

我做错什么了吗?

目前Flink为ElasticSearch提供了(1.6.0)个连接器

  • flink-connector-elasticsearch_2.11
  • flink-connector-elasticsearch 2_2.11
  • flink-connector-elasticsearch5_2.11
  • flink-connector-elasticsearch6_2.11
确保在项目中包含正确的maven依赖项

…在
org.apache.flink.streaming.connectors中拥有私人访问权限。
elasticsearch6
.ElasticsearchSink

现在,从您共享的跟踪猜测,您似乎正在使用
v6.x
的依赖项。查看,这表明他们已将构造函数移动到
private
,并添加了

因此,要添加一个,您需要以下内容:

data.output(
  new ElasticsearchSink.Builder<>(httpHosts, new NumberOfTransactionsByBlocks())
    .setBulkFlushMaxActions(1)
    .build());
import org.apache.flink.streaming.connectors.elasticsearch6.ElasticsearchSink;