elasticsearch-hadoop使用示例

在elasticsearch-hadoop的具体使用中碰到了几个问题,有必要记录一下,避免下次遇到时又要从新研究。node

利用spark读取es数据源的简单示例

import org.elasticsearch.spark.sql._

val esOptions = Map("es.nodes"->"192.168.1.2,192.168.1.3", "es.scroll.size"->"1000", "es.field.read.as.array.include"->"SampleField")

val esDF = sqlContext.read.format("org.elasticsearch.spark.sql").options(esOptions).load("sampleindex/es-spark")

esDF.registerTempTable("esdemotbl")

es.scroll.size 一次性读入的记录数,默认是10, 若是不设置为大一点的值,要从es中读取1亿条数据,那将是一个漫长的过程sql

es.field.read.as.array.include 有的字段在es中是以string类型存储,但其中包含逗号(,), spark默认认为这是数组类型,若是读取这种字段的话,就会报错,怎么办,那就用es.field.read.as.array.include来显式指明数组

spark读取es中数据的时候,partition数目取决于es中指定index的shard数目,为了得到比较高的并发读取性能,建议适当设置shard数目,为何是适当,由于具体取决于集群规模等多种因素。并发

字段名的大小写问题

在hive中,字段名是_大小写不敏感_的, 但在ES中是大小写敏感的app

你说,这又怎么样。 呵呵, 这意味着不作特殊处理,永远没法读出es中大写字段名的内容,你看到的将是满屏的_NULL_elasticsearch

这该怎么破,很简单,指定 es.mapping.namesoop

好比在es中,字段名为DemoField, 要读出其中的内容,hive表的字义就该这样写性能

create external table es_demo_tbl(
demofield string) 
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.nodes'='192.168.1.2,192.168.1.3', 'es.resource'='demoindex/sample',
'es.mapping.names'='demofield:DemoField')

注意是先hive中的字段名,而后是es中的字段名spa

相关文章
相关标签/搜索