使用python链接mysql读入一个表并把它再写到hbase 里去(九头蛇万岁)

先声明一下需要用的库:

俩!!:

happybase    (写这个的老哥真的happy)

pymysql

建议使用anaconda进行相应版本匹配安装,在装happybase的时候,conda默认的channel是找不到这个库的你需要使用 conda-forge 镜像参考如下网站:

https://anaconda.org/conda-forge/happybase

pymysql就不用说了,毕竟mysql业界广泛使用,这个平台都好找

安装好了之后打开你的pycharm把基本purepython项目创建好,解释器指定到anaconda3下面的python.exe上面

然后开始玩耍:

Step1:

请打算开你的大数据环境启动hadoop、zookeeper、hbase(简直后台内存爆掉)

Step2:

开始编写自己的脚本,建议表级别操作和数据级别操作分别写脚本,这样会好控制一些。

这里我简单写了四个脚本

test.py,mysql.py,delete.py,scan.py

(test开始没规划,实际就是创表脚本)

test.py

  1. 1 #!/usr/bin/python
  2. 2 # coding:utf-8
  3. 3 import happybase
  4. 4
  5. 5 connection = happybase.Connection('localhost', 9090)
  6. 6
  7. 7 connection.create_table(
  8. 8 'short',
  9. 9 {
  10. 10 'base':dict(),
  11. 11 'region':dict(),
  12. 12 'infos':dict()
  13. 13 }
  14. 14 )

这里面很简单的操作,你要用hbase,你就要链接它,happybase.Connection(主机名, 端口号)参数就这么简单,对应好就ok

这里创建表的方法写法和hbase的操作感觉相当的像,hbase的table用起来确实就像是字典嵌套字典,太过于真实

这里我的表名为short,表有三个列族base、region、infos,这个是根据数据自己设计出来的。数据是个csv:如下,请先存为csv文件,导入你的mysql做准备(如果你要实验这个例子)

customer_id,first_name,last_name,email,gender,address,country,language,job,credit_type,credit_no
1,Spencer,Raffeorty,sraffeorty0@dropbox.com,Male,9274 Lyons Court,China,Khmer,Safety Technician III,jcb,3589373385487669
2,Cherye,Poynor,cpoynor1@51.la,Female,1377 Anzinger Avenue,China,Czech,Research Nurse,instapayment,6376594861844533
3,Natasha,Abendroth,nabendroth2@scribd.com,Female,2913 Evergreen Lane,China,Yiddish,Budget/Accounting Analyst IV,visa,4041591905616356
4,Huntley,Seally,hseally3@prlog.org,Male,694 Del Sol Lane,China,Albanian,Environmental Specialist,laser,677118310740263477
5,Druci,Coad,dcoad4@weibo.com,Female,16 Debs Way,China,Hebrew,Teacher,jcb,3537287259845047
6,Sayer,Brizell,sbrizell5@opensource.org,Male,71 Banding Terrace,China,Maltese,Accountant IV,americanexpress,379709885387687
7,Becca,Brawley,bbrawley6@sitemeter.com,Female,7 Doe Crossing Junction,China,Czech,Payment Adjustment Coordinator,jcb,3545377719922245
8,Michele,Bastable,mbastable7@sun.com,Female,98 Clyde Gallagher Pass,China,Malayalam,Tax Accountant,jcb,3588131787131504
9,Marla,Brotherhood,mbrotherhood8@illinois.edu,Female,4538 Fair Oaks Trail,China,Dari,Design Engineer,china-unionpay,5602233845197745479
10,Lionello,Gogarty,lgogarty9@histats.com,Male,800 Sage Alley,China,Danish,Clinical Specialist,diners-club-carte-blanche,30290846607043
11,Camile,Ringer,cringera@army.mil,Female,5060 Fairfield Alley,China,Punjabi,Junior Executive,china-unionpay,5602213490649878
12,Gillan,Banbridge,gbanbridgeb@wikipedia.org,Female,91030 Havey Point,China,Kurdish,Chemical Engineer,jcb,3555948058752802
13,Guinna,Damsell,gdamsellc@spiegel.de,Female,869 Ohio Park,China,Fijian,Analyst Programmer,jcb,3532009465228502
14,Octavia,McDugal,omcdugald@rambler.ru,Female,413 Forster Center,China,English,Desktop Support Technician,maestro,502017593120304035
15,Anjanette,Penk,apenke@lulu.com,Female,8154 Schiller Road,China,Swedish,VP Sales,jcb,3548039055836788
16,Maura,Teesdale,mteesdalef@globo.com,Female,9568 Quincy Alley,China,Dutch,Dental Hygienist,jcb,3582894252458217

