發表文章

目前顯示的是 2015的文章

php7 vs. GO lang vs. C on CentOS 7 Linux 速度比較

圖片
php7 vs. GO lang vs. C on CentOS 7 Linux 速度比較 繼上一篇後,想說 php7 已經很快了,但是到底和原生 C 差多少..... 所以就抓了php7 , GO 及 C 三種語言來比較看看氣泡演算法, 12 各項目排序 90萬次花費的時間。 結論: PHP7 ==>  5.9242088794708 s GO  ==>  0.228.885223 s C ==> 0.174889 s 換算一下, ms, us 的單位, 結論是 php7 連 GO 和 C 的車尾燈都看不到... GO 還可以看得到C 的車尾燈!!!!! 且 GO 比 C 好寫多了,我可以接受這一點點的微小差距。 有圖有真相.... C bubble sort 演算法  http://www.programmingsimplified.com/c/source-code/c-program-bubble-sort C 計算時間差 http://www.binarytides.com/get-time-difference-in-microtime-in-c/ php 及 go 的程式碼 https://jaxbot.me/articles/benchmarks_nodejs_vs_go_vs_php_3_14_2013 別人做的 php vs go https://www.ransona.com/blog/2014/11/06/go-vs-php-performance-restful-service/

升級 php7 可以不用急著換電腦.....!!!! on CentOS 7

圖片
升級 php7 可以不用急著換電腦.....!!!! on CentOS 7 Linux 先講結論: 升級前  2.767 sec 升級後  0.88 sec ---------------------- 速度增加了 3.14 倍 ,這台是 Intel Core I5 CPU, RAM 4GB 的個人PC。 更新可以參考 這篇文章 , CentOS 6 OR CentOS 7 都可以更新。 https://webtatic.com/packages/php70/  但是要注意,如果你的 Linux 系統已經有安裝第三方套件,或手動安裝的請小心更新後會毀掉。我的是都用官方的套件及 EPEL更新,直接上去沒有發生大的問題資料也都存在。 另外如果你有自行開發的程式,也需要注意套件的相容性,再行安裝。 測試程式,我是抓   http://www.php-benchmark-script.com/ 這個測試程式。 程式沒有針對平行化、I/O 這些評估,但已經明顯看得出差異。

感謝這個時代有手機及社群網站這樣方便的東西

圖片
因為社群網站,讓以前可能只有少數人得到的驚喜,透過社群的傳播讓大家都可以看到 JJ Lin 和友人在信義區逛街,聽到人在唱他的歌,主動上前與對方合唱《 江南 》後半段。 這個影片把兩個時間軸放在一起,就可知道社群媒體是傳播成功很大的主因,一下子就爆炸開了!! 紅髮艾德 在拜訪加拿大商場時,聽到有個女生唱他的歌,決定加入那個女生唱的正是紅髮艾德的成名曲之一 「放聲思考」(Thinking out loud) Steven Tyler ,史密斯樂團(Aerosmith) 主唱在莫斯科街頭和街頭藝人合唱他的成名曲之一 I Don't Want To Miss A Thing (我不願錯過這一切) 但是這樣的亂入要有幾個條件, 第一要件是一定要是原唱者 歌聲要能有第一句就能夠吸引聽眾 再來是,街頭上的這個人不能太弱,否則會完全被搶掉 最好在加上個故事,可以讓這個事蹟快速發酵傳播 最後最重要的是,環境不能太糟糕,否則即使是 Steven Tyler 這種等級的,一樣弱掉。 這個也是 Steven Tyler 亂入,但是環境條件不是很好所以效果不是很好。 另外,不要只發在 FB 因為它不容易分享,用 youtube or 其他不限制的影音平台才可以方便的分享。另外,多看幾個影片發現手機等級差很多。有的手機畫面還真棒.....

鐵嘴鴴@冬候鳥

圖片
應該是鐵嘴鴴 http://today.to/tw/bird_detail.aspx?param=uHCzr3v9Y+BKYS85lcDb719dQbICBYB3XxjvRyH6nfyiy2VSuMEe9V9zZSkZcQS73PwCOjzPS6WC8jGyT5LUPQ==-CIMh8RAnNos=  2015.11.13  @九番埤濕地旁

鷹斑鷸@冬侯鳥

