ES(五)ES与Hive之间的数据读写

准备工作

  1. 准备交互的jar包:elasticsearch-hadoop-6.5.4.jar

    下载地址https://www.elastic.co/downloads/hadoop

  2. 准备一张有数据的hive表

    我使用的是从mysql导入过来的表(information表)

    ./sqoop import --connect jdbc:mysql://localhost:3306/tsdn --username root --password 123456 --table information --hive-import --hive-table information -m 1

  3. 添加jar包到hive

    add jar file:///jar包所在位置

Hive的数据写入到ES中

思路:创建一张与es有联系的hive表,将数据插入到这张表中,就写入到了es中

  1. 创建hive_es_information表
CREATE TABLE `hive_es_information`(
  `id` bigint, 
  `title` string, 
  `description` string, 
  `thumb` string, 
  `content` string, 
  `type_id` int, 
  `source` string, 
  `author` string, 
  `create_time` string, 
  `view_num` int, 
  `up_num` int, 
  `update_time` string, 
  `comment_num` int
  ) STORED BY  'org.elasticsearch.hadoop.hive.EsStorageHandler'
  TBLPROPERTIES('es.resource'='hive2es/tsdn_info',
'es.nodes'='192.168.168.101',
'es.port'='9200',
'es.index.auto.create'='TRUE'
);

说明:
es.resource=索引/类型
nodes节点ip
  1. 向es_hive_information中插入数据

    insert into hive_es_information select * from information

  2. 查看es中就会发现创建了名为hive2es的索引,类型名为tsdn_info

ES数据写入Hive

使用上面导入到es的数据,导出到hive

思路:在hive中创建外表表关联es,直接查询即可

  1. 创建info_es2hive1外部表
create external table info_es2hive1(
  `id` bigint, 
  `title` string, 
  `description` string, 
  `thumb` string, 
  `content` string, 
  `type_id` int, 
  `source` string, 
  `author` string, 
  `create_time` string, 
  `view_num` int, 
  `up_num` int, 
  `update_time` string, 
  `comment_num` int
) 
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.nodes' = '192.168.168.101:9200',
'es.index.auto.create' = 'false',
'es.resource' = 'tsdn_info/info_type',
'es.read.metadata' = 'true'
);      
如果字段名称不对应,可以在tblproperties中添加'es.mapping.names'
例如 'es.mapping.names'='my_id:id,name:name'
  1. 查询数据

    select * from info_es2hive1;



加油!!


个人微信公众号【码农峰】,每天推送最新行业资讯,每周推送原创技术文章,欢迎关注。

你可能感兴趣的:(ElasticSearch)