日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過ES-Hadoop實現(xiàn)Hive讀寫阿里云Elasticsearch數(shù)據(jù)

ES-Hadoop是Elasticsearch推出的專門用于對接Hadoop生態(tài)的工具,可以讓數(shù)據(jù)在Elasticsearch和Hadoop之間雙向移動,無縫銜接Elasticsearch與Hadoop服務(wù),充分使用Elasticsearch的快速搜索及Hadoop批處理能力,實現(xiàn)交互式數(shù)據(jù)處理。本文介紹通過ES-Hadoop組件在Hive上進行Elasticsearch數(shù)據(jù)的查詢和寫入,幫助您將Elasticsearch與Hadoop生態(tài)組件結(jié)合起來,實現(xiàn)更靈活的數(shù)據(jù)分析。

背景信息

Hadoop生態(tài)的優(yōu)勢是處理大規(guī)模數(shù)據(jù)集,但是其缺點也很明顯,就是當(dāng)用于交互式分析時,查詢時延會比較長。而Elasticsearch擅長于交互式分析,對于很多查詢類型,特別是對于Ad-hoc查詢(即席查詢),可以達到秒級。ES-Hadoop的推出提供了一種組合兩者優(yōu)勢的可能性。使用ES-Hadoop,您只需要對代碼進行很小的改動,即可快速處理存儲在Elasticsearch中的數(shù)據(jù),并且能夠享受到Elasticsearch帶來的加速效果。

ES-Hadoop的原理是將Elasticsearch作為MR、Spark或Hive等數(shù)據(jù)處理引擎的數(shù)據(jù)源,在計算存儲分離的架構(gòu)中扮演存儲的角色。這和MR、Spark或Hive的數(shù)據(jù)源并無差異,但相對于這些數(shù)據(jù)源,Elasticsearch具有更快的數(shù)據(jù)選擇過濾能力。這種能力正是分析引擎最為關(guān)鍵的能力之一。ES-Hadoop架構(gòu)原理圖

如果您需要了解ES-Hadoop與Hive更高級的配置,請參見Elasticsearch官方說明文檔

操作流程

  1. 準(zhǔn)備工作

    創(chuàng)建同一專有網(wǎng)絡(luò)下的阿里云Elasticsearch和E-MapReduce(以下簡稱EMR)實例、關(guān)閉Elasticsearch實例的自動創(chuàng)建索引功能并創(chuàng)建索引和Mapping、下載與Elasticsearch實例版本一致的ES-Hadoop安裝包。

  2. 步驟一:上傳ES-Hadoop JAR包至HDFS

    將已下載的ES-Hadoop安裝包上傳至EMR Master節(jié)點的HDFS目錄下。

  3. 步驟二:創(chuàng)建Hive外表

    創(chuàng)建Hive外表,與Elasticsearch索引中的字段進行映射。

  4. 步驟三:通過Hive寫入索引數(shù)據(jù)

    通過HiveSQL,向Elasticsearch實例的索引中寫入數(shù)據(jù)。

  5. 步驟四:通過Hive讀取索引數(shù)據(jù)

    通過HiveSQL,讀取Elasticsearch實例中的索引數(shù)據(jù)。

