2014年4月29日 星期二

[hadoop]hadoop 2 snapshot

[hadoop]hadoop 2 snapshot

snapshot is a point-in-time image of the entire filesystem or a subtree of a filesystem. Some of the scenarios where snapshots are very useful:
有時候我們會為當時的資料夾做一個快照,然後使用oozie的 job定時的discp 到他的cluster上備份。

要還原的時候只要把 snapshot 的檔案跟資料夾 搬到該目錄就好了。

from :
Snapshots for HDFS | Hortonworks


Step by Step Example

你可以試著操作sanpshot 的流程

  • 建立放置檔案的hdfs 資料夾
root@w0[~]{11:49}
# hadoop fs -mkdir /user/root
mkdir: Permission denied: user=root, access=WRITE, inode="/user":hdfs:hdfs:drwxr-xr-x
root@w0[~]{11:50}
# su hdfs
hdfs@w0[/root]{11:50}
$ hadoop fs -mkdir /user/root
hdfs@w0[/root]{11:50}
$ hadoop fs -chown root /user/root
root@w0[~]{11:51}
# hadoop fs -put epel-release-6-8.noarch.rpm /user/root/data

  • 設置 root/data 資料夾 可以 Snapshot
root@w0[~]{11:51}
# su -l hdfs -c "hdfs dfsadmin -allowSnapshot /user/root/data"
Allowing snaphot on /user/root/data succeeded
root@w0[~]{11:52}
# hdfs dfs -createSnapshot /user/root/data
Created snapshot /user/root/data/.snapshot/s20140429-115245.568
root@w0[~]{11:52}
# hdfs dfs -createSnapshot /user/root/data ss01
Created snapshot /user/root/data/.snapshot/ss01

  • 試著刪除該資料夾
root@w0[~]{11:52}
# hadoop fs -rm -R data
14/04/29 11:53:08 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 21600000 minutes, Emptier interval = 0 minutes.
rm: Failed to move to trash: hdfs://w0:8020/user/root/data. Consider using -skipTrash option
root@w0[~]{11:53}
# hadoop fs -rm -R -skipTrash data
rm: The directory /user/root/data cannot be deleted since /user/root/data is snapshottable and already has snapshots
root@w0[~]{11:53}
# hadoop fs -ls data
Found 2 items
-rw-r--r--   3 root hdfs         14 2014-04-29 11:51 data/aaa.txt
-rw-r--r--   3 root hdfs      14540 2014-04-29 11:51 data/epel-release-6-8.noarch.rpm

在這裡可以注意一下 在刪除 snapshot dir 會給的提示。

root@w0[~]{11:54}
# hadoop fs -ls -R -skipTrash data
-ls: Illegal option -skipTrash
Usage: hadoop fs [generic options] -ls [-d] [-h] [-R] [<path> ...]
root@w0[~]{11:54}
# hadoop fs -ls -R data
-rw-r--r--   3 root hdfs         14 2014-04-29 11:51 data/aaa.txt
-rw-r--r--   3 root hdfs      14540 2014-04-29 11:51 data/epel-release-6-8.noarch.rpm

root@w0[~]{11:54}
# hadoop fs -rm data/aaa.txt
14/04/29 11:54:47 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 21600000 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://w0:8020/user/root/data/aaa.txt' to trash at: hdfs://w0:8020/user/root/.Trash/Current

root@w0[~]{11:54}
# hadoop fs -rm data/epel-release-6-8.noarch.rpm
14/04/29 11:55:01 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 21600000 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://w0:8020/user/root/data/epel-release-6-8.noarch.rpm' to trash at: hdfs://w0:8020/user/root/.Trash/Current

root@w0[~]{11:55}
# hadoop fs -ls -R data

root@w0[~]{11:55}
# hadoop fs -ls -R data/.snapshot
drwxr-xr-x   - root hdfs          0 2014-04-29 11:52 data/.snapshot/s20140429-115245.568
-rw-r--r--   3 root hdfs         14 2014-04-29 11:51 data/.snapshot/s20140429-115245.568/aaa.txt
-rw-r--r--   3 root hdfs      14540 2014-04-29 11:51 data/.snapshot/s20140429-115245.568/epel-release-6-8.noarch.rpm
drwxr-xr-x   - root hdfs          0 2014-04-29 11:52 data/.snapshot/ss01
-rw-r--r--   3 root hdfs         14 2014-04-29 11:51 data/.snapshot/ss01/aaa.txt
-rw-r--r--   3 root hdfs      14540 2014-04-29 11:51 data/.snapshot/ss01/epel-release-6-8.noarch.rpm



