python搞搞大數據之hbase——初探

来源:https://www.cnblogs.com/lovely-lisk/archive/2019/08/20/11384992.html
-Advertisement-
Play Games

使用python鏈接mysql讀入一個表並把它再寫到hbase 里去(九頭蛇萬歲) 先聲明一下需要用的庫: 倆!!: happybase (寫這個的老哥真的happy) pymysql 建議使用anaconda進行相應版本匹配安裝,在裝happybase的時候,conda預設的channel是找不到 ...


使用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 #!/usr/bin/python
 2 # coding:utf-8
 3 import happybase
 4 
 5 connection = happybase.Connection('localhost', 9090)
 6 
 7 connection.create_table(
 8     'short',
 9     {
10         'base':dict(),
11         'region':dict(),
12         'infos':dict()
13     }
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,[email protected],Male,9274 Lyons Court,China,Khmer,Safety Technician III,jcb,3589373385487669
2,Cherye,Poynor,[email protected],Female,1377 Anzinger Avenue,China,Czech,Research Nurse,instapayment,6376594861844533
3,Natasha,Abendroth,[email protected],Female,2913 Evergreen Lane,China,Yiddish,Budget/Accounting Analyst IV,visa,4041591905616356
4,Huntley,Seally,[email protected],Male,694 Del Sol Lane,China,Albanian,Environmental Specialist,laser,677118310740263477
5,Druci,Coad,[email protected],Female,16 Debs Way,China,Hebrew,Teacher,jcb,3537287259845047
6,Sayer,Brizell,[email protected],Male,71 Banding Terrace,China,Maltese,Accountant IV,americanexpress,379709885387687
7,Becca,Brawley,[email protected],Female,7 Doe Crossing Junction,China,Czech,Payment Adjustment Coordinator,jcb,3545377719922245
8,Michele,Bastable,[email protected],Female,98 Clyde Gallagher Pass,China,Malayalam,Tax Accountant,jcb,3588131787131504
9,Marla,Brotherhood,[email protected],Female,4538 Fair Oaks Trail,China,Dari,Design Engineer,china-unionpay,5602233845197745479
10,Lionello,Gogarty,[email protected],Male,800 Sage Alley,China,Danish,Clinical Specialist,diners-club-carte-blanche,30290846607043
11,Camile,Ringer,[email protected],Female,5060 Fairfield Alley,China,Punjabi,Junior Executive,china-unionpay,5602213490649878
12,Gillan,Banbridge,[email protected],Female,91030 Havey Point,China,Kurdish,Chemical Engineer,jcb,3555948058752802
13,Guinna,Damsell,[email protected],Female,869 Ohio Park,China,Fijian,Analyst Programmer,jcb,3532009465228502
14,Octavia,McDugal,[email protected],Female,413 Forster Center,China,English,Desktop Support Technician,maestro,502017593120304035
15,Anjanette,Penk,[email protected],Female,8154 Schiller Road,China,Swedish,VP Sales,jcb,3548039055836788
16,Maura,Teesdale,[email protected],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 
 7 class testc:
 8     def __init__(self, customer_id, first_name, last_name, email, gender, address, country, language, job, credit_type,
 9                  credit_no):
10         self._key = customer_id
11         self._first_name = first_name
12         self._last_name = last_name
13         self._email = email
14         self._gender = gender
15         self._address = address
16         self._country = country
17         self._language = language
18         self._job = job
19         self._credit_type = credit_type
20         self._credit_no = credit_no
21 
22     def get(self):
23         return list((self._key, self._first_name, self._last_name,
24                      self._email, self._gender, self._address,
25                      self._country, self._language, self._job,
26                      self._credit_type, self._credit_no)
27                     )
28 
29     def __str__(self):
30         return '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s' % (self._key,
31                                                      self._first_name,
32                                                      self._last_name,
33                                                      self._email,
34                                                      self._gender,
35                                                      self._address,
36                                                      self._country,
37                                                      self._language,
38                                                      self._job,
39                                                      self._credit_type,
40                                                      self._credit_no
41                                                      )
42 
43 
44 connection = happybase.Connection('localhost', 9090)
45 
46 db = pymysql.connect(host='127.0.0.1', port=3307, user='root', password='hadoop', database='demo')
47 cursor = db.cursor()
48 
49 sql = 'select * from testc'
50 cursor.execute(sql)
51 data = cursor.fetchall()
52 data = list(data)
53 datalist = []
54 for i in range(0, len(data)):
55     datalist.append(testc(data[i][0], data[i][1], data[i][2],
56                           data[i][3], data[i][4], data[i][5],
57                           data[i][6], data[i][7], data[i][8],
58                           data[i][9], data[i][10]
59                           ))
60     print(datalist[i])
61 # 到這裡mysql中的表數據已經被讀取並存儲與datalist中,接下來將它轉存在hbase中去
62 table = connection.table('short')
63 for data_ in datalist:
64     row = data_.get()
65     table.put(
66         bytes('{}'.format(row[0]),encoding='ascii'),
67         {
68             b'base:first_name': bytes('{}'.format(row[1]), encoding='ascii'),
69             b'base:last_name': bytes('{}'.format(row[2]), encoding='ascii'),
70             b'base:email': bytes('{}'.format(row[3]), encoding='ascii'),
71             b'base:gender': bytes('{}'.format(row[4]), encoding='ascii'),
72             b'region:address': bytes('{}'.format(row[5]), encoding='ascii'),
73             b'region:country': bytes('{}'.format(row[6]), encoding='ascii'),
74             b'infos:language': bytes('{}'.format(row[7]), encoding='ascii'),
75             b'infos:job': bytes('{}'.format(row[8]), encoding='ascii'),
76             b'infos:credit_type': bytes('{}'.format(row[9]), encoding='ascii'),
77             b'infos:credit_no': bytes('{}'.format(row[10]), encoding='ascii')
78         }
79     )
80 
81 db.close()

大概流程思路是查出來的數據用特定格式做好,然後再寫入,這裡我做了個類(本質上沒有必要),讀者在實驗的時候可以考錄直接使用一個list去接收

連接mysql就需要你使用pymysql庫

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (一) 軟體介紹由俄羅斯人lgor Sysove開發,為開源軟體。支持高併發:支持幾萬併發連接(特別是靜態小文件業務環境) 資源消耗少:在3萬併發連接下開啟10個Nginx線程消耗記憶體不到200M 支持非同步網路I/O事件模型epoll(Linux2.6+) apache(select)功能介紹 1. ...
  • SPI協議簡述 SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是串列外圍設備介面。由Motorola首創。SPI介面主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信匯流排 ...
  • 一、安裝時間同步工具 二、同步時間 1、修改時區 2、同步時間 3、寫入硬體時間 4、自動時間同步 ...
  • 在 Linux 中,如何管理用戶、管理許可權?請看下文,謝謝配合。 ...
  • 在 Linux 中,有三種安裝軟體的方式,分別是 RPM 包安裝、YUM 源安裝、源代碼編譯安裝。 ...
  • 1、可能的問題 要將redis運用到工程項目中,只使用一臺redis是萬萬不能的,原因如下: (1)從結構上,單個redis伺服器會發生單點故障,並且一臺伺服器需要處理所有的請求負載,壓力較大。 (2)從容量上,單個redis伺服器記憶體容量有限,就算一臺redis伺服器記憶體容量為256g,也不能將所 ...
  • 前言 之所以寫這篇文章,是源於以前看過的關於sql語句優化的帖子,裡面明確提到了在sql語句中不要使用 * 來做查詢,就像下麵的規則中說的 但是中國有句姥話叫“盡信書不如無書”,難道在sql查詢語句中使用星號就真的慢的要死,難道加索引也不行?帶著這些個疑問,我進行了一些測試。結果發現,江湖傳說未必真 ...
  • 首先linux 下查看mysql相關目錄 查看 mysql 的安裝路徑 執行查詢 SQL mysql>show variables like '%dir%'; mysql>show variables like '%dir%'; datadir 就是數據路徑 確定了運行路徑,執行導入、導出mysql ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...