แสดงบทความที่มีป้ายกำกับ python แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ python แสดงบทความทั้งหมด

วันเสาร์ที่ 22 มีนาคม พ.ศ. 2557

การติดตั้ง Apache Hbase และ Apache Thrift

บทความนี้มุ่งเน้นไปที่การติดตั้ง Apache Hbase และ Apache Thrift นะครับ

Apache Hbase คืออะไร ? Hbase คือ ฐานข้อมูลแบบ Non-relational database ตัวหนึ่งครับ เก็บข้อมูลในลักษณะของ Column family ซึ่งโดยปรกติแล้ว หากเราติดตั่้ง Hbase ได้เสร็จสิ้นแล้ว เราจะสามารถเข้าถึง Hbase่ได้โดยผ่าน Hbase Shell แต่...

หากจะเราใช้โปรแกรมในภาษาอื่นเข้ามาติดต่อ ในที่นี้ผมเลือกใช้ Happybase ซึ่งเป็น lib ของ python ซึ่งใช้ในการติดต่อไปยัง Apache Hbase โดยการติดต่อนั้น เราจะไม่สามารถติดต่อ Hbase ได้โดยตรง แต่เราจะต้องทำการติดต่อผ่านทาง Apache Thrift ซึ่งเป็น Service ตัวหนึ่งที่ิอนุญาติให้โปรแกรมที่ถูกเขียนโดยภาษาอื่นๆ สามารถติดต่อมายังตัว Apache Hbase ได้ครับ

แล้ว บทความนี้ทำอะไรบ้าง
- ติดตั้ง Apache Hbase ให้พร้อมสำหรับการใช้งาน
- ตั้งค่า Apache Hbase ให้สามารถทำงานในโหมด Presudod istributed Mode
- ติดตั้ง Apache Thrift โดยการ Complie from source
- ทดสอบ Happybase ให้ connect ไปยัง Hbase ผ่านทาง Apache Thrift


มาเริ่มกันเลยนะครับ

1. การติดตั้ง Apache Hbase
เริ่มแรก ให้เราเข้าไป Download  Hbase มาจาก Mirror ก่อนกันเลย เมื่อ Download เสร็จแล้วก็ให้แตกไฟล์ไว้ที่ /usr/local/

>> % tar xzf hbase-x.y.z.tar.gz
* หมายเหตุ Hbase ต้องการ Java อย่างน้อย v1.6 ด้วย เราต้องทำการเซต JAVA_HOME ก่อน
** ผมใช้ OpenJDK1.7

export JAVA_HOME=/usr/lib/jvm/default-java  

export HBASE_REGIONSERVERS=/home/hduser/hbase/conf/regionservers

export HBASE_MANAGES_ZK=true

สำหรับ Hbase version ต่ำกว่า 0.94 ให้แก้ไขไฟล์ /etc/hosts ด้วยครับ จากเดิม 127.0.1.1 เป็น 127.0.0.1
(ขั้นตอนนี้ ไม่มีในหนังสือที่สอน Hbase ทำเอาผมรัน Hbase ไม่ได้อยู่พักนึง)เช่น
127.0.0.1 localhost            
127.0.0.1 ubuntu.ubuntu-domain ubuntu
** ถ้าหากใช้ Hbase ที่ใหม่กว่านี้ไม่ต้องแก้ครับ


และเพื่อความสะดวกในการทำงาน เราสามารถเพิ่ม PATH ไปได้ เพื่อให้เรียกใช้งานได้อย่างสะดวก โดยทำการแก้ไข

$vim ~/.bashrc

แล้วเพิ่มข้อความนี้ลงไป

% export HBASE_HOME=/home/hduser/hbase export PATH=$PATH:$HBASE_HOME/bin

เสร็จแล้ว เราก็มาเริ่มรัน Hbase กันเลย ซึ่งในหมวดการรันนี้ เราจะเรียกว่า standalone mode จะใช้  file local system ในการทำงาน ยังจะไม่ได้ใช้ HDFS ของ Hadoop ในการทำงาน ข้อมูลไฟล์จะถูกเก็บอยู่ใน /tmp/hbase-${USERID} การรันทำได้โดยใช้คำสั่ง

% start-hbase.sh


หากเราต้องการให้ Hbase ทำงานใน  Pseudo- Distributed Mode (โหมดใช้ HDFS แต่ยังไม่กระจายไปเครื่องอื่นๆ) เราจะสามารถเข้าไปแก้ไขไฟล์

