hive 学习系列五(hive 和elasticsearch 的交互,很详细哦,我又来吹liubi了)

hive 操作elasticsearch

一,从hive 表格向elasticsearch 导入数据

1,首先,创建elasticsearch 索引,索引如下

curl -XPUT ‘10.81.179.209:9200/zebra_info_demo?pretty‘ -H ‘Content-Type: application/json‘ -d‘
{
    "settings": {
        "number_of_shards":5,
        "number_of_replicas":2
    },
    "mappings": {
         "zebra_info": {
              "properties": {
                    "name" : {"type" : "text"},
                    "type": {"type": "text"},
                    "province": {"type": "text"},
                    "city": {"type": "text"},
                    "citycode": {"type": "text", "index": "no"},
                    "district": {"type": "text"},
                    "adcode": {"type": "text", "index": "no"},
                    "township": {"type": "text"},
                    "bausiness_circle": {"type": "text"},
                    "formatted_address": {"type": "text"},
                    "location": {"type": "geo_point"},
                    "extensions": {
                      "type": "nested",
                      "properties": {
                        "map_lat": {"type": "double", "index": "no"},
                        "map_lng": {"type": "double", "index": "no"},
                        "avg_price": {"type": "double", "index": "no"},
                        "shops": {"type":"short", "index": "no"},
                        "good_comments": {"type":"short", "index": "no"},
                        "lvl": {"type":"short", "index": "no"},
                        "leisure_type": {"type": "text", "index": "no"},
                        "fun_type": {"type": "text", "index": "no"},
                        "numbers": {"type": "short", "index": "no"}
                       }
                   }
             }
        }
    }
}
‘

2,查看elasticsearch版本,下载相应的elasticsearch-hive-hadoop jar 包

可以用如下命令查看elastic search 的版本

本文版本5.6.9

到如下maven 官网下载jar 包。

https://repo.maven.apache.org/maven2/org/elasticsearch/elasticsearch-hadoop-hive/

选择正确的版本即可。

3, 把下载下来的jar 包上传到hdfs 路径下。

本文jar 包路径,hdfs:///udf/elasticsearch-hadoop-hive-5.6.9.jar

4,哦了,建表,用起来

DELETE jars;
add jar hdfs:///udf/elasticsearch-hadoop-hive-5.6.9.jar;
drop table zebra_info_demo;
CREATE EXTERNAL  TABLE zebra_info_demo(
name string,
`type` string,
province double,
city string,
citycode string,
district string,
adcode string,
township string,
business_circle string,
formatted_address string,
location string,
extensions STRUCT<map_lat:double, map_lng:double, avg_price:double, shops:smallint, good_comments:smallint, lvl:smallint, leisure_type:STRING, fun_type:STRING, numbers:smallint>
)
STORED BY ‘org.elasticsearch.hadoop.hive.EsStorageHandler‘
TBLPROPERTIES(‘es.nodes‘ = ‘10.81.179.209:9200‘,
‘es.index.auto.create‘ = ‘false‘,
‘es.resource‘ = ‘zebra_info_demo/zebra_info‘,
‘es.read.metadata‘ = ‘true‘,
‘es.mapping.names‘ = ‘name:name, type:type, province:province, city:city, citycode:citycode, district:district, adcode:adcode, township:township, business_circle:business_circle, formatted_address:formatted_address, location:location, extensions:extensions‘);  

5, 往里面填充数据,就O了。

INSERT INTO TABLE zebra_info_demo
SELECT
a.name,
a.brands,
a.province,
a.city,
null as citycode,
null as district,
null as adcode,
null as township,
a.business_circle,
null as formatted_address,
concat(a.map_lat, ‘, ‘, a.map_lng) as `location`,
named_struct(‘map_lat‘, cast(a.map_lat as double), ‘map_lng‘,cast(a.map_lng as double) ,‘avg_price‘, cast(0 as DOUBLE), ‘shops‘, 0S,  ‘good_comments‘, 0S, ‘lvl‘, cast(a.lv1 as SMALLINT), ‘leisure_type‘, ‘‘, ‘fun_type‘, ‘‘, ‘numbers‘, 0S) as extentions
from medicalsite_childclinic a;

运行结果:

二,已知elasticsearch 索引,然后,建立hive 表格和elasticsearch 进行交互。可以join 哦,一个字,liubi

1,先看一下索引和数据

已知索引如下:

curl -XPUT  ‘10.81.179.209:9200/join_tests?pretty‘ -H ‘Content-Type: application/json‘ -d‘
{
  "mappings": {
    "cities": {
      "properties": {
        "province": {
          "type": "string"
        },
        "city": {
          "type": "string"
        }
      }
    }
    }
  }
}
‘

curl -XPUT  ‘10.81.179.209:9200/join_tests1?pretty‘ -H ‘Content-Type: application/json‘ -d‘
{
  "mappings": {
    "shop": {
      "properties":{
        "name": {
          "type": "string"
        },
        "city": {
          "type": "string"
        }
      }
    }
   }
  }
}
‘

数据如下:

2,建立表格,写一堆有毒的sql 语句。