导入mysql之后:

我是将它导在了数据库demo下面。

接下来,你就可以去玩蛇了

是不是感觉顺序混乱???混乱就对了

现在要干的事情是链接数据库读取数据,再将其插入到hbase中,mysql查表select,hbase插入put,知识点咚咚咚

mysql.py

  1. #!/usr/bin/python
  2. # coding:utf-8
  3. import pymysql
  4. import happybase
  5.  
  6. class testc:
  7. def __init__(self, customer_id, first_name, last_name, email, gender, address, country, language, job, credit_type,
  8. credit_no):
  9. self._key = customer_id
  10. self._first_name = first_name
  11. self._last_name = last_name
  12. self._email = email
  13. self._gender = gender
  14. self._address = address
  15. self._country = country
  16. self._language = language
  17. self._job = job
  18. self._credit_type = credit_type
  19. self._credit_no = credit_no
  20.  
  21. def get(self):
  22. return list((self._key, self._first_name, self._last_name,
  23. self._email, self._gender, self._address,
  24. self._country, self._language, self._job,
  25. self._credit_type, self._credit_no)
  26. )
  27.  
  28. def __str__(self):
  29. return '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s' % (self._key,
  30. self._first_name,
  31. self._last_name,
  32. self._email,
  33. self._gender,
  34. self._address,
  35. self._country,
  36. self._language,
  37. self._job,
  38. self._credit_type,
  39. self._credit_no
  40. )
  41.  
  42. connection = happybase.Connection('localhost', 9090)
  43.  
  44. db = pymysql.connect(host='127.0.0.1', port=3307, user='root', password='hadoop', database='demo')
  45. cursor = db.cursor()
  46.  
  47. sql = 'select * from testc'
  48. cursor.execute(sql)
  49. data = cursor.fetchall()
  50. data = list(data)
  51. datalist = []
  52. for i in range(0, len(data)):
  53. datalist.append(testc(data[i][0], data[i][1], data[i][2],
  54. data[i][3], data[i][4], data[i][5],
  55. data[i][6], data[i][7], data[i][8],
  56. data[i][9], data[i][10]
  57. ))
  58. print(datalist[i])
  59. # 到这里mysql中的表数据已经被读取并存储与datalist中,接下来将它转存在hbase中去
  60. table = connection.table('short')
  61. for data_ in datalist:
  62. row = data_.get()
  63. table.put(
  64. bytes('{}'.format(row[0]),encoding='ascii'),
  65. {
  66. b'base:first_name': bytes('{}'.format(row[1]), encoding='ascii'),
  67. b'base:last_name': bytes('{}'.format(row[2]), encoding='ascii'),
  68. b'base:email': bytes('{}'.format(row[3]), encoding='ascii'),
  69. b'base:gender': bytes('{}'.format(row[4]), encoding='ascii'),
  70. b'region:address': bytes('{}'.format(row[5]), encoding='ascii'),
  71. b'region:country': bytes('{}'.format(row[6]), encoding='ascii'),
  72. b'infos:language': bytes('{}'.format(row[7]), encoding='ascii'),
  73. b'infos:job': bytes('{}'.format(row[8]), encoding='ascii'),
  74. b'infos:credit_type': bytes('{}'.format(row[9]), encoding='ascii'),
  75. b'infos:credit_no': bytes('{}'.format(row[10]), encoding='ascii')
  76. }
  77. )
  78.  
  79. db.close()

大概流程思路是查出来的数据用特定格式做好,然后再写入,这里我做了个类(本质上没有必要),读者在实验的时候可以考录直接使用一个list去接收

连接mysql就需要你使用pymysql库

  1. db = pymysql.connect(host='127.0.0.1', port=3307, user='root', password='hadoop', database='demo')

其中的参数怕是意思很清楚了,这里不进行过多赘述。

这里有个叫做游标对象的东西  cursor = db.cursor() 可以认为他是个代理,使用它来执行sql语句并展示。

cursor有三个方法,fetchall、fetchone、fetchmany。嚼一嚼英语就知道意思是取全部、一行和多行,多行自然你要设定参数

找合适的容器接收你得到的数据,把数据按一定规格处理好之后,准备导入到hvase中。末尾的for循环就是导入代码,这里全部使用了bytes()是因为hbase只支持二进制,所以转换为了ascii码编码,否则你会在接下来的scan中看到不想要的utf-8字符。

导好了之后,我们使用scan来看一下,hbase中scan是用来看全表的,那么这里table对象就会同样有这个方法,人家老哥很厉害啊。