$ vim $HBASE_HOME/conf/hbase-site.xml

เราสามารถแก้ไข ให้ Hbase เก็บข้อมูลที่อื่นแทน /tmp ได้ โดยใส่ที่อยู่อื่นๆ แทน DIRECTORY ด้านล่าง

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hduser/hbase/zookeeper</value>
</property>
</configuration>

เมื่อทำการ Config เสร็จก็จะสามารถ Run  ได้ โดยใช้คำสั่ง
$ start-hbase.sh

เมื่อรันแล้วก็ลองเข้าไปดูใน log ดูว่าทำงานถูกต้องหรือไม่ด้วย และเมื่อทำงานแล้ว
เราจะสามารถตรวจสอบ Process โดยใช้ คำสั่ง jps ได้ ซึ่งหน้าตาโปรเซสจะอยู่ประมาณนี้

**
Hadoop 2.5.1
Hbase 0.98.6.1--hadoop2
**
 4334 HQuorumPeer
 2882 SecondaryNameNode
 4867 Jps
 3207 TaskTracker
 2460 NameNode
 4671 HRegionServer
 4411 HMaster
 2977 JobTracker
 2668 DataNode

สำหรับเว็บ interface

http://localhost:60010 for master
http://localhost:60030 for region server

Ref: http://archanaschangale.wordpress.com/2013/08/31/installing-pseudo-distributed-hbase-on-ubuntu/

=========================================================

2. การลง Apache Thrift

ก่อนจะติดตั้ง เราก็ต้องเตรียม lib ให้พร้อมก่อนครับ เนื่องจาก Apache Thirft จะให้เรา compile ใหม่เลย เราสามารถติดตั้ง lib เพิ่มเติมได้จากข้างล่างเลยครับ

sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev 
หากในการติดตั้งเจอ ปัญหา dependency ของ package เต็มไปหมดเหมือนที่ผมเจอ ให้ลองอัพเดทระบบดูครับ แล้วจะหายเลย
ทำได้โดย

$ aptitude update
$ aptitude upgrade

หลังจากนั้นก็ Download ลงมาก่อนเลยครับ แยกไฟล์ให้เรียบร้อย และเริ่มทำการติดตั้งด้วย

./configure
make
make install
เมื่อทำการติดตั้งเสร็จสิ้นแล้ว เราก็ต้องบอก thrift ว่าเราจะใช้ภาษาอะไร ถ้าใช้ python ให้เปลี่ยนที่ [lang] เป็น py

thrift --gen [lang] [hbase-root]/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

หลังจากนั้น เราก็จะสามารถรัน Thrift service ได้เลย โดยใช้คำสั่ง
[hbase-root]/bin/hbase thrift start

หลังจากนั้น ผมได้ทดลองใช้่ Happybase ติดต่อไปยัง Hbase ปรากฏว่าไม่มี Error เกิดขึ้นครับ

** ในที่นี้ติดต่อโดยใช้ภาษา python  นะคับ
import happybase

connection = happybase.Connection('127.0.0.1')
NO ERROR เย้ๆ



ดูข้อมูลเพิ่มเติม
https://hbase.apache.org/book/quickstart.html
http://answers.oreilly.com/topic/2183-how-to-install-hadoop-hbase/
http://thrift.apache.org/docs/BuildingFromSource/


Read more

วันพฤหัสบดีที่ 13 มิถุนายน พ.ศ. 2556

Installation pydoop and happybase on python3

Hi everybody.

Now I will describe how to install pydoop (version 0.9.1) and happybase (0.6) on python3.x

What is pydoop ? >> pydoop is python api for MapReduce and HDFS. you can googling for more details.
What is happybase ? >> happybase is python api for hbase. as same above, googling for more details.

Why cannot install pydoop and happybase directly to python3? >> For reason is both api are implemented on python 2.x cannot install directly to python3

ok we will know about problem. Start to install.

- Install Hadoop, You can see this article.

- Install libboost. (get install by $ sudo aptitude install libboost-python-dev)

- Create python virtual environment. You can see this article (Thai Language)

- Set Environment path by add these line to end of .bashrc file. ($ vim .bashrc)

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_HOME="/usr/local/hadoop"
export HADOOP_VERSION=1.0.4

- Reset Shell or $ source .bashrc
- Active your virtual environment
$ source [your virtual environment]/bin/active

-Install pydoop
$ pip install pydoop

If you get error "SyntaxError: invalid syntax" don't worry conern it. You must convert all 2.x python code to 3.x python code.

