Elasticsearch-Spark 体验
Elastcisearch和Spark都是我非常喜欢的开源产品,如果能把两者整合起来进行应用当然是最好了。所以elastic在官网上发布了Elasticsearch for Apache Hadoop 2.1.0 (后面简写成ES-AH)版本后,我也很快尝试了下。虽然名字是for Hadoop,但是里面有一个模块是for spark的。
地址在这里:
https://www.elastic.co/guide/en/elasticsearch/hadoop/current/spark.html
关于Hadoop的内容都是可以不看的,Confinguration这个章节还是要看下
https://www.elastic.co/guide/en/elasticsearch/hadoop/current/configuration.html
主要的功能包括
- Spark通过RDD将数据写入到Elasticsearch
- Spark sql通过Dataframe或者SchemaRDD将数据写入到Elasticsearch
- Spark从Elasticsearch读取数据,构造Dataframe
- 将Elasticsearch作为数据库,执行Sql脚本,包括执行创建临时表的动作
- 还可以通过Map/Reduce层来访问数据,但是并不推荐
代码贴个最简单的,本地测试通过了,官网的文档写的很清楚,没必要饶舌了。
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.elasticsearch.spark._
import org.elasticsearch.spark.rdd.EsSpark
object EsSparkTest{
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Test").setMaster("local")
conf.set("es.index.auto.create", "true")
val sc = new SparkContext(conf)
val numbers = Map("one"->1,"two"->2,"three"->3)
val airports = Map("arrival" -> "Otopeni", "SFO" -> "San Fran")
// implicit
sc.makeRDD(Seq(numbers, airports)).saveToEs("spark/docs")
}
最开始遇到的一个问题就是不知道在那里设置Elasticsearch的访问,看看Confinguration就清楚了,有es.nodes和es.port,如果在本地测试,就不用设置了。
欢迎大家讨论!