TL;DR
如果發現 hbase shell 在 scan 或 count 的筆數與你預期筆數不一致的話,就 split region 看看吧。
--- 以下是前言,還真長 XD ---
最近都在忙著新版本上線,所以小編也好一陣子沒發文了。不過這幾天有個有趣的案例,想跟大家分享一下。
有在看小編文章的大概會知道我們產品的資料庫是以 HBase 建置而成的,而 HBase 最重要的組成就是 rowkey 了。若 rowkey 設計錯誤輕微可以使用 column 來救,嚴重的甚至要砍掉整筆 row,重新設計 rowkey 才能解決。
兩年前在設計某 table 的 rowkey 時,不小心忘了對 rowkey 做 salt (HBase 基礎之一,避免 scan 時產生 hotspotting),如果又沒切 region 的話 (HBase 基礎之一,避免 scan 時產生 hotspotting),這些資料在建立時都會跑到同一個 region,在 scan 的時候效能會超差。
像這種例子就算使用 column 來救也完全沒辦法,所以小編就打算把整筆 row 砍掉重新把 salt 加上去。
--- 以下是追蹤過程 ---
原 rowkey 開頭及加上 salt 之後的新 rowkey 開頭如下:
* 原:A000001、新:DNhA000001
* 原:A000002、新:dMfA000002
* 原:A000003、新:p9OA000003
* 以此類推
原 rowkey 相同 pattern (A000XXX) 的 row 有 2000 萬筆 (在 hbase shell 內使用 count 來計算 table 的資料量),所以這次 rebuild 總共會刪除原 rowkey 共 2000 萬筆,新增新 rowkey 共 2000 萬筆。
在使用 HBase 的 Java API 執行增刪 rebuild 後,在 hbase shell 使用 count 計算 table 的資料量時卻只有 900 萬筆。一開始小編還以為是 compaction 跟 flush 的問題,所以強制對 table 做了下面幾個動作,以確保資料有在 HFile 裡面正確地寫入及刪除:
* 確認資料都會刪除:compact、major_ compact
* 確認資料都會寫入:flush
但執行完後再跑一次 count 也是一樣只有 900 萬筆,所以就開始找問題點了。
後來又使用 HBase 的 exists API,確認有找到 2000 萬筆的資料。一開始小編以為是 MapReduce 的問題,因為 HBase 計算 row count 是使用 MapReduce 來執行的,但找了一堆資料都沒人說有類似問題。後來想說在 hbase shell 內使用 scan {COLUMNS => "cf:XX"} 將所有的資料都拿出來,發現也是只有 900 萬筆,所以初步排除是 MapReduce 的問題。
後來比對了新增的 rowkey 及目前 scan 出來的 rowkey,發現 scan 出來的 rowkey 只有到 GbVA000017 而已,後面的 H-Z、a-z 開頭的全部都沒出現。所以小編使用 hbase shell 的 get 指令,確認在 Java API 新增的 rowkey (A-Z、a-z 開頭的) 是否存在於 table 內,發現用 get 可以拿的到資料。討論後用 scan 加 start rowkey 試試,結果如下:
* STARTROW => "GbVA000017":只找到一筆
* STARTROW => "H":可以找到 H 之後的所有資料
看了這結果,真的覺得非常奇怪啊!!!
後來大神 Cowman Chiang 說要不要試著用 split 讓 HBase 重切 region 看看,等於是 rebuild region 的意思,因為 split 會使用字母順序切分成不同的 region,讓 row 重新分散。split 完之後再做一次 count 果然就找到 2000 萬筆資料了啊。
感恩 Cowman Chiang 讚嘆 Cowman Chiang!!!
--- 以下是結論 ---
目前看起來就是 region 發生異常,還不知道是什麼原因會造成這次事件的發生。但如果發現 scan 或 count 的筆數與你預期的內容不一致的話,就 split region 看看吧。
--- 本次追蹤使用工具 ---
* Linux: grep, cat, cut, sort, sed, comm, wc, less, head
* Java: exists, scan, get, put, BufferedReader
* hbase shell: snapshot, split, compact, major_compact, flush, restore_snapshot, scan, get, disable, enable, clone_snapshot, list_snapshots
--- 20180112 後記 ---
後來把 snapshot 還原之後,重新做了一次 rebuild 再做 count,結果還是一樣只有 900 萬筆,然後用 hbase hbck -repair 試著看看是否能把 region 修復 (有 4 個 inconsistencies),修復完後一樣是 900 萬筆。
也有同事說到會不會是資料塞太快的關係,造成 region 無法 split 完整才會發生這個問題。對於這個說法,小編也還在研究看看,有什麼進度會再分享給大家知道。
#hbase #hadoop #mapreduce #hotspotting
同時也有2部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,硬核的知識也許不是每個工程師都能夠在職涯發展中完全運用到,但無論是本科系、轉職、自學成為工程師的朋友,都應該要知道,這些紮實的背景知識提早學習起來,在未來的日子裡,只有好沒有壞。 就透過本影片我的真實經驗分享,告訴你這些我在大學時期看似枯燥乏味的理論,其實就是程式設計內功,而日後沉睡已久的內功卻又...
「linux sort」的推薦目錄:
- 關於linux sort 在 Kewang 的資訊進化論 Facebook 的精選貼文
- 關於linux sort 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於linux sort 在 紀老師程式教學網 Facebook 的最佳解答
- 關於linux sort 在 在地上滾的工程師 Nic Youtube 的最讚貼文
- 關於linux sort 在 prasertcbs Youtube 的最佳解答
- 關於linux sort 在 Linux sort 排序用法與範例 - ShengYu Talk 的評價
- 關於linux sort 在 Linux 指令教學- sort , uniq - YouTube 的評價
- 關於linux sort 在 linux/sort.c at master · torvalds/linux - GitHub 的評價
- 關於linux sort 在 how can i sort in bash the first column but ignore any other ... 的評價
- 關於linux sort 在 How to sort this output 1,10,11..2 - Unix & Linux Stack Exchange 的評價
linux sort 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
ข่าวลือที่เป็นจริง ...เมื่อ Ubuntu จะมาอยู่บนวินโดวส์ ข่าวดีสำหรับนักพัฒนาซอฟต์แวร์บนวินโดวส์ โดยเฉพาะ (น้ำตาจะไหลดีเปล่าเนี่ย)
ที่ประชุมงาน BUILD 2016 ไมโครซอฟต์ประกาศ Windows 10 ตัวอัพเดตใหม่ (เรียกว่า Anniversary Update) จะสามารถรัน Bash (Shell script) ของ Linux เป็นแบบ Native ใน cmd.exe ของวินโดวส์ได้แล้วจ้า!!!!
+++++ต่อไปเราก็จะทำได้ดังนี้+++++
1) มียูสเซอร์บน Windows 10
2) เปิด Start menu ขึ้นมา
3) พิมพ์คำว่า bash แล้วกด Enter
4) เมื่อนั้นคอนโซลในตำนานที่เรารู้จักกันดีอย่าง cmd.exe ก็จะโผล่ขึ้นมา
5) สามารถรันคำสั่ง /bin/bash
6) เมื่อนั้น User space ของ Ubuntu ก็จะได้สิทธิเต็มที่
7) ต่อไปเราก็สามารถใช้คำสั่งพวกนี้้ได้ apt, ssh, rsync, find, grep, awk, sed, sort, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch…
8) นั้นหมายความว่า หลายหมื่นกว่าแพคเก็จไบนารี่ของ Ubuntu สามารถเอามาติดตั้งได้ ...โอ้พระเจ้าทอดกล้วยปิ้ง
++++ต้องเข้าใจอย่างนี้ว่า++++
- มันไม่ใช่ virtual machine
-ไม่ใช่ Container
-ไม่ใช่ Cygwin
-ไม่เหมือนตัว Linux emulator
*มันเป็นเพียง Ubuntu user space
*มันเป็นเพียงไบนารี่แบบ Native ของ Ubuntu ที่รันได้โดยตรงในวินโดวส์
*และไมโครซอฟต์ก็เรียกว่าเป็น Windows Subsystem สำหรับ Linux
+++++ในข่าวมันยังบอกอีกว่า++++
- เราสามารถ mount เห็นระบบไฟล์ของ Ubuntu ได้ด้วยนะ จาก Windows Explorer
- จะพิมพ์คำสั่ง ssh ต่อเน็ตเวิร์คออกไปข้างนอกก็ได้ โดยไม่ต้องพึ่งโปรแกรม Putty
- สามารถใช้ apt ติดตั้ง และอัพเกรตอะไรก็ได้ ตามที่อยากได้
ถ้าสนใจจะอ่านรายละเอียดอ่านเพิ่มได้ที่ (แปลและเรียบเรียงใส่สีตีเข่ามาอีกที)
https://insights.ubuntu.com/…/ubuntu-on-windows-the-ubuntu…/
linux sort 在 紀老師程式教學網 Facebook 的最佳解答
您所不知道的 Linux 指令!
您對 Linux 指令熟嗎?不管您熟不熟,這裡有讓你嚇一跳、意想不到的 Linux 指令用法喔!
它的排序方法是按照投票數,有點像你覺得一個指令很酷、很讚,你對它按「讚」,然後它的名次會一直往上爬這樣。排名第一的是「sudo !!」這個指令喔!這個指令會把最近一次你執行的指令再跑一遍,不過這一次會幫你加上「sudo」。很適合那些「該加 sudo,你卻忘了加 sudo」的場合使用,尤其是那個該加 sudo 的指令又臭又長時,您應該不會想再打一遍吧?「sudo !!」這時候就可派上用場囉!很棒吧!
點進去還有其他也很棒的指令。希望各位學會後,在其他人面前使出來得到讚歎聲喔!
http://www.commandlinefu.com/commands/browse/sort-by-votes
linux sort 在 在地上滾的工程師 Nic Youtube 的最讚貼文
硬核的知識也許不是每個工程師都能夠在職涯發展中完全運用到,但無論是本科系、轉職、自學成為工程師的朋友,都應該要知道,這些紮實的背景知識提早學習起來,在未來的日子裡,只有好沒有壞。
就透過本影片我的真實經驗分享,告訴你這些我在大學時期看似枯燥乏味的理論,其實就是程式設計內功,而日後沉睡已久的內功卻又恰巧的在職涯旅途中碰上用處。
章節:
00:00 學這些有用嗎
00:52 我與速成班的距離
04:45 業務增長後的影響
06:36 基本功知識科普
喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘
━━━━━━━━━━━━━━━━
⭐ 蝦皮賣場: https://shopee.tw/bboyceo
⭐ instagram (生活日常): https://www.instagram.com/niclin_tw/
⭐ Facebook (資訊分享): https://www.facebook.com/niclin.dev
⭐ Blog (技術筆記): https://blog.niclin.tw
⭐ Linkedin (個人履歷): https://www.linkedin.com/in/nic-lin
⭐ Github: https://github.com/niclin
⭐ Podcast: https://anchor.fm/niclin
━━━━━━━━━━━━━━━━
🌟 任何問題或合作邀約信箱: niclin0226@gmail.com
#資料結構 #演算法 #計算機概論 #前端 #後端 #工程師
linux sort 在 prasertcbs Youtube 的最佳解答
การเรียงลำดับภาษาไทยตามพจนานุกรม โดยใช้ pyuca package ที่ทำงานได้บน Windows, OS X และ Linux
===ดาวน์โหลดไฟล์ตัวอย่างได้ที่ http://goo.gl/wTQwAI
============
playlist สอนภาษาไพธอน Python เบื้องต้น
https://www.youtube.com/watch?v=DI7eca5Kzdc&list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
============
playlist สอนภาษาไพธอน Python การเขียนโปรแกรมเชิงวัตถุ (OOP: Object-Oriented Programming)
https://www.youtube.com/watch?v=4bVBSluxJNI&list=PLoTScYm9O0GF_wbU-7layLaSuHjzhIRc9
============
playlist สอนภาษา R เบื้องต้น
https://www.youtube.com/watch?v=oy4qViQLXsI&list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVICp
============
playlist สอนภาษาจาวา Java เบื้องต้น
https://www.youtube.com/watch?v=O3rW9JvADfU&list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
============
playlist สอนการเขียนโปรแกรมเชิงวัตถุด้วย Java เบื้องต้น
https://www.youtube.com/watch?v=zC_0xOSX1dY&list=PLoTScYm9O0GEvHKqqib-AdVFwVe_2ln8W
============
playlist สอนการทำ Unit Test ภาษาจาวา Java
https://www.youtube.com/watch?v=R11yg8hKApU&list=PLoTScYm9O0GHiK3KNdH_PrNB0G3-kb1Bi
============
playlist สอนภาษา C เบื้องต้น
https://www.youtube.com/watch?v=Z_u8Nh_Zlqc&list=PLoTScYm9O0GHHgz0S1tSyIl7vkG0y105z
============
playlist สอนภาษา C# เบื้องต้น
https://www.youtube.com/watch?v=hhl49jwOIZI&list=PLoTScYm9O0GE4trr-XPozJRwaY7V9hx8K
============
playlist สอนภาษา C++ เบื้องต้น
https://www.youtube.com/watch?v=_NHyJBIxc40&list=PLoTScYm9O0GEfZwqM2KyCBcPTVsc6cU_i
============
playlist สอนภาษา PHP เบื้องต้น
https://www.youtube.com/watch?v=zlRDiXjYVo4&list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
============
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่
https://www.youtube.com/subscription_center?add_user=prasertcbs
linux sort 在 Linux 指令教學- sort , uniq - YouTube 的推薦與評價
熱愛Python 以及 Linux , 希望透過寫程式為社會貢獻,喜歡拍程式教學影片幫助想學習的人。 ... <看更多>
linux sort 在 linux/sort.c at master · torvalds/linux - GitHub 的推薦與評價
SPDX-License-Identifier: GPL-2.0. /*. * A fast, small, non-recursive O(n log n) sort for the Linux kernel. *. * This performs n*log2(n) + 0.37*n + o(n) ... ... <看更多>
linux sort 在 Linux sort 排序用法與範例 - ShengYu Talk 的推薦與評價
本篇ShengYu 介紹Linux sort 排序用法與範例。 Linux sort 指令將檔案內容排序假設有個檔案內容input.txt,需要將它排序,檔案內容如下,由數字所組成 ... ... <看更多>