[武術]週日武術班 140427 (日) 初級散手交流 螳螂拳基本六路 第一路



  • 螳螂拳基本六路 第一路


中平雙蓄式
由稍息變為立正。雙手握拳收於腰際。雙手向前伸出,掌心向上。翻掌下按。握拳收回腰際。
第一路:柱捶摔落
重心急速下沉,膝蓋彎曲,右腳實,左腳虛,上身保持正直,頭轉向左。後腿配合下沉之勢順勢衝出,呈左登山式,左手旋轉向上架,右手呈力拳擊出。左手向下摔落,右拳收回腰際。跺左腳,左腳實,右腳虛,雙腳彎曲,上身涵胸拔背(蓄勢)。左拳採手,右拳捆手,交叉置於左腰際。後腿配合下沉之勢,順勢衝出,呈右登山式。右手旋轉向上架,左手呈力拳擊出。右手向下摔落,左拳收回腰際。

from 高雄市八極螳螂武術推廣協會
http://www.pachitanglang.org.tw/file/tanglangchuan_010/



  • 初級散手交流
四個基本練習手法 衝拳回中 衝拳 消閃側身


[python]use matplotlib do 3d stacked bar chart

use matplotlib do 3d stacked bar chart

2014年4月27日 星期日

[武術]徒手療法 下肢


下肢肌肉放鬆

4 大腿前端 股四頭肌
3 大腿後端 半腱肌 半膜肌 股二頭肌
4 大腿內側 內側機群
小腿 腓長肌 比目魚肌

所以說下肢的拉筋不是只有一個動作就可以拉好,光是大腿前端就要放鬆四條肌肉。
大腿起麻就有 14 條肌肉要放鬆。



2014年4月25日 星期五

[hadoop]hadoop 2 commission and decommission


在hadoop 的cluster 中,可能想要移除或者是新增新的節點進去。
(在hadoop 2.0 可能是想加入新的datanode or Node manger daemon,也就是slave node。)

如果再新增新的機器進入 cluster 中,這個過程被稱作 "commission"。
有時候,我們的datanode空間不夠了,再加入新的node後,我們會做 rebalance datanode的操作,確保資料可以在集群中資料平衡的分佈。(由此可知,會耗掉部分的頻寬,可以透過參數設定balance使用的頻寬大小。)

commission

Step
1.把新的節點加入 namenode的 dfs.include file中 (/etc/hadoop/conf)
2. yarn-site.xml 內可以加入 yarn.resourcemanager.nodes.include-path Path to file with nodes to include.
3. NameNode 與 ResourceManager Reread config

$/usr/lib/hadoop-hdfs/sbin/refresh-namenode.sh
$yarn rmadmin -refreshNodes

4. 把該台機器的 DataNode與 NodeManager daemon start 起來。

使用 apache ambari 只要使用 UI add host 就可以選擇加入的host跟角色。 



Decommission

反過來說,我們想要把某台機器從集群中除役下來,這個動作就叫做 decommission。
Hadoop 的 HDFS 為我們提供可容錯高可用的分散式環境,一般來說我們每個資料預設是有三個副本(repication) 。
如果我們直接把一台datanode給關機或是移除,在資料沒有充分副本的情況下,我們就可以會遺失在該台機器上的資料。

所以,當在進行 decommission 時,就是在確保在該台datanode上的資料,會被充分的備份到其他node上去。datanode會先去inform Namenode在此機器上有哪些 blocks,等到那些block都充分備份到其他台node上在轉換state。

node 在 decommission 時有三種不同的state。


  • decommission in progress
  • decommissioned
  • dead (當Namenode超過十分鐘沒有收到datanode回報的heartbeat時,就會判定成dead。)

Decommission Step
1.把 node 加到 dfs.exclude file內
2.加到 ResourceManger 的 exclude file
3.Namenode 與 ResourceManger 重讀 設定