Run the script to convert all .py files (2.x python code) to 3.x python code. (Put the script in pydoop directory, pydoop should be in /tmp/pip-build-xxx-xxxx/pydoop)

After run the script finish type pip again.

$ pip install pydoop

pydoop installation successful.

-Install happybase
$ pip install happybase

You will get error same as pydoop installation. You can convert all .py 2 to 3 same as pydoop.
There are 2 path to convert /tmp/pip-build-xxx-xxxx/happybase and /tmp/pip-build-xxx-xxxx/thrift
If you convert every .py in 2 above directory. you will get successful.










Read more

How to convert python2 to python3

Hi every body.
It just simply to convert python2 to python3. You can convert by using the command name "2to3" that give in python3.x. to convert

If you want to convert example.py (Implenment on python2.x) type bellow.

$ python3
>>> 2to3 -w example.py

-w option is to replace the converted code to original code.

So if you want to convert all .py in folder. You can to shell script to do it. That is bellow

  #!/bin/sh
  for i in $( find . -name "*.py");
  do
  echo "start 2to3 $i";
  2to3 -w $i
  done;


Thank for P'boat for coding ^^
Read more

วันพุธที่ 5 มิถุนายน พ.ศ. 2556

Prepare environment for python programming

สวัสดีครับ วันนี้ผมจะขอมาเขียนในหัวข้อการเตรียม Virtual Environment(venv) สำหรับการเขียนภาษา python

คำถาม: venv คืออะไร ดีอย่างไร จำเป็นต้องทำหรือไม่ ?

คำตอบ: venv เป็นการจำลองสภาพการทำงานในการเขียนภาษา python ครับ ขอยกตัวอย่าง สมมุติผมสร้าง venv ขึ้นมาใหม่และได้ลง python3.3 และลง framework pyramid1.4 หากระบบได้ทำการอัพเกรดเป็น python3.4 ไปแล้ว งานของเราที่อยู่ใน venv ก็ยังคงใช้ python3.3 และ pyramid1.4 เช่นเดิม เนื่องจากงานของเราได้สร้างไว้ใน venv ที่เราได้สร้างขึ้นมา สำหรับข้อดีคือ หาก library ใหม่ได้ถอนชุดคำสั่งเก่าบางคำสั่งออกไป จะทำให้เราสามารถใช้งานlibrary นั้นต่อไปได้(เนื่องจากอยู่ใน venv ที่ได้สร้างไว้แล้ว)

$ pyvenv-3.3 pyramid/pyramid-1.4
#หากใช้ python ก่อนหน้าเวอร์ชั่น3.3 จะไม่มีคำสั่ง pyvenv-3.3 (Python Virtual Environment 3.3 ) โดยที่คำสั่งนี้จะทำการสร้าง Virtual Environment ใน Directory pyramid/pyramid1.4

$ source pyramid/pyramid-1.4/bin/activate
# ทำการเปิดใช้ venv นี้ หากต้องการยกเลิกการใช้งาน venv ต้องสั่ง deactivate
# source มีค่าเท่ากับ . เอาไว้สั่ง Shell Script ให้ทำงาน (activate เป็น Shell Script)

หลังจากนี้จะเป็นการติดต้ัง api ต่างๆ เช่น pyramid api ซึ่งเป็น Web framework api

$ curl http://python-distribute.org/distribute_setup.py
# Download Script สำหรับติดตั้งปลั๊กอินเพิ่มเติม โดย distribute_setup.py ทำให้ venv มีคำสั่งสำหรับ install package อื่น (คำสั่ง easy_install)

$ python distribute_setup.py
# Run Script นี้แล้วจะสามารถทำให้ใช้คำสั่ง easy_install ได้

$ easy_install-3.3 pip
# ทำการติดตั้ง python install package ไว้สำหรับติดตั้ง python plugin ต่างๆ
# สามารถใช้ easy_install ติดตั้ง python plugin ได้เช่นกัน แต่ว่า easy_install เมื่อทำการติดตั้งไปแล้ว
จะไม่สามารถถอนการติดตั้งได้ คำสั่ง pip (python install package) เป็นคำสั่งใหม่กว่า หาก plugin มีปัญหา
สามารถถอนการติดตั้งได้

$ pip install pyramid
# ติดตั้ง pyramid framework ซึ่งเป็น framework สำหรับช่วยพัฒนาเว็บ ติดตามรายละเอียดเพิ่มเติมที่ http://www.pylonsproject.org/

