一、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