elasticsearch-hadoop使用示例

jopen 10年前發布 | 22K 次閱讀 Hadoop ElasticSearch 搜索引擎 Elastic Search

在elasticsearch-hadoop的具體使用中碰到了幾個問題,有必要記錄一下,避免下次遇到時又要重新研究。

利用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億條數據,那將是一個漫長的過程

es.field.read.as.array.include 有的字段在es中是以string類型存儲,但其中包含逗號(,), spark默認認為這是數組類型,如果讀取這種字段的話,就會報錯,怎么辦,那就用es.field.read.as.array.include來顯式指明

spark讀取es中數據的時候,partition數目取決于es中指定index的shard數目,為了獲得比較高的并發讀取性能,建議適當設置shard數目,為什么是適當,因為具體取決于集群規模等多種因素。

字段名的大小寫問題

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

你說,這又怎么樣。 呵呵, 這意味著不做特殊處理,永遠無法讀出es中大寫字段名的內容,你看到的將是滿屏的_NULL_

這該怎么破,很簡單,指定 es.mapping.names

比如在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中的字段名

來自: http://www.cnblogs.com/hseagle/p/5110033.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!