$/usr/lib/hadoop-hdfs/sbin/distribute-exclude.sh <exclude-file>
$/usr/lib/hadoop-hdfs/sbin/refresh-namenodes.sh
$yarn rmadmin -refreshNodes

4.在namenode ui 上觀察 node的 state
5.等待該node status 轉成 decommissioned

Balanceer 




2014年4月20日 星期日

[武術] [小八極]140420(日) 週日武術班 傳統武術的"用"


今天剛好 阿唐兄 來找老師聊聊,
他也與我們分享一些概念跟心得。

從他的身上可以完全看出,傳統武術的 力法功。
他演示透過直接有效的的方式,與傳統武術的接觸學。

在接觸時,你怎麼做操作,
像是,八極很多技巧是開內門了。

在兩個人實力相差不大時,就是功體與技巧了。

在分享了幾個訓練,

  • 一二三跟步法的直拳練習
  • 中線直接 在中線才會出現所謂的招架,之後才是變,也就是你小八極在練的東西了。
  • 從用法往回看武術,就會很純粹
  • 傳統武術能用嗎? 接手便知
  • 師爺的東西都在小八極裡了


  • 練傳統武術的人,先問你的直拳攻擊有效嗎?
這大概是睽違已久在與人有類似的試手,又更深一步導入一些用法的概念,去反覆驗證自己的方向。
墊步三連手 or 捆手 在接收產生招架以後再作用,小八極的東西看起來又更直接。


2014年4月18日 星期五

[python]ImportError: No module named google.protobuf


$ python test.py
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    import addressbook_pb2
  File "-2.5.0/examples/addressbook_pb2.py", line 4, in <module>
    from google.protobuf import descriptor as _descriptor
ImportError: No module named google.protobuf

sol:

easy_install protobuf

2014年4月17日 星期四

[武術]始起太極-吳式太極班 2014.04.17 雜記



  • "太極拳的放鬆不是全部放鬆,而是,節節放鬆",老師透過演示,別人往上頂的時候,手稍微放鬆,但是不是連著全部都放鬆了。我也可以他出力來,我腰放鬆就轉出去了。
  • 練時把動作練熟,再來講究用法用意。
  • 尾閭拉回中正才好左右轉

2014年4月16日 星期三

[elasticsearch/logstash] logstash id 自動產生 document id "_id" automatic id generation


使用 logstash 來收集 log 做 log management 時,
如果你使用 elastic search 做預設的 search engine (output 使用 elasticsearch )
應該會注意到有三個 "_" 開頭內部使用的metadata。


_id   _Eweo8-ySluo6awKTRssXw
_index  logstash-2013.04.16
_type   apache-access



Index Data


一般來說,使用 elasticsearch
我們使用PUT來索引一個json format 的record file
curl -XPUT 'http://localhost:9200/twitter/user/peicheng' -d '{ "name" : "Peicheng" }'
return
{"_index":"twitter","_type":"user","_id":"peicheng","_version":1,"created":true}
在使用 elasticsearch rest api 做 index 時,我們注意到了
twitter -> index name
user -> type
peicheng -> id (document id)
請注意這裡我們使用PUT的方式。

Query Data

$ curl -XGET 'http://tmdesk:9200/twitter/user/peicheng?pretty=true'
{
  "_index" : "twitter",
  "_type" : "user",
  "_id" : "peicheng",
  "_version" : 1,
  "found" : true, "_source" : { "name" : "peicheng" }
}
指定 要query 的 index , type ,跟 id。


而如果你想要讓 elasticsearch 自動產生id呢? (automatic id generation )


$ curl -XPOST 'http://tmdesk:9200/twitter/user' -d '{ "name" : "peicheng" }'
{"_index":"twitter","_type":"user",
"_id":"dF8MsloXRg-RIe_Bq3xxsw",
"_version":1,"created":true}
所以,你在logstash裡面要是沒有特別指定 document_id的構造方法,
elasticsearch就會幫你產生 _id。

2014年4月15日 星期二

[mongodb]remove record if the field not exists 移除沒有某欄位的資料



想要移除某些沒有包含特定欄位的資料