scan.py

  1. #!/usr/bin/python
  2. # coding:utf-8
  3.  
  4. import happybase
  5.  
  6. connection = happybase.Connection('localhost', 9090)
  7. table = connection.table('short')
  8.  
  9. for key, data in table.scan():
  10. print(str(key),data)

这个篇幅很小,因为表级操作。

这里是我查到的结果

这个小小的实验基本就完成了,中间遇到坑的时候可能会重复删表和建表,这里再提供一个

delete.py

  1. #!/usr/bin/python
  2. # coding:utf-8
  3. import happybase
  4.  
  5. connection = happybase.Connection('localhost', 9090)
  6. connection.disable_table('short')
  7. connection.delete_table('short')

嗯好的,我只能帮你到这了,还要去学习哦,如果大佬有更好的数据导入是字符编码的处理方式,跪求告知,知识就是力量!谢过大佬。

hail hydra

python搞搞大数据之hbase——初探的更多相关文章

  1. Python/Numpy大数据编程经验

    Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点.   ...

  2. 大数据之HBase

    大数据之HBase数据插入优化之多线程并行插入实测案例 一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于 ...

  3. 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素

    package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...

  4. 【Python开发】Python 适合大数据量的处理吗?

    Python 适合大数据量的处理吗? python 能处理数据库中百万行级的数据吗? 处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何? 需要澄清两点之后才可以比较全面的看这 ...

  5. 大数据开发--Hbase协处理器案例

    大数据开发--Hbase协处理器案例 1. 需求描述 在社交网站,社交APP上会存储有大量的用户数据以及用户之间的关系数据,比如A用户的好友列表会展示出他所有的好友,现有一张Hbase表,存储就是当前 ...

  6. 大数据查询——HBase读写设计与实践

    导语:本文介绍的项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的 ...

  7. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  8. 【大数据】Hbase如何批量删除指定数据

    一.起因: Hbase是一个列式存储,nosql类型的数据库,类似mongodb. 目前似乎没有提供批量删除的方法,只有一个单行删除的命令:deleteall 'tablename', rowkey ...

  9. 大数据学习——Hbase

    1. Hbase基础 1.1 hbase数据库介绍 1.简介 hbase是bigtable的开源java版本.是建立在hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写nosql的数据库系统 ...

随机推荐

  1. bbs-admin-自定义admin(二)

    本文内容 目的:模仿admin默认配置,自定义配置类 一 查 1 查看数据 2 查看表头 3 分页器 4 search(搜索框)   5 action(批量处理)    6 filter(分类)   ...

  2. openssl 模块 安装 centso Ubuntu

    备忘: centos: yum install openssl-devel ubuntu: apt-get install libssl-dev 哎... 这玩意总是记不住. 每次都得搜索好麻烦.

  3. springboot之搭建第一个helloworld程序

    1.下载基本框架 在网站:https://start.spring.io/ 全部默认,基本没有改动 选择依赖,当然也可以自己在pom.xml加,我们直接在这里选择. 只选择Spring Web Sta ...

  4. CISCO实验记录七:OSPF

    一.要求 1.使用OSPF创建路由表 2.查看OSPF邻居 二.实现 1.使用OSPF创建路由表 #router ospf 1 #network 192.168.1.0 0.0.0.255 area ...

  5. ubuntu 上开发.netcore

    ubuntu需要安装的软件: 1.sudo apt-get install openssh-server openssh-client 2.sudo apt-get git 3.安装vscode 4. ...

  6. Jenkins 搭建企业实战案例 (发布与回滚)

    让我们的代码部署变得easy,不再难,Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins非常易于安装和配置,简单易用 ...

  7. 从零搭建配置Cuckoo Sandbox

    1.安装依赖 $ sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev ...

  8. PAT 甲级 1015 Reversible Primes (20 分) (进制转换和素数判断(错因为忘了=))

    1015 Reversible Primes (20 分)   A reversible prime in any number system is a prime whose "rever ...

  9. JavaScript基础------数组

    数组1.数组的每个元素都可以保存任意类型数据2.数组长度可以随之调整创建数组的2种方式 1.使用Array构造函数 语法 new Array() 小括号()说明: (1)预先知道数组要保存的项目的数量 ...

  10. DB2的web可视化客户端工具

    DB2 是IBM公司的产品,目前在银行等金融行业还在大量使用, DB2的客户端工具太,并且难用,这是一直为人所垢病的,  现在TreeSoft数据库管理系统已支持DB2了,直接在浏览器中就可以操作查看 ...