通过Crontab调用HIVE语句对ElasticSearch索引读写操作

1 篇文章 0 订阅
1 篇文章 0 订阅
一、HIVE下建立视图表用于对ES索引写操作

首先建立写入ES的视图表,对应在ES的khbscount索引,log类型

 CREATE EXTERNAL TABLE khbscount (SFuncNo STRING, COUNT bigint,time timestamp)
 STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
 TBLPROPERTIES('es.resource' = 'khbs-count/log',
 'es.mapping.names'='SFuncNo:@SFuncNo,time:@timestamp',
 'es.index.auto.create' = 'true')

HIVE中bigint和timestamp对应ES中的long和time类型

二、HIVE下建立外部表用于对ES索引读操作并将读取的数据写入另一个索引 khbswrite.sql
drop table  if exists es_temp;
create external table es_temp (type string, sfuncno string, khbs string) 
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler' 
tblproperties('es.resource'='logfile-${hiveconf:date}/log',
'es.query'='/home/hadoop/khbs.json','es.nodes'='localhost','es.port'='9200',
'es.mapping.names'='sfuncno:@SFuncNo, khbs:@KHBS');

insert overwrite table khbscount 
select sfuncno,count(distinct khbs),'${hiveconf:date2}' 
from es_temp group by sfuncno;

hive:date和date2是HIVE传入的变量,’es.query’是查询条件,可以指定json语句:

{
   "query": {
       "filtered": {
           "query": {
               "query_string": {
                   "query": "(@SFuncNo:\"2905\") AND (@type:\"general\")" }
           },
           "filter": {
           }
       }
   }
}
三、Shell脚本调用HIVE语句
#!/bin/bash
yesterday=`date -d yesterday '+%Y-%m-%d'`
yess=`date -d yesterday '+%Y-%m-%d %H:%M:%S'`
echo $yesterday
echo $yess
source /home/hadoop/.bash_profile
/home/hadoop/hive-1.2.1/bin/hive 
--hiveconf date="$yesterday" 
--hiveconf date2="$yess" -f /home/hadoop/xuztest/khbs.sql >>
/home/hadoop/xuztest/es_test.log 2>&1 

这里注意date -d的用法,和重定日志的方式。比较奇怪的是mapreduce日志输出调成标准错误输出才能定向出来

四、Crontab实现自动调用
0 7 * * * /home/hadoop/xuztest/start_hive_es.sh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值