2016/04/18

建立一個 postgresql 帳號 with MADLIB 的範例:


以 http://ooxx.db.com.tw/phpPgAdmin/  phpPgAdmin 當範例
 建立一個 postgresql 帳號 with MADLIB 的範例



(1) 因為系統內已經有個 hadoop 帳號建立 MADLIB 的函數
以這個當範本就可以. 否則重新匯入需要 super user 帳號會很不方便。
如果需要重新建立,請參考  http://blog.jangmt.com/2016/04/madlib-postgresql-94-in-linux.html 文章設定。


(2) 建立的 SQL 範例 , 需要一行一行填入. 預設不允許多行一起進入 sql
-- 建立使用者
CREATE USER 帳號 WITH PASSWORD '密碼';
-- 建立資料庫
CREATE DATABASE 帳號(同DB) WITH OWNER 帳號 ENCODING 'UTF8' TEMPLATE hadoop;
-- 註解 DB , 方便找人
COMMENT ON DATABASE 帳號 IS '使用者資訊註解';
-- 授權
GRANT ALL PRIVILEGES ON DATABASE 帳號 to 帳號(同DB);

(3) sql 範例如下:
CREATE USER b004021234 WITH PASSWORD '1234atl1234';
CREATE DATABASE b004021234 WITH OWNER b004021234 ENCODING 'UTF8' TEMPLATE hadoop;
COMMENT ON DATABASE b004021234 IS '蔡ooxx 0926123456';
GRANT ALL PRIVILEGES ON DATABASE b004021234 to b004021234;

(4) 如果要一次建立很多人,那就以此範本寫成批次處理就可以。


REF:
http://blog.jangmt.com/2016/04/madlib-postgresql-94-in-linux.html 
http://madlib.incubator.apache.org/

2016/04/16

更換家用抽水馬達紀錄

更換家用抽水馬達紀錄(以加壓馬達替代) ,身為一個專業的 IT 人員,更換一下設備也是很正常的。

昨晚洗澡到一半,突然發現水量變小了。感覺好像有點不妙,上樓檢查了一下。發現三年前安裝的那台 AQ200 馬達的電子LED沒有亮燈,但是電力 110V 有進入馬達。猜想說該不會電路板燒了巴!!!  因為水龍頭還有水只是水量沒有加壓,且已經很晚了就先這樣隔天早上在處理。到了更晚的時候發現不是水量變小,是整個沒水了。一時間無法找到原因,只能上網找找看答案。



根據官方網站的判斷,我先懷疑機器故障,隔天早上直接就去買台新的大井 HQ200 ($3000)1/4HP準備更換機器,但要換的時候才發現竟然是水塔沒水,檢查液位開關發現都沒有反應,手動開關還是無法出水。

開始懷疑是樓下抽水馬達的問題,馬上再去換了台大井 HQ400 ($3500)1/2HP的機器。原本這台 木川KQ400 前幾天聽他的馬達生,就感覺怪怪的要轉不轉的。

抽水馬達 木川KQ400 ,左方開關為連接到水塔的液位開關。

先確認電力有進入,但馬達不能動作。google查了很多人的狀況,都說可能是壓力感應開關有問題,所以我先依據網路上的教學,拔除開關 Q 這條線,以一字起直接將兩個 pin 測試短路,但還是無法啟動,所以就懷疑應該是馬達真的掛了,用了快 10 年掛掉應該也合理啦。

測試是否為KQ400 的壓力感應開關故障

新品 大井 HQ400
很重要:更換前,請先把抽水馬達的電源開關,從開關箱處關閉。

直接拆掉舊有的 KQ400 ,管口、固定位位置幾乎都一樣。

現在的電壓選擇變得更方便了,直接一個開關就決定 110V or 220V 了。

再把110V電力接上去就可以,安裝前記得先打開自來水公司的來源水閘,上方水管是往水塔打水。左方開關是接到頂樓水塔的液位開關,頂樓液位開關滿水位關閉,馬達沒電也就不會啟動了。
注水塞


後記:
1. 下方水管閘閥為自來水公司的水,直接打開就有水了更換前記得要關閉。

2. 送電前先把機器上面的注水塞打開,注滿水。也可以打開下方水管閘閥注水,這樣比較快。

3. 送電後,試著旋開 1/4 注水塞,看有沒有水噴出來,有噴出來表示抽水正常運作。