準(zhǔn)備工作

  1. 創(chuàng)建阿里云Elasticsearch實例。

    本文使用6.7.0版本的實例,具體操作步驟請參見創(chuàng)建阿里云Elasticsearch實例

  2. 關(guān)閉實例的自動創(chuàng)建索引功能,并提前創(chuàng)建索引和Mapping。

    開啟自動創(chuàng)建索引功能后,可能會導(dǎo)致Elasticsearch自動創(chuàng)建的索引類型和您預(yù)期的類型不一致。例如您定義了一個字段age,為INT類型,開啟自動創(chuàng)建索引后,可能將其索引成了LONG類型,因此建議手動創(chuàng)建索引。本文使用的索引和Mapping如下。

    PUT company
    {
      "mappings": {
        "_doc": {
          "properties": {
            "id": {
              "type": "long"
            },
            "name": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "birth": {
              "type": "text"
            },
            "addr": {
              "type": "text"
            }
          }
        }
      },
      "settings": {
        "index": {
          "number_of_shards": "5",
          "number_of_replicas": "1"
        }
      }
    }
  3. 創(chuàng)建與Elasticsearch實例在同一專有網(wǎng)絡(luò)下的EMR集群。

    重要

    Elasticsearch實例的私網(wǎng)訪問白名單默認(rèn)為0.0.0.0/0,您可在安全配置頁面查看,如果未使用默認(rèn)配置,您還需要在白名單中加入EMR集群的內(nèi)網(wǎng)IP地址:

步驟一:上傳ES-Hadoop JAR包至HDFS

  1. 下載ES-Hadoop安裝包,其版本需要與Elasticsearch實例保持一致。

    本文使用elasticsearch-hadoop-6.7.0.zip。

  2. 登錄E-MapReduce控制臺,獲取Master節(jié)點的IP地址,并通過SSH登錄對應(yīng)的ECS機器。

    具體操作步驟請參見登錄集群

  3. 將已下載的elasticsearch-hadoop-6.7.0.zip上傳至Master節(jié)點,并解壓獲得elasticsearch-hadoop-hive-6.7.0.jar。

  4. 創(chuàng)建HDFS目錄,將elasticsearch-hadoop-hive-6.7.0.jar上傳至該目錄下。

    hadoop fs -mkdir /tmp/hadoop-es
    hadoop fs -put elasticsearch-hadoop-6.7.0/dist/elasticsearch-hadoop-hive-6.7.0.jar /tmp/hadoop-es

步驟二:創(chuàng)建Hive外表

  1. 在EMR控制臺的數(shù)據(jù)開發(fā)模塊中,創(chuàng)建HiveSQL類型的作業(yè)。

    具體操作步驟請參見Hive SQL作業(yè)配置創(chuàng)建HiveSQL作業(yè)

  2. 配置作業(yè),創(chuàng)建外表。

    作業(yè)配置如下。

    ####添加jar包,僅對當(dāng)前會話有效########
    add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-hive-6.7.0.jar;
    ####創(chuàng)建hive外表,與es索引進行映射#####
    CREATE EXTERNAL table IF NOT EXISTS company( 
       id BIGINT,
       name STRING,
       birth STRING,
       addr STRING 
    )  
    STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' 
    TBLPROPERTIES(  
        'es.nodes' = 'http://es-cn-mp91kzb8m0009****.elasticsearch.aliyuncs.com',
        'es.port' = '9200',
        'es.net.ssl' = 'true', 
        'es.nodes.wan.only' = 'true', 
        'es.nodes.discovery'='false',
        'es.input.use.sliced.partitions'='false',
        'es.input.json' = 'false',
        'es.resource' = 'company/_doc',
        'es.net.http.auth.user' = 'elastic', 
        'es.net.http.auth.pass' = 'xxxxxx'
    );
    表 1. ES-Hadoop相關(guān)參數(shù)說明

    參數(shù)

    默認(rèn)值

    說明

    es.nodes

    localhost

    指定阿里云Elasticsearch實例的訪問地址,建議使用私網(wǎng)地址,可在實例的基本信息頁面查看,詳情請參見查看實例的基本信息

    es.port

    9200

    Elasticsearch實例的訪問端口號。

    es.net.http.auth.user

    elastic

    Elasticsearch實例的訪問用戶名。

    說明

    如果程序中指定elastic賬號訪問Elasticsearch服務(wù),后續(xù)在修改elastic賬號對應(yīng)密碼后需要一些時間來生效,在密碼生效期間會影響服務(wù)訪問,因此不建議通過elastic來訪問。建議在Kibana控制臺中創(chuàng)建一個符合預(yù)期的Role角色用戶進行訪問,詳情請參見通過Elasticsearch X-Pack角色管理實現(xiàn)用戶權(quán)限管控

    es.net.http.auth.pass

    /

    Elasticsearch實例的訪問密碼。

    es.nodes.wan.only

    false

    開啟Elasticsearch集群在云上使用虛擬IP進行連接,是否進行節(jié)點嗅探:

    • true:設(shè)置

    • false:不設(shè)置

    es.nodes.discovery

    true

    是否禁用節(jié)點發(fā)現(xiàn):

    • true:禁用

    • false:不禁用

    重要

    使用阿里云Elasticsearch,必須將此參數(shù)設(shè)置為false。

    es.input.use.sliced.partitions

    true

    是否使用slice分區(qū):

    • true:使用。設(shè)置為true,可能會導(dǎo)致索引在預(yù)讀階段的時間明顯變長,有時會遠遠超出查詢數(shù)據(jù)所耗費的時間。建議設(shè)置為false,以提高查詢效率。

    • false:不使用。

    es.index.auto.create

    true

    通過Hadoop組件向Elasticsearch集群寫入數(shù)據(jù),是否自動創(chuàng)建不存在的index:

    • true:自動創(chuàng)建

    • false:不會自動創(chuàng)建

    es.resource

    /

    指定要讀寫的index和type。

    es.mapping.names

    /

    表字段與Elasticsearch的索引字段名映射。

    es.read.metadata

    false

    操作Elasticsearch字段涉及到_id之類的內(nèi)部字段,請開啟此屬性。

    更多的ES-Hadoop配置項說明,請參見官方配置說明

  3. 保存并運行作業(yè)。

    保存并運行作業(yè)

    運行成功后,結(jié)果如下。運行結(jié)果