ex 移除不包含 visted 欄位的資料

db.post.remove({"visted":{"$exists":false}});

java - How can I check whether a field exists or not in MongoDB? - Stack Overflow
http://stackoverflow.com/questions/10057651/how-can-i-check-whether-a-field-exists-or-not-in-mongodb

[mongodb] mongodump / mongorestore backup


使用 mongodb 提供的 tools 來 備份還原 mongodb file
mongodump 會直接 dump 出 bson的 file 
mongorestore 可以還原到 mongodb

  • dump bson 

mongodump -u user -p password --port port -h host -d dbname -c collection_name -o output_dir

ex
mongodump -u admin -p password --port 64631 -h 127.0.0.1 -d python -c post -o post


  • restore from bson file
mongorestore -u user -p password -h host:port -d dbname -c collection_name bsonfile

ex:
mongorestore -u admin -p password -h 127.0.0.1:40816 -d python -c post post2/python/post.bson

[openshift] cartridge list add remove

use openshift rhc

cartridge-list 
rhc cartridge-list -l account

cartridge remove
rhc cartridge remove -a python -c mongodb-2.4 -l account

cartridge add
rhc cartridge add -a python -c mongodb-2.4 -l account

[mongodb]mongodb temp


> db.post.runCommand("compact")
{
"errmsg" : "exception: Can't take a write lock while out of disk space",
"code" : 14031,
"ok" : 0
}

MongoDB "Can't take a write lock while out of disk space"
http://jorshasaur.us/mongodb-cant-take-a-write-lock-while-out-of-disk-space/

2014年4月14日 星期一

[python] time 時間 字串轉成 timestamp

字串轉成 timestamp

假設現在有個 datetime 的string,我們先產生一下一組字串時間
>>> import datetime
>>> import time
>>> t=time.time()
>>> time.strftime('%c',time.localtime(t))
'Mon Apr 14 18:47:54 2014'

如果我們拿到的是一個字串如何轉成 timestamp呢?

>>> T='Mon Apr 14 18:47:54 2014'
>>> time.mktime(time.strptime(T,'%c'))
1397472474.0



fcamel 技術隨手記: Python 處理時間的方法
http://fcamel-life.blogspot.tw/2010/11/python.html


2014年4月12日 星期六

[mac] homebrew install autopoint


pc_liao@IronMan[~/tmpdir/dindin-pdf-read-only/trunk]{10:35}
$ sh autogen.sh
Running autopoint...
autogen.sh: line 9: autopoint: command not found
Running aclocal...
autogen.sh: line 10: aclocal: command not found

#brew install gettext

Installs the libraries and the utilities:
autopoint envsubst gettext gettext.sh gettextize msgattrib msgcat msgcmp msgcomm msgconv msgen msgexec msgfilter msgfmt msggrep msginit msgmerge msgunfmt msguniq ngettext recode-sr-latin xgettext

But doesn’t add to your path! You need to modify the env. variable $PATH:
vi ~/.bash_profile
And add to the end or modify previous declarations:
export PATH=${PATH}:/usr/local/opt/gettext/bin

Mac Os X: Command line — arielvb's notes 1.0 documentation
https://arielvb.readthedocs.org/en/latest/docs/mac/commandline.html

$ brew install automake

Running intltoolize...
autogen.sh: line 13: intltoolize: command not found

$ brew install intltool

2014年4月8日 星期二

[AWS]connect ec2 Permissions 0644 for 'instance1.pem.cer' are too open.

pc@IronMan[~/Documents/sshf]{10:59}
$ ssh -l ec2-user -i instance1.pem.cer ec2-AAAA.BBB.CC.DD.ap-southeast-2.compute.amazonaws.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'instance1.pem.cer' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: instance1.pem.cer


pem files should be viewable
you can chmod your pem file
example
chmod 400 instance1.pem

The problem is having wrong mod on the file.
Easily solved by executing -
chmod 400 mykey.pem
Taken from Amazon's instructions -
Your key file must not be publicly viewable for SSH to work. Use this command if needed: chmod 400 mykey.pem
Trying to SSH into an Amazon Ec2 instance - permission error - Stack Overflow http://stackoverflow.com/questions/8193768/trying-to-ssh-into-an-amazon-ec2-instance-permission-error