$ pcreate -s starter myexample
# สร้าง Project ชื่อ myexample

$ python setup.py develop
คำสั่งนี้จะทำการติดตั้งโปรเจคที่ได้สร้างขึ้น เราจำเป็นต้องใส่คำสั่ง develop หากการติดตั้งของเราอยู่ในกระบวนการพัฒนาอยู่ แต่หากเมื่อนำไปใช้จริง ให้ใส่คำว่า install แทน develop เนื่องจาก option install นั้นจะทำการ Copy Source code จาก current directory ไปยัง main directory ซึ่งหากเราใช้ virtual env ก็จะเข้าไปอยู่ใน env นั้น ทำให้เมื่อเราเปลียนแปลง source code ใน Current directory จะทำให้ไม่มีผลต่อโปรแกรมที่รัน เพราะว่ามันจะหา package หลักจากในตัว env ก่อนซึ่งเราก็ได้ติดตั้งลงไปแล้ว แต่ถ้าใช้ develop มันก็สร้างเพียงแค่ link ไปยัง Current directory
หากเราทำการติดตั้งลงไปแล้วด้วย install เราสามารถ uninstall ได้ แล้วสั่ง develop ใหม่ได้

$ cd myexample
# สามารถเข้าไปดู directory ที่สร้างได้

$ git init
# Set as config as pydev


หากต้องการรันโปรเจคที่ได้สร้างขึ้นมา ก็ให้ใช้คำสั่ง
$ pserve --reload development.ini

โดยคำสั่งนี้จะทำการจำลอง server ขึ้นมาครับ ส่วนตัวเลือก --reload นั้นมีไว้สำหรับเมื่อเราเปลี่ยนแปลงไฟล์ใดๆ ที่ใช้ในการเขียน มันจะทำการ reload server ให้ใหม่ครับ

สุดท้ายนี้ต้องขอบคุณพี่โบ๊ต(sdayu.blogspot.com) ที่สอนการติดตั้ง venv ครับ :)



Read more

วันจันทร์ที่ 3 มิถุนายน พ.ศ. 2556

My First python programming

เนื่องจากในช่วงนี้ผมกำลังอยู่ช่วงศึกษาการเขียนโปรแกรมด้วย python และผมก็ได้โจทย์จากพี่โบ๊ต (พี่ป.เอก ที่ภาค) ผู้ซึ่งชักชวนให้มาเขียน python เป็นโจทย์ที่ไม่ยากมาก แต่แสดงให้เห็นถึงความสามารถของ pythom ครับ

ติดตาม blog ของพี่โบ๊ตได้ที่ http://sdayu.blogspot.com/

โจทย์มีอยู่ว่า
ที่มาของโจทย์ http://sdayu.blogspot.com/2013/04/blog-post_30.html

A = [random.randint(1, 150) for i in range(0,100)]

หาค่าเฉลี่ยของสมาชิกของ A ที่ละ 10 ค่า ให้อยู่ในรูปของลิสท์

หลังจากที่ผมนั่งอ่าน syntax การใช้งาน python อยู้่ช่วงระยะหนึ่ง ก็เขียน Code แก้ปัญหาดังกล่าวได้ดังนี้

import random
A = [random.randint(1, 150) for i in range(0,100)]
C=[]
for i in range(0,10):
 B= [A[j] for j in range(i*10,(i*10)+10)]
 C.append(sum(B)/len(B))
print(C)

แต่ว่าเฉลยของพี่โบ๊ตสั้นกว่า ลองไปดูกันครับ
 
import random
A = [random.randint(1, 150) for i in range(0,100)]
length = 10
average = [sum(A[a:a+length]) / len(A[a:a+length]) for a in range(0, len(A), length)]
print(average)

เราใช้ความสามารถทำ subset โดยใช้เครื่อง (Colon,:) ครับเช่น 
A=[1,2,3,4,5,6,7,8,9,10] 
print A[1:4]

ผลลัพธ์ก็จะออกมาคือ [2,3,4,5] 


**หมายเหตุ คำสั่ง range(1,6) ใน python เวอร์ชั่น 2.7 จะ return ออกเป็นลิสด์
 ในขณะที่ python 3.3 จะ return ออกมาเป็น object ถ้าเราสั่ง print(range(1,6)) ใน python3 จะได้ผลลพัธ์เป็น object แต่หากเราต้องการให้ผลลัพธ์ออกเป็น list เราจะต้องทำการ casting ค่า โดย list(range(1,6))
Read more