4. 因為是水塔整個沒水,所以需要等個 30 ~ 90 分鐘,等水塔裝滿後並送水到水管內。一開始水管內因為之前水都流光了,所以剛開水會有些空氣或是濁水(水塔沒洗),水量很小。

5. 當水塔打滿水,水管注滿水後,原本加在頂樓的 AQ200 加壓馬達就回復工作了,我想這可能是它之前水壓不足自動保護休息了!!!!

6. 還好這次沒有爆水管,只是找問題花了一些時間。換完馬達後等待一段時間就正常了。

7. 如果仔細看大井的說明,發現這次的抽水馬達型號還是加壓馬達用途,我猜測應該是大家為了安全,寧可使用這種有自動保護裝置的加壓馬達,避免自來水公司停水,然後馬達還傻傻的轉到燒掉巴。



延伸閱讀:
第二次更換加壓馬達AQ200 http://blog.jangmt.com/2013/03/2.html
第一次更換加壓馬達及爆水管更換 http://blog.jangmt.com/2010/02/diy.html




2016/04/01

Postgresql 上面的「尿布、啤酒、星期五」,不用寫程式下行 SQL 就搞定


MADlib + postgresql 9.4 in Linux CentOS 7
MADlib®: Big Data Machine Learning in SQL for Data Scientists

啤酒、尿布、星期五


MADlib 在 postgresql 上面以是以 postgres 函式的型態來實現對於數據資料的操作,你可以透過這個以 plpython 語言寫的函式,直接操作原始數據轉存到新的資料庫當中,這個函式庫支援很多機器學習的演算法,可以很方便的分析數據. 目前提供的有底下這些,看起來應該有陸續發展的可能,因為已經被放到 Apache 基金會的子項目計畫內了...XDXD

功能:
Classification 分類
Regression 回歸
Clustering 集群
Topic Modeling 主題模型
Association Rule Mining 關聯性規則
Descriptive Statistics 描述性統計
Validation 驗證

more... http://madlib.net/product/


官方網站 http://madlib.net/

我使用來安裝的版本是 CentOS Linux 7 ,但是安裝這個 LIB 前請先選擇一套支援的資料庫系統,這裡我用的是 Postgresql 9.4 的版本,安裝請參考這一篇:
http://blog.jangmt.com/2016/03/postgresql-94-in-centos-linux-7.html

下載 http://madlib.net/download/

安裝
[root@c7 ~]#  yum install madlib-1.8-Linux.rpm  -y

檢查是否裝了,安裝好後他的路徑放在 /usr/local/madlib/
[root@c7 ~]# rpm -qa | grep madlib
madlib-1.8-1.x86_64


我使用 Single Node 的模式,系統需求:( HAWQ >= 1.2, Greenplum >= 4.2 or PostgreSQL >= 9.2 )

在安裝後,這特 MADlib 必須搭配資料庫才可以使用,所以必須做一個匯入函式到資料庫的動作。

madlib 是 PostgreSQL 的自訂函數  ,它會透過 plpython2 在 postgresql 內產生自訂的函式。

centos7 預設安裝沒裝 plpython2 ,補安裝
[root@c7 ~]# yum install postgresql94-plpython -y
# 安裝好後,透過 madpack 將建立好的個人資料庫,匯入成為 postgresql 的函式。
# 由於此 lib 支援兩種的資料庫(postgres or Pivotal Greenplum) ,但這裡以 postgres 為主
# 安裝語法: madpack install -s madlib -p 資料庫種類 -c 帳號@主機:5432/資料庫
# 建議使用者,一人一個帳號,一個資料庫彼此的獨立,這樣才不會相互干擾。底下這個範例,我已經建立了一個個人的帳號及資料庫了。
# 帳號:  mtchang
# 主機:  127.0.0.1
# 資料庫:  mtchang