圖片
基本資料請參考: 玉山國家公園,基本鳥類資料 http://bynp.ysnp.gov.tw/birdtable.php?birdno=107&nosort=39 鷸鴴科鳥類辨識 http://www.kwbs.org.tw/magazine/data/288/P26-28.pdf?PHPSESSID=4e2310d43c68bd64dea22d4d02995a8d 中華野鳥協會資料 http://www.bird.org.tw/index.php/2011-09-04-15-41-22/2011-09-05-06-58-10/632-4-2-3-16 2015.11.13 at 高雄九番埤濕地公園旁

Apache Spark 測試 FPGrowth(傳統C語言與Spark 的簡易測試)

圖片
因為剛剛把 Apache 的 Spark 設定好,順便驗證測試看看效能如何? 剛好發現 Spark 的 MLLIB 內有內建的 FPGrowth 演算法 ,剛好跟它有點熟所以就用這個演算法加上網路上的資料來測試看看。 先講結論:資料量小,不利於使用巨量資料工具。 關於 fpgrowth 演算法請先參考這篇: http://blog.jangmt.com/2015/10/fpgrowth-algorithm.html 底下紀錄測試的過程,及使用的參數。 測試運算資料來源: http://fimi.ua.ac.be/data/ Frequent Itemset Mining Dataset Repository--- LAB (1) Christian Borgelt 寫的 C 語言程式 FPGrowth 對上 Spark scala fpgrowth 程式 --- # FPGrowth 先把 -m1 同時出現的SET設為1個,支持度 5 ,信任度為 80%(default) # 這個案例花費了 0.09s 運算了 0.01s [hadoop@hnamenode FrequentItemset]$ ./fpgrowth -m1 -s5 T10I4D100K.dat T10I4D100K.out.txt ./fpgrowth - find frequent item sets with the fpgrowth algorithm version 6.7 (2015.08.18)         (c) 2004-2015   Christian Borgelt reading T10I4D100K.dat ... [870 item(s), 100000 transaction(s)] done [0.09s]. filtering, sorting and recoding items ... [10 item(s)] done [0.00s]. sorting and reducing transactions ... [281/100000 transaction(s)] done [0.01s]. writing T10I4D100K.out.txt .....

關聯規則--用來發現資料中屬性具有高度關聯的樣式(fpgrowth algorithm)

圖片
這篇不是要講很艱深的東西,簡單解釋一下啥事關聯規則。 基本上上面這張購物欄交易資料,透過底下的 apriori 演算法程式,可以找到啤酒和尿布具有很大的相關性,他的支持度高達 50 。 故事請看這裡 。這是個範例,只是說明關聯規則程式可發覺這樣形式的規則關聯樣式。 在網路上有個人  Christian Borgelt 寫了很多程式,其中有 apriori 和 fpgrowth ,基本上這兩個程式做的工作差不多,但是 fpgrowth 有效率多了。 所以今天用這個 fpgrowth 程式來跑跑看數據。 我從: http://fimi.ua.ac.be/data/ Frequent Itemset Mining Dataset Repository 抓了很多資料 http://fimi.ua.ac.be/data/T10I4D100K.dat http://fimi.ua.ac.be/data/T40I10D100K.dat http://fimi.ua.ac.be/data/webdocs.dat.gz 放到我的電腦內,然後去找 Christian Borgelt http://www.borgelt.net/fpgrowth.html  抓了一些程式。 大概長的這樣: [hadoop@hnamenode FrequentItemset]$ ls -la -rwxrwxr-x. 1 hadoop hadoop      486760 Sep  5 05:17 fpgrowth -rw-rw-r--. 1 hadoop hadoop     4022055 Oct 14  2010 T10I4D100K.dat -rw-rw-r--. 1 hadoop hadoop    15478113 Oct 14  2010 T40I10D100K.dat -rw-rw-r--. 1 hadoop hadoop         151 Oct 17 23:15 webdocs.out 有個很簡單的檔案  sample_fpgr...

Hadoop HDFS 上傳檔案速度測試