DELETE jars;
add jar hdfs:///udf/elasticsearch-hadoop-hive-5.6.9.jar;
create table join_tests(
    province string,
    city string
)STORED BY ‘org.elasticsearch.hadoop.hive.EsStorageHandler‘
TBLPROPERTIES(‘es.nodes‘ = ‘10.81.179.209:9200‘,
‘es.index.auto.create‘ = ‘false‘,
‘es.resource‘ = ‘join_tests/cities‘,
‘es.read.metadata‘ = ‘true‘,
‘es.mapping.names‘ = ‘province:province, city:city‘);

create table join_tests1(
    name string,
    city string
)STORED BY ‘org.elasticsearch.hadoop.hive.EsStorageHandler‘
TBLPROPERTIES(‘es.nodes‘ = ‘10.81.179.209:9200‘,
‘es.index.auto.create‘ = ‘false‘,
‘es.resource‘ = ‘join_tests1/shop‘,
‘es.read.metadata‘ = ‘true‘,
‘es.mapping.names‘ = ‘name:name, city:city‘);

SELECT
    a.province,
    b.city,
    b.name
from join_tests a LEFT JOIN join_tests1 b on a.city = b.city;

3,运行结果

结束语

推荐一个useful 的工具, apache Hue, 可以用来管理hdfs 文件,hive 操作。mysql 操作等。

原文地址:https://www.cnblogs.com/unnunique/p/9362112.html

时间: 2024-10-10 00:56:19

hive 学习系列五(hive 和elasticsearch 的交互,很详细哦,我又来吹liubi了)的相关文章

hive学习系列2——环境安装

1.hive的安装  (1)解压缩.重命名.设置环境变量,参考hadoop1学习系列2 (2)在目录$HIVE_HOME/conf/下,执行命令mv hive-default.xml.template  hive-site.xml重命名     在目录$HIVE_HOME/conf/下,执行命令mv hive-env.sh.template  hive-env.sh重命名 (3)修改hadoop的配置文件hadoop-env.sh,修改内容如下:     export HADOOP_CLASSP

hive学习系列1——Mysql安装

安装mysql (1)执行命令 rpm -qa |grep mysql 查看mysql是否安装     删除linux上已经安装的mysql相关库信息. rpm  -e  xxxxxxx(查看的库名,可使用右键复制)   --nodeps     执行命令 rpm -qa |grep mysql 检查是否删除干净 (2)执行命令  rpm -i   mysql-server-********  安装mysql服务端 (3)启动mysql 服务端,执行命令  后台运行 mysqld_safe &

大数据学习系列之五 ----- Hive整合HBase图文详解

引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环境,并进行了相应的测试.本文主要讲的是如何将Hive和HBase进行整合. Hive和HBase的通信意图 Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现,通信原理如下图

Hive学习(1):Hive概述

什么是Hive Hive:由 Facebook 开源用于解决海量结构化日志的数据统计. Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能. 本质是:将 HQL 转化成 MapReduce 程序 1)Hive 处理的数据存储在 HDFS 2)Hive 分析数据底层的实现是 MapReduce 3)执行程序运行在 Yarn 上 Hive大致流程: Hive的优缺点 优点 1)操作接口采用类 SQL 语法,提供快速开发的能力(简单.容易

hive学习总结(2)—Hive几种导出数据方式

1.拷贝文件 如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以. hadoop fs –cp source_path target_path 2.导出到本地文件系统 --不能使用insert into local directory来导出数据,会报错 --只能使用insert overwrite local directory来导出数据 --hive0.11版本之前,只能使用默认分隔符^A(ascii码是\00001) insert overwrite local direct

Hive学习(2):Hive安装

安装前提 已安装并配置了Hadoop集群(单机或者全分布都行) 软件下载 Hive官网:https://hive.apache.org/index.html Hive安装 配置环境变量 将下载的Hive包上传到机器中,解压到指定路径 编辑 /etc/profile,配置Hive的环境变量 export HIVE_HOME=/.../apache-hive-2.1.0-bin export PATH=$PATH:$HIVE_HOME/bin 使环境配置生效:source /etc/profile

Hive学习(五)hive日志

日志记录了程序运行的过程,是一种查找问题的利器. Hive中的日志分为两种 1. 系统日志,记录了hive的运行情况,错误状况. 2. Job 日志,记录了Hive 中job的执行的历史过程. 系统日志存储在什么地方呢 ? 在hive/conf/ hive-log4j.properties 文件中记录了Hive日志的存储情况, 默认的存储情况: hive.root.logger=WARN,DRFA hive.log.dir=/tmp/${user.name} # 默认的存储位置 hive.log

hive 学习系列三(表格的创建create-table)

表格创建: 语法 第一种建表的形式: 说明: temporary 临时表,在当前回话内,这张表有效,当回话结束,可以理解为程序结束,则程序终止. external 外部表, hdfs 上的表的文件,并非存储在默认的路径上的时候, EXTERNAL 表格和正常表格删除区别,external 只删除metastore 可以称为外部表,便于和其他数据库和程序交互,比如impala 等. 如果不加 IF NOT EXISTS 的时候,如果表存在,会报错,可以加上IF NOT EXISTS 加以避免. 注

hive 学习系列四(用户自定义函数)

如果入参是简单的数据类型,直接继承UDF,实现一个或者多个evaluate 方法. 具体流程如下: 1,实现大写字符转换成小写字符的UDF package com.example.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class Lower extends UDF { public Text evaluate(final Text s) { if