2014年4月4日 星期五

2013 回顧與 2014 展望


每一年到交界處,總會寫下這個 過去一年的回顧與再來一年的展望。

今年已經四月,才有時間沈澱下來。

先說2013 工作上面也有一陣子,專案也是一個接一個,有因為team變而轉變,但是大抵都脫離不了主軸。

  • Big Data相關技術
  • Large scale data processing
  • 自動分類自動摘要 文字處理
今年也在準備之下去了一趟 日本九州之旅 ,這是睽違以久的再次出國,只是這次同伴與心態不一樣的了。

以前在前後都會調適到要出去玩耍的心情,今年反而靜不太下來,太多情感上的充斥了。

武術方面,

在前半年陸陸續續參與了 台灣武藝的活動與規劃,在十月前都是主力。在想說,這個組織未來是要怎麼發展。
也參與了台灣拳頭會的幾個演武。
前半年有關於出書 與cht合作 甚至是拍影片的計畫。
十一月時出了點狀況,就淡出這個組織。

本來是在台中想開始八極拳的生涯,但是,後來在台北練習,也換因緣際會。
八月開始每週三都練習八卦掌走掌,我想,以前沒有這麼規律的在練功,這也是我缺乏的地方。走了幾個月開始有些感觸。

在今年也開始學習吳式太極拳方架。

自己的幾個site也在12/25後陸續上線。

2014也有幾個展望,

  • 希望在hadoop相關技術上的純熟
  • 新的時間利用規劃(自己的目標)
  • 武術上面的鍛鍊
  • 新的網站與營運



[think] 在一起的不一定要當朋友 年輕人最大的特徵是 常把熟人當成朋友




 標題的第一段話,是在北京的時候 王華 跟我說的,那時候我也有這樣的困擾。
他一開口就點醒我,很多時候  "在一起的不一定要當朋友"。我聽了她的體驗,我就豁然開朗了。
的確,很多人會是你生命中的過客,但是,才有特定的人,才會被你認定是朋友。


"吳祥輝 Brian Wu
28分鐘 · 編輯紀錄 ·

昨晚在立法院現場
用我的一句名言
解消Archer的某種失落感

他說 本來感情非常要好的朋友 因學運變得無法對話
我說 年輕人最大的特徵是 常把熟人當成朋友


您以為跟人認識二十年十年就是朋友嗎
不 那只是熟人而已

朋友是要能交心的

趁著這次考驗
淘汰並遠離那些被您誤會成朋友的熟人吧

這樣
您才有時間去交真正的朋友"

2014年4月1日 星期二

[startup]ROSL 140401 Social 與 手持裝置 將成為內容網站流量大宗




  • 手持移動用戶是流量大宗
    from : m.facebook.com / referral
  • social 的比例遠大於 direct 與 organic search
    甚至只有不到1%來自 search
  • 短時間內藉由social share的行為衝高
  • 網頁內部的內連,成為一個重要關鍵
from 計算區域與人數事件 反思



[linux][CentOS] build tool gcc not found / install gcc & Development Tools




# gcc
-bash: gcc:not found
centos 中 預設沒有install一些build tools
可以使用 下面指令把全部相關的Development Tools都安裝起來

# yum groupinstall 'Development Tools'

[tech_note]facebook recommendations bar

facebook recommendations bar
如果沒有內部使用的文章推薦系統,在內容網站可以使用 facebook recommendations bar 幫你增加內部流量,增加使用者在站內的點擊。


安裝以後沒有推薦結果

facebook - Recommendations Box not showing any results - Stack Overflow
http://stackoverflow.com/questions/15392015/recommendations-box-not-showing-any-results
依照回應跟實測結果來看 可能有時候要等上一段時間 recommendations bar才會有推薦的結果
even i had a similar issue.Time healed it.its a fb issue.wait for some time perhaps,max a week? –  Michel Mar 13 '13 at 17:43 



[GoogleMap] 愚人節 你收服神奇寶貝了嗎


你收服神奇寶貝了嗎
點開手機版的google map 在搜尋地方按一下
如果出現 神奇寶貝球 就進入了神奇寶貝模式。