因為不太清楚 Hadoop HDFS 在傳輸檔案的速度,所以寫了一個小程式來測試 HDFS 上傳檔案的速度。 先講結論 :hdfs 大概會花3秒的時間做協調的傳輸工作,所以大約 1MB 左右的時間都是 3 秒。傳輸的檔案越大,速度越快。 結果整理如下: 容量      傳輸時間  平均速度(MBytes) 110K 3 36KB/S 1.1MB 3 375KB/S 10.7MB   4 2739.2KB/S --> 2.675MB 107.1MB   9   11.9MB/S 1.0GB   23 44.521MB/S 11GB   216 52.148MB/S 過程及程式測試 shell script [hadoop@hnamenode input]$ cat run_put.sh #!/bin/bash ARGC1='input.txt' ARGC1=$1 if [ "ARGC1" != "" ]; then PROG_START=$(date +%s) hdfs dfs -put ${ARGC1} /public/data/ PROG_END=$(date +%s) PROG_DURING=$(expr $PROG_END - $PROG_START) echo "上傳 ${ARGC1} 檔案到 HDFS:/public/data/ 目錄下" echo "花費時間: ${PROG_DURING} 秒" hdfs dfs -ls -h /public/data/${ARGC1} fi [hadoop@hnamenode input]$ ls -alh total 12G drwxrwxr-x. 2 hadoop hadoop 4.0K Oct 17 13:23 . drwxrwxr-x. 4 hadoop hadoop 4.0K Oct  4 00:26 .. -rw-rw-r--. 1 hadoop hadoop  11G Oct  1 22:33 input100K.txt ...

chrony 網路對時服務

---- chrony 網路對時服務 ---- NTPd 套件在 CentOS 7 以後,逐漸被棄用了。改成 chrony 套件提供服務 # 安裝 chrony 移除 ntp ,並啟動服務 yum remove -y ntp yum install -y chrony systemctl start chronyd.service systemctl enable chronyd.service # 驗證程序是否工作 [root@hnamenode ~]# systemctl status chronyd.service chronyd.service - NTP client/server    Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)    Active: active (running) since Sat 2015-10-10 15:57:08 CST; 23h ago  Main PID: 886 (chronyd)    CGroup: /system.slice/chronyd.service            └─886 /usr/sbin/chronyd -u chrony Oct 10 15:57:08 hnamenode.cm.nsysu.edu.tw systemd[1]: Starting NTP client/server... Oct 10 15:57:08 hnamenode.cm.nsysu.edu.tw chronyd[886]: chronyd version 1.29.1 starting Oct 10 15:57:08 hnamenode.cm.nsysu.edu.tw chronyd[886]: Linux kernel major=3 minor=10 patch=0 Oct 10 15:57:08 hnamenode.cm.nsysu.edu.tw chronyd[886]: hz=100 shift_hz=7 freq_scale=1.00000000...

R in HADOOP - install

R in HADOOP - install ---------------- 就是再 R 透過 lib 呼叫 HADOOP 的 api 跑 hdfs 及 mapreduce 程式 ------ Step 0 : 先把 hadoop 的系統環境變數確認,可以用 env 看到底下設定的環境變數 ------ # 底下為我設定的範例,請以你的 hadoop env 路徑修改 [root@hdatanode17 ~]# cat .bash_profile   # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH # ---------------------------------------------- # HADOOP ENV # ---------------------------------------------- #JAVA export JAVA_HOME=/usr/java/latest export JRE_HOME=/usr/java/latest/jre # HADOOP export HADOOP_PREFIX=/home/hadoop/hadoop export HADOOP_HOME=$HADOOP_PREFIX export HADOOP_COMMON_HOME=$HADOOP_PREFIX export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop export HADOOP_HDFS_HOME=$HADOOP_PREFIX export HADOOP_MAPRED_HOME=$HADOOP_PREFIX export HADOOP_YARN_HOME=$HADOOP_PREFIX export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx1g...

Linux Bash Shell for and loop (迴圈)

Linux Shell 上常用的 for in 迴圈結構,可以幫忙很多工作。 ---- for in 迴圈及結構 ---- # 帶入變數內容的迴圈,自訂字串 [mtchang@c7 linux_shell]$ vim for.sh #!/bin/bash for VAR in file1 file2 file3 do echo $VAR done # 設定可以執行權 [mtchang@c7 linux_shell]$ chmod +x for.sh  # 執行 [mtchang@c7 linux_shell]$ ./for.sh  file1 file2 file3 ---- for in 迴圈及結構,搭配程式執行結果 ---- # 將某個檔案或是程式執行的結果,帶入 for 迴圈內。 [mtchang@c7 linux_shell]$ head /etc/passwd | cut -f 1 -d: root bin daemon adm lp sync shutdown halt mail operator $ 使用 $() 將程式結果變成變數內容 [mtchang@c7 linux_shell]$ cat for_fileread.sh  #!/bin/bash for VAR in $(head /etc/passwd | cut -f 1 -d:) do echo $VAR done # 執行 [mtchang@c7 linux_shell]$ ./for_fileread.sh  root bin daemon adm lp sync shutdown halt mail operator ---- for in 進階的新功能 ---- # 程式 [mtchang@c7 linux_shell]$ cat for_adv.sh  #!/bin/bash for i in {1..5} do    echo "for loop 產生 1-5 目前內容為 $i " done echo 'Bash V4.0+ 功能 {START..END.....