[mtchang@c7 ~]$ /usr/local/madlib/bin/madpack install -s madlib -p postgres -c mtchang@127.0.0.1:5432/mtchang
Password for user mtchang:  ooxx
madpack.py : INFO : Detected PostgreSQL version 9.4.
madpack.py : INFO : *** Installing MADlib ***
madpack.py : INFO : MADlib tools version    = 1.8 (/usr/local/madlib/Versions/1.8/bin/../madpack/madpack.py)
madpack.py : INFO : MADlib database version = None (host=127.0.0.1:5432, db=mtchang, schema=madlib)
madpack.py : INFO : Testing PL/Python environment...
madpack.py : INFO : > Creating language PL/Python...
madpack.py : INFO : > PL/Python environment OK (version: 2.7.5)
madpack.py : INFO : Installing MADlib into MADLIB schema...
madpack.py : INFO : > Creating MADLIB schema
madpack.py : INFO : > Creating MADLIB.MigrationHistory table
madpack.py : INFO : > Writing version info in MigrationHistory table
madpack.py : INFO : > Creating objects for modules:
madpack.py : INFO : > - array_ops
madpack.py : INFO : > - bayes
madpack.py : INFO : > - crf
madpack.py : INFO : > - elastic_net
madpack.py : INFO : > - linalg
madpack.py : INFO : > - pmml
madpack.py : INFO : > - prob
madpack.py : INFO : > - quantile
madpack.py : INFO : > - sketch
madpack.py : INFO : > - svd_mf
madpack.py : INFO : > - svec
madpack.py : INFO : > - tsa
madpack.py : INFO : > - conjugate_gradient
madpack.py : INFO : > - data_profile
madpack.py : INFO : > - lda
madpack.py : INFO : > - stats
madpack.py : INFO : > - svec_util
madpack.py : INFO : > - utilities
madpack.py : INFO : > - assoc_rules
madpack.py : INFO : > - cart
madpack.py : INFO : > - convex
madpack.py : INFO : > - glm
madpack.py : INFO : > - kernel_machines
madpack.py : INFO : > - linear_systems
madpack.py : INFO : > - recursive_partitioning
madpack.py : INFO : > - regress
madpack.py : INFO : > - sample
madpack.py : INFO : > - summary
madpack.py : INFO : > - kmeans
madpack.py : INFO : > - pca
madpack.py : INFO : > - validation
madpack.py : INFO : MADlib 1.8 installed successfully in MADLIB schema.

# 這樣就完成了!!!!

# 來個範例試試看 ,我找了一下看到了 Association rules ,這個比較熟悉所以使用這個當練習。
參考:http://doc.madlib.net/latest/group__grp__assoc__rules.html#examples

(1) 先由 SQL 匯入一些資料看看

DROP TABLE IF EXISTS test_data;
CREATE TABLE test_data (
    trans_id INT,
    product TEXT
);
INSERT INTO test_data VALUES (1, 'beer');
INSERT INTO test_data VALUES (1, 'diapers');
INSERT INTO test_data VALUES (1, 'chips');
INSERT INTO test_data VALUES (2, 'beer');
INSERT INTO test_data VALUES (2, 'diapers');
INSERT INTO test_data VALUES (3, 'beer');
INSERT INTO test_data VALUES (3, 'diapers');
INSERT INTO test_data VALUES (4, 'beer');
INSERT INTO test_data VALUES (4, 'chips');
INSERT INTO test_data VALUES (5, 'beer');
INSERT INTO test_data VALUES (6, 'beer');
INSERT INTO test_data VALUES (6, 'diapers');
INSERT INTO test_data VALUES (6, 'chips');
INSERT INTO test_data VALUES (7, 'beer');
INSERT INTO test_data VALUES (7, 'diapers');


(2) 先建立一個 myschema 的 schemas(模式),再來執行下面的指令。



(3) 使用 Association rules 函式庫
# 關聯性規格則請參考這一篇: http://blog.jangmt.com/2015/10/fpgrowth-algorithm.html
# 函式用法:
assoc_rules_results assoc_rules (
float8 support, (支持度)
float8 confidence, (信心)
text tid_col, 欄位 tid
text item_col, 欄位 item
text input_table, (來源資料表格)
text output_schema, (運算後輸出的 schema)
boolean verbose 有沒有 comments
)
# 範例:
SELECT * FROM madlib.assoc_rules( .25,.5,'trans_id','product','test_data','myschema',TRUE);



(4) Association rules 針對 test_data 產生的結果
# 產生的結果,會放在 myschema 內,也可以用這個 sql 來觀看
# sql 觀看結果
SELECT * FROM myschema.assoc_rules ORDER BY support DESC;



更多閱讀:
官方的安裝手冊 https://github.com/madlib/madlib/wiki/Installation-Guide
Association rules 函式庫 http://doc.madlib.net/latest/assoc__rules_8sql__in.html