MySQL to Hbase 数据的抽取

一个简单粗暴的方法从MySQL数据库抽取数据到Hbase实现的过程:

rowKey利用MySQL表的主键ID特性作为HBASE的id

code:

####

#!/usr/bin/env python

#coding=utf-8

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8‘)

import MySQLdb

import datetime,time

sys.path.append(‘/usr/lib/python2.6/site-packages/hbase‘)

from thrift import Thrift

from thrift.transport import TSocket

from thrift.transport import TTransport

from thrift.protocol import TBinaryProtocol

from hbase import Hbase

from hbase.ttypes import *

import csv

from hbase.ttypes import ColumnDescriptor, Mutation, BatchMutation, TRegionInfo

from hbase.ttypes import IOError, AlreadyExists

def client_conn():

transport=TSocket.TSocket("172.16.10.87",9090)

transport=TTransport.TBufferedTransport(transport)

protocol=TBinaryProtocol.TBinaryProtocol(transport)

client=Hbase.Client(protocol)

transport.open()

return client

if __name__=="__main__":

client=client_conn()

conn = MySQLdb.connect(host="172.161.110.10", user="dlan", passwd="root123", port=5029, db=‘coolqi‘, charset=‘utf8‘)

cur = conn.cursor()

sql="select * from ca_record where ca_time>=STR_TO_DATE(‘20170720‘,‘%Y%m%d‘)"

print sql

cur.execute(sql)

data=cur.fetchall()

for k in xrange(len(data)):

datalist2=[]

rowKey=data[k][0]

print rowKey

user_id=data[k][1]

ca_result=data[k][2]

ca_time=data[k][3]

real_name=data[k][4]

id_card=data[k][5]

sex=data[k][6]

datalist=[user_id,ca_result,ca_time,real_name,id_card,sex]

datalist1=["user_id","ca_result","ca_time","real_name","id_card","sex"]

for j in range(len(datalist)):

args=str(datalist[j])

#print args

if isinstance(args,str):

mutations="[Mutation(column="+"‘"+datalist1[j]+‘:‘+str(j)+"‘"+","+"value="+"‘"+str(args)+"‘)"+"]"

datalist2.append(mutations)

#print datalist2

client.mutateRow(‘ca_record‘,str(rowKey),[Mutation(column=datalist1[j]+‘:‘+str(j),value=str(args))])

#client.mutateRows(‘ca_record‘,datalist2)

###在for k in xrange(len(data)): 可以利用enumerate()函数减少上面的循环 .

时间: 2024-11-05 19:26:08

MySQL to Hbase 数据的抽取的相关文章

分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

[TOC] 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有兴趣的朋友直接看一下代码,就能理解其设计思想,虽然代码目前来说很多地方还是比较紧耦合,但只要花些时间和精力,很多都是可抽取出来并且可配置化的. 因为时间的关系,我只写了京东和苏宁易购两个网站的爬虫,但是完全可以实现不同网站爬虫的随机调度,基于其代码结构,再写国美.天猫等的商品爬取,难度不

python使用mysql connection获取数据感知不到数据变化问题

在做数据同步校验的时候,需要从mysql fetch数据和hbase的数据进行对比,发现即使mysql数据变化了,类似下面的代码返回的值还是之前的数据.抽取的代码大概如下: 1 import MySQL 2 3 conn = MySQL.connect(host = mysql_config['host'], 4 user = mysql_config['username'], 5 password = mysql_config['password'], 6 port = int(mysql_c

HBase数据同步到ElasticSearch的方案

ElasticSearch的River机制 ElasticSearch自身提供了一个River机制,用于同步数据. 这里可以找到官方目前推荐的River: http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/ 但是官方没有提供HBase的River. 其实ES的River非常简单,就是一个用户打包好的jar包,ES负责找到一个node,并启动这个River.如果node失效了,会自动找另外一个node来启动这个Ri

HBase数据同步ElasticSearch该程序

ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/ 可是官方没有提供HBase的River. 事实上ES的River很easy,就是一个用户打包好的jar包,ES负责找到一个node.并启动这个River.假设node失效了,会自己主动找另外一个node来启动

聊聊MySQL、HBase、ES的特点和区别

互联网时代各种存储框架层出不穷,眼花缭乱,比如传统的关系型数据库:Oracle.MySQL:新兴的NoSQL:HBase.Cassandra.Redis:全文检索框架:ES.Solr等.如何为自己的业务选取合适的存储方案,相信大家都思考过这个问题,本文简单聊聊我对MySQL.HBase.ES的理解,希望能和大家一起探讨进步,有不对的地方还请指出. MySQL:关系型数据库,主要面向OLTP,支持事务,支持二级索引,支持SQL,支持主从.group replication架构模型(本文全部以Inn

Hbase数据存储原理与读写详解

1.HBase的数据存储原理 一个HRegionServer会负责管理很多个region 一个*region包含很多个store 一个列族就划分成一个store** 如果一个表中只有1个列族,那么每一个region中只有一个store 如果一个表中有N个列族,那么每一个region中有N个store 一个store里面只有一个memstore memstore是一块内存区域,写入的数据会先写入memstore进行缓冲,然后再把数据刷到磁盘 一个store里面有很多个StoreFile, 最后数据

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

mysql 删除重复数据

如题:mysql 数据库删除重复数据 因为是mysql 所以其他数据哭的命令在mysql 中是不能使用的.不要想当然的使用sql 脚本 delete from table1 where field1 in (select field1 from table1 group by field1 having count(field1) > 1) and rowid not in (select min(rowid) from table1 group by field1 having count(f

mysql的char数据类型和varchar数据类型的选择

mysql的char数据类型和varchar数据类型的选择 存储引擎对于选择char和varchar的影响: 对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列.这样可以使整个表静态化,从而使数据检索更快,用空间换时间 对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用char不一定比使用 varchar更好,但由于varchar是按照实际的长度存储,比较节省空间,所以对磁盘I/O和数据存储总量比较好 mysql并