使用 Spine 加速 Cacti 的輪循裝置速度

圖片
---- 使用 Spine 加速 Cacti 的輪循裝置速度 ---- http://www.cacti.net/spine_info.php Spine, formerly Cactid, is a poller for Cacti that primarily strives to be as fast as possible. For this reason it is written in native C, makes use of POSIX threads, and is linked directly against the net-snmp library for minmumal SNMP polling overhead. Spine is a replacement for the default cmd.php poller so you must decide if using Spine makes sense for your installation. Spine 是 Cacti 用來加入輪循的程式,使用原生的 C 及支援 POSIX 的 threads 來加入輪循主機的效率。在 Cacti 預設是使用 cmd.php 來當成 poller ,如果你有 poller 時間過長的問題可以考慮使用 spine 來處理。 你可以透過, log 檔來判斷你是否需要 spine Console -> Utilities -> View Cacti Log File 底下例子是 cmd.php 使用了 190 秒的時間,離上限 300 秒很接近了。 09/28/2015 08:25:12 PM - SYSTEM STATS: Time:190.7159 Method:cmd.php Processes:100 Threads:N/A Hosts:68 HostsPerProcess:1 DataSources:3003 RRDsProcessed:1433 這個案例就有改善的必要。 ---- spine 的安裝 ---- http://www.cacti.net/spine_install_unix.php Spine 需要底下這些 lib 如果沒裝的話,可以再補上去。 net-snmp u...

Apache HADOOP 安裝多主機(cluster)模式在 CentOS Linux 7

圖片
HADOOP 安裝多主機(cluster)模式, 首先建議你要有4台電腦以上,才會好工作。 (0) 把 OS 安裝好 此範例為 CentOS Linux 7 namenode 使用 server with GUI 的安裝選項 datanode 使用 @base @core @development 的選項 /home 目錄獨立一個分割區或硬碟,給 datanode or namenode 使用。 (1) 把所有主機的 dns name 及 hostname 設定好 [hadoop@namenode ~]$ host namenode namenode.jangmt.com has address 192.168.1.100 [hadoop@namenode ~]$ host datanode1 datanode1.jangmt.com has address 192.168.1.1 [hadoop@namenode ~]$ host datanode2 datanode2.jangmt.com has address 192.168.1.2 [hadoop@namenode ~]$ host datanode3 datanode3.jangmt.com has address 192.168.1.3 為了方便識別主機,建議將主機的名稱修改為設定的名稱 修改方式可以透過 hostnamectl 指令修改。 可以參考 http://blog.jangmt.com/2015/06/centos7-rhel7-runlevel.html  (在 CENTOS 7 的版本可以使用 hostnamectl 來改變系統 hostname) (2)  先達成每台主機可以 ssh key 認證 可以參考 http://blog.jangmt.com/2015/09/ssh-key-linux.html 基本上建議建立一個 hadoop 帳號,這個使用者為主要放置程式的使用者,同時也是 HDFS 的管理員。 然後 hadoop 可以登入 root , root 可以登入 hadoop 都無須密碼,這樣交換資料也相較容易。 [hadoop@namenode ~]$ ssh root@datanode1 ifco...

Linux Shell -- for 迴圈

Linux Shell -- for 迴圈 Linux shell 可以使用 for 迴圈傳遞固定的值內容給迴圈內部變數 基本格式為: for  變數  in 值1  值2  值3   do   echo  變數  done 執行結果會是:  值1  值2  值3   # 範例如下:複製 dl 目錄到每一台主機,主機已經先設定 ssh key 認證 [hadoop@namenode happ]$ cat sync_dl2_all.sh  #!/bin/bash ACTION=$1 if [ "$ACTION" == "all" ]; then   for N in 1 2 3   do    echo "send to datanode${N}"    RUN="rsync -av --delete-after /home/hadoop/happ/dl hadoop@datanode${N}:/home/hadoop/"    echo $RUN    #echo $RUN | sh   done   exit 0 else   echo "usage:$0 all"   exit 1 fi [hadoop@namenode happ]$ ./sync_dl2_all.sh usage:./sync_dl2_all.sh all [hadoop@namenode happ]$ ./sync_dl2_all.sh all send to datanode1 rsync -av --delete-after /home/hadoop/happ/dl hadoop@datanode1:/home/hadoop/ send to datanode2 rsync -av --delete-after /home/hadoop/happ/dl hadoop@datanode2:/home/hadoop/ send to datano...