ref: https://cmdchallenge.com/#/hello_world
今天分享的是一個有趣的 Command Line Interface(CLI) 挑戰,該挑戰主要是基於 Linux bash 的環境有一系列的指令挑戰
挑戰內容基本上都不會太困難,一開始都是非常基礎的 Linux 指令操作,後面會需要使用 grep, sed, awk, find 等不同指令的組合來完成任務。
大部分的題目都會基於一些情境,譬如想要針對 httpd server 底下的 log 進行過濾,計算符合某些內容的行數等等
每道題目除了自行挑戰外也可以看一下別人的解決方案,不過解決方案中有一些是作弊的內容,譬如直接針對題目用 echo 輸出之類的,就滿搞笑的。
我認為這類型的挑戰有兩個值得去玩看看的理由
1. 測試自已是否能夠解決每一個問題,順便看一下自己的解決方式跟別人的比起來如何,有時候會有一些意想不到的指令與用法可以讓整個寫法更為簡潔
2. 如果有面試需求的時候,可以考慮從這邊找一些相關題目,看看面試者對於 shell script 的熟悉度,同時互相討論每個解法的好壞處。
歡迎愛寫 shell script 的人都寫一遍看看
同時也有1部Youtube影片,追蹤數超過4萬的網紅阿宅爸爸,桐心協力過生活!,也在其Youtube影片中提到,《簡單輕鬆DIY》其他影片 https://tinyurl.com/y64ae57n 訂閱阿宅爸爸的影片 https://tinyurl.com/y9w99rf6 =========================== Mac外接硬碟突然讀不到的救法, 今天打開電腦,存影片的硬碟突然消失了, 線什麼...
grep指令 在 Kewang 的資訊進化論 Facebook 的最佳貼文
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
grep指令 在 Kewang 的資訊進化論 Facebook 的最讚貼文
Ruby 2.3 版的發佈,新增了錯字校正的功能,比如原本要打成 method 卻打成了 methosd,此時 2.3 內建的 did_you_mean 這個 gem 會提示你是否打錯字了。
而台灣的 Ruby 開發者 tonytonyjan 所做的測試程式也無意間被 merge 回 2.3 的主線了。
而執行下面指令之後,等一下子就會看到馬英九跟勝文出現在你的螢幕上囉 XD
$ curl -s https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz | tar -xz
$ grep -hr -C 3 馬英九 ruby-2.3.0
grep指令 在 阿宅爸爸,桐心協力過生活! Youtube 的最佳貼文
《簡單輕鬆DIY》其他影片 https://tinyurl.com/y64ae57n
訂閱阿宅爸爸的影片 https://tinyurl.com/y9w99rf6
===========================
Mac外接硬碟突然讀不到的救法,
今天打開電腦,存影片的硬碟突然消失了,
線什麼的都沒動到,
花了半天急得像熱鍋上的螞蟻,
最後找到辦法有驚無險的解決了.
影片中參考部落格的連結在這邊
https://tinyurl.com/rpj2s36
(不是我寫的..感謝寫這個部落格的人,實測有效!)
為避免部落格以後失效,
把重點簡單整理一下.
1.開 terminal 輸入指令
ps aux | grep fsck
2.若有看到如下結果:
root 2398 2.6 0.1 4352836 11660 ?? Us 10:02下午 0:02.31 /System/Library/Filesystems/exfat.fs/Contents/Resources/fsck_exfat -y -x /dev/rdisk3s2
表示 rdisk3s2 現在被 fsck_exfat 指令給佔用了,故狀態為忙碌中,無法 mount.
解決方式: 砍掉該 process:
3.sudo kill -9 {pid}
{pid} 就是root後面的數字, 以步驟2為例就是2398
只要用Mac,未來應該還有很大的機會遇到...
把心得紀錄下來,希望對其他也遇到這個問題的人有幫助.
===========================
拍攝工具:
GoPro Hero 8
Sj8 Pro
Panasonic Lumix DMC-GF3
SONY RX100M5A
===========================
剪輯工具:
iMovie
final cut pro
===========================
合作邀約:
kirafu@gmail.com
===========================
幸福有沒有在我身邊,怎麼一直看不見~
爸爸說幸福就在鏡子裡,那就是我快樂的臉~