文档章节

Python读取Redis数据导出到Elasticsearch

go2school
 go2school
发布于 2015/12/29 20:40
字数 307
阅读 677
收藏 7
点赞 0
评论 0
#! usr/bin/python
# -*- coding:utf-8 -*-
import redis
import datetime
from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk
import sys, getopt

def usage():
	print 'usage: python cmd.py -e <elasticsearch host> -r <redis host> -p <redis list key prefix>'

if __name__ == '__main__':
	
	opts, args = getopt.getopt(sys.argv[1:], "e:r:p:")

	elasticsearch_host = ''
	redis_host = ''
	redis_list_prefix= ''
	for op, value in opts:
		if op == "-e":
			elasticsearch_host = value
		elif op == "-r":
			redis_host = value
		elif op == "-p":
			redis_list_prefix = value
		
	if elasticsearch_host == '' or redis_host == '' or redis_list_prefix == '':
		usage()
		sys.exit(1)
		
	client = Elasticsearch([{'host' : elasticsearch_host}])

	r = redis.Redis(host = redis_host, port=6379)

	doctype = "watchvideocount"

	#get all keys ends with day description except today
	videocount_keys = r.keys(redis_list_prefix + '_*')

	#start query data
	for k_index in videocount_keys:
		#get all <k, v> data
		kvalues = r.hgetall(k_index)
		
		#get day
		p = k_index.index('_')
		day = k_index[p+1:]	
			
		#make index name	
		index_name = k_index.lower()		
		#create index
		try:
			client.indices.create(index=index_name)
		except Exception:
			print 'index ', index_name, ' exist'
		namapping = {
				doctype: {
					"properties": {
						"day":{"type": "date"},
						"EID":{"type": "string"},
						"CID":{"type": "string"},
						"VID":{"type": "string"},
						"VALUE":{"type": "integer"}
					}
				}
			}
		client.indices.put_mapping(index=index_name, doc_type=doctype, body=namapping)
		
		#data cache
		data_cache = []	
		for key in kvalues:
			fields = key.split('_')
			eid = fields[0]
			cid = fields[1]
			vid = fields[2]
			value = kvalues[key]
			#make primary key
			ID = day + '_' + eid + '_' + cid + '_' + vid		
			#make JSON data
			json_data = {'_index':index_name, '_type':doctype, "_id":ID, "DAY":day, "EID":eid, "CID":cid, "VID":vid, "VALUE":value}	
			#append data cache
			data_cache.append(json_data)
		
		#index into elasticsearch	
		bulk(client, actions=data_cache, stats_only=True)
		print k_index, 'done'


© 著作权归作者所有

共有 人打赏支持
go2school
粉丝 10
博文 33
码字总数 14674
作品 0
技术主管
在 Python 中使用 Elasticsearch

在这篇文章中,我将讨论 Elasticsearch 以及如何将其整合到不同的 Python 应用程序中。 什么是 ElasticSearch? ElasticSearch(ES)是一个建立在 Apache Lucene 之上的高度可用的分布式开源...

xjtuhit ⋅ 06/13 ⋅ 0

Elasticsearch 入门 Hello World

安装 Elasticserach: 应给得到类似下面的响应: 安装图形界面kibana Hello World { } "count": 1,"_shards": { }} Python 插件 elasticsearch import pprintes = Elasticsearch()doc = { }......

王兵 ⋅ 05/10 ⋅ 0

当ES赶超Redis,这份ES进修攻略不容错过!

从4月DB-Engines最新发布的全球数据库排名中,我们赫然发现ElasticSearch逆袭超越了Redis,从原先的第9名上升至第8名,而Redis则落后一名,排在了其后。 事实上,这场逆袭并不算太让人意外。...

DBAplus社群 ⋅ 04/15 ⋅ 0

ElasticSearch2.3.3离线搭建(windows+Linux)

1、ElasticSearch介绍 ElasticSearch 是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch 是用Java开发的,并作为Apache许可条...

Coder2018 ⋅ 2017/05/23 ⋅ 3

Uber jaeger--一个基于Go的分布式追踪系统

Jaeger-Uber开源的一个基于Go的分布式追踪系统 最近因工作需要在研究traing系统,最后选了jaeger,下面是一些总结,同时摘抄了网上的一些资料,并结合自己实践过程中遇到的一些什么问题,欢迎...

北极之北 ⋅ 05/30 ⋅ 0

使用elasticsearch作为存储引擎部署jaeger

使用elasticsearch作为存储引擎部署jaeger 由于网上大部分文章部署jaeger都是使用Cassandra,使用elasticsearch较少,而我主要是使用elasticsearch来部署的,下面是我的一些使用总结,欢迎指针...

北极之北 ⋅ 05/30 ⋅ 0

spring-data-elasticsearch 基本案例详解(三)

『 风云说:能分享自己职位的知识的领导是个好领导。 』 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2 本文提纲 一、...

夜黑人模糊灬 ⋅ 05/13 ⋅ 0

ELK +filebeat +redis 安装

一、安装elasticsearch elasticsearch-6.1.2安装 解压 进入目录 配置文件 elasticsearch.yml 修改 ip 和端口 创建运行用户 elk 授权 chown -R elk:elk /data1/elasticsearch-6.1.2 elk 用户启...

wei_666 ⋅ 04/19 ⋅ 0

CTO详细讲解海量日志处理ELK

ELK实时日志分析平台之Elasticsearch简介 Elasticsearch是一个高度灵活的开源全文检索和分析引擎。它能够迅速(几乎是实时地)地存储、查找和分析大规模数据。通常被用在有复杂的搜索要求的系...

Java架构分享 ⋅ 05/23 ⋅ 0

Spark中hive的使用(hive操作es示例)

配置hive-site.xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect ......

守望者之父 ⋅ 06/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部