步驟三:通過Hive寫入索引數(shù)據(jù)

  1. 創(chuàng)建一個HiveSQL類型的寫數(shù)據(jù)作業(yè)。

    作業(yè)配置如下。

    add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-hive-6.7.0.jar;
    INSERT INTO TABLE company VALUES (1, "zhangsan", "1990-01-01","No.969, wenyixi Rd, yuhang, hangzhou");
    INSERT INTO TABLE company VALUES (2, "lisi", "1991-01-01", "No.556, xixi Rd, xihu, hangzhou");
    INSERT INTO TABLE company VALUES (3, "wangwu", "1992-01-01", "No.699 wangshang Rd, binjiang, hangzhou");
  2. 保存并運行作業(yè)。

    保存并運行寫數(shù)據(jù)作業(yè)
  3. 運行成功后,登錄Elasticsearch實例的Kibana控制臺,查看company索引數(shù)據(jù)。

    登錄Kibana控制臺的具體操作步驟,請參見登錄Kibana控制臺。您可以在Kibana控制臺中,執(zhí)行以下命令查看company索引數(shù)據(jù)。

    GET company/_search

    執(zhí)行成功后,返回結(jié)果如下。寫數(shù)據(jù)結(jié)果

步驟四:通過Hive讀取索引數(shù)據(jù)

  1. 創(chuàng)建一個HiveSQL類型的讀數(shù)據(jù)作業(yè)。

    作業(yè)配置如下。

    add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-hive-6.7.0.jar;
    select * from company;
  2. 保存并運行作業(yè)。

    保存并運行讀數(shù)據(jù)作業(yè)

常見問題

Q:Hive讀寫Elasticsearch數(shù)據(jù)時,遇到如下報錯信息,該如何處理?

報錯信息: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Could not initialize class org.elasticsearch.hadoop.rest.commonshttp.CommonsHttpTransport。

A:報錯的原因是EMR 5.6.0版本的Hive組件缺少commons-httpclient-3.1.jar文件。處理方法為手動增加缺少的文件到Hive的lib目錄下,文件下載地址,請參見commons-httpclient-3.1