Thao tác với các công nghệ Big Data

how-to-use-big-data

how-to-use-big-data

Mục đích của bài viết này dùng để ghi chú lại các thao tác cơ bản cũng như một số khái niệm khi làm việc với các công nghệ được liệt kê bên dưới. Sau một thời gian tìm tòi học hỏi về các công nghệ mới, chúng ta nên notes lại cho bản thân để tiện tham khảo nhanh sau này, không cần tốn thời gian search Google một lần nữa.

Phần lớn thời gian, ta sẽ làm việc trên dòng lệnh. Do đó, đây cũng là một thói quen tốt giúp ta tổ chức công việc hiệu quả hơn, giải phóng đầu óc của chúng ta đỡ nhọc công ghi nhớ nhiều chi tiết nhỏ nhặt, thay vào đó ta giành thời gian tập trung vào bức tranh tổng quát nhiều hơn.

Docker

docker-logo

docker-logo

Cài đặt

brew install docker: cài đặt docker thông qua brew
brew install docker-machine: cài đặt docker-machine thông qua brew
docker-machine create --driver=virtualbox default: tạo một máy ảo default với driver là virtualbox

Kiểm tra kết quả cài đặt

docker-machine ls: liệt kê danh sách các máy ảo.
eval "$(docker-machine env default)": chạy môi trường máy ảo default.
docker run -ti (terminal interactive) ubuntu:latest: truy xuất dòng lệnh với image ubuntu phiên bản latest.
exit: thoát môi trường dòng lệnh
docker-machine stop default: tắt máy ảo default
docker-machine start default: mở máy ảo default

Các lệnh cơ bản

docker ps: hiển thị các containers đang hoạt động
docker images: hiển thị tất cả images
docker rmi my-image: xóa image
docker pull postgres/redis: download images

Containers to images

docker_flow

docker_flow

docker ps -a: hiển thị tất cả containers
docker ps -l: hiển thị containers cuối cùng
docker rm $(docker ps -a -q): xóa tất cả container đã ngưng hoạt động
docker commit 10780ab604f1: lưu image container có id=10780ab604f1
docker commit nauseous_einstein my-image-2: lưu image container có name=nauseous_einstein thành image có tên my-image-2
docker tag cabd5923cf4f8293fa9ed10e5d711bb63ca2f4feb00dd2937f6af0316d74dcd3 my-image: gán tag cho image

Chạy các tiến trình trong containers

docker run --rm -ti ubuntu sleep 5 (rm delete all when shutdown)
docker run --rm -ti ubuntu bash -c "sleep 3; echo all done"
docker run -d -ti ubuntu bash (d for detach, still running - Ctrl QP)
docker attach infallible_hoover

Quản lý containers

docker logs container_name
docker kill container_name
docker run --memory maximum-allowed-memory image-name command
docker run --cpu-shares relative to other containers

Export/Import

docker export container_name > export_container.tar
docker load container_name < export_container.tar

Networking

docker run --rm -ti -p 45678:45678 -p 45679:45679 --name echo-server ubuntu:latest bash
nc -lp 45678 | nc -lp 45679: NetCat listen trên port 45678 và 45679
docker port echo-server: hiển thị tất cả ports của container
docker run -p 1234:1234/udp: exposing UDP ports
docker-machine ip
nc 192.168.99.100 45678
nc 192.168.99.100 45679

Link containers

docker run --rm -ti --name server ubuntu:14.04 bash
# nc -lp 1234
docker run --rm -ti --link server --name client ubuntu:14.04 bash
# nc server 1234
# cat /etc/hosts

Share volumes

mkdir example (trên local machine)
docker run -ti -v /home/hongong/example:/shared-folder ubuntu bash
# cd /share-folder/
# touch my-file
# exit
ls example/ (trên local machine)

Share volume giữa các containers

docker run -ti -v /shared-data ubuntu bash (left)
docker run -ti --volume-from slick_hopper ubuntu bash (right)

Docker hub

docker tag image_id account_name_docker_hub/image_name:version_tag
docker login
docker push account_name_docker_hub/image_name

Xem thêm Cheat sheet

PostgreSQL

postgresql-logo

Đăng nhập

psql -h myhost -d mydb -U myuser

Start/Stop server

brew info postgres
brew services list
brew services start postgresql
brew services stop postgresql

Tạo user

select * from pg_user;
createuser name
dropuser name

Tạo db

createdb mydb
dropdb mydb
psql mydb

Liệt kê

\l: liệt kê danh sách databases
\c: kết nối với database khác
\dt: liệt kê danh sách tables
\d users: hiển thị table definitions

Hiển thị port của ứng dụng

SELECT *
FROM pg_settings
WHERE name = 'port';

Xem kích thước của từng tables

SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_relation_size(C.oid)) AS "size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(C.oid) DESC
LIMIT 20;

Xem các info cơ bản

SELECT version();
SELECT current_date;
SELECT 2+2;
\h: get help
\q: quit

Tạo table

CREATE TABLE weather (
city varchar(80),
temp_lo int, -- low temperature
temp_hi int, -- high temperature
prcp real, -- precipitation
date date
);

Xóa table

DROP TABLE weather;

Các kiểu dữ liệu trong PostgreSQL
standard SQL types int, smallint, real, double precision, char(N), varchar(N), date, time, timestamp, and interval

Backup và restore

pg_dump mydb > outfile.sql
psql mydb  outfile
psql -f infile postgres
pg_dump -h host1 dbname | psql -h host2 dbname
pg_dump dbname | gzip > filename.gz
gunzip -c filename.gz | psql dbname

Populating data

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
INSERT INTO weather (date, city, temp_hi, temp_lo) VALUES ('1994-11-29', 'Hayward', 54, 37);
COPY weather FROM '/home/user/weather.csv';

Delete/Update

UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > '1994-11-28';
DELETE FROM weather WHERE city = 'Hayward';
DELETE FROM tablename;

Tensorflow

tensorflow

tensorflow

Cài đặt và testing sử dụng virtualenv

pip install --upgrade virtualenv
virtualenv --system-site-packages ~/tensorflow
cd Downloads
source ~/tensorflow/bin/activate
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.0-py2-none-any.whl
pip install --upgrade $TF_BINARY_URL

Test script

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))

Run demo

python -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))'
python -m tensorflow.models.image.mnist.convolutional
cd tensorflow/models/image/mnist
python convolutional.py

Spark 2.0

Apache Spark

Apache Spark

Programming

RDDs, DataFrames, and Datasets
Scala Data structures
Configuration
Distributed
Dataframe vs SQL for python
Spark SQL
Get started Spark mongo

Truyền tham số configuration

-Dspark.master=local[2]
-Dspark.app.name=study_scala
-Dspark.mongodb.input.uri=mongodb://127.0.0.1/db_name.collection_name
-Dspark.mongodb.input.partitioner=MongoSplitVectorPartitioner
-Dconfig.file=resources/dev-config.conf
D nghĩa là Default

Những điểm mới

SQL query: subqueries

SELECT employee_id,
age,
(SELECT MAX(age) FROM employee) max_age
FROM employee

Hợp nhất DataFrame/Dataset API thành Dataset
DataFrame là alias của Dataset Row. Có thể chuyển đổi qua lại giữa DataFrame, Dataset, và RDD một cách dễ dàng. Lưu ý DataFrame là dữ liệu collection phân tán không có khả năng thay đổi (immutable).
SparkSession thay thế cho SparkContext, SQLContext, và HiveContext
Structured Streaming thông minh hơn, hỗ trợ truy vấn và tương tác với streaming data thông qua Spark SQL, hãy nghĩ stream tương tự như static data bình thường.

Spark-shell Commands

:sh pwd
:sh ls -lah
res1.lines foreach println

iTerm2

iterm-logo

iterm-logo

Split Panes
cmd-shift-d: horizontally
cmd-d: vertically
cmd-shift-enter: maximize

Autocomplete
cmd-;

Paste History
cmd-shift-H

Oh my zsh
activate: chsh -s /bin/zsh

tmux

tmux-logo

tmux-logo

Session
tmux – start new
tmux new -s myname – start new with session name
tmux a -t myname – attach to named
tmux ls – list sessions
tmux kill-session -t myname – kill session

Windows
Ctr + b then
c create window
w list windows
n next window
p previous window
f find window
, name window
& kill window

Others
tmux list-keys | less -N – lists out every bound key and the tmux command it runs
tmux list-command | less -N – lists out every tmux command and its arguments

Vim

vim-logo

vim-logo

Exiting

:w - write (save) the file, but don't exit
: x - write (save) and quit
:q - quit (fails if there are unsaved changes)
:q! - quit and throw away unsaved changes

Cursor movement

h - move cursor left
j - move cursor down
k - move cursor up
l - move cursor right
4j - moves down 4 lines.
H - move to top of screen
M - move to middle of screen
L - move to bottom of screen
w - jump forwards to the start of a word
b - jump backwards to the start of a word
0 - jump to the start of the line
$ - jump to the end of the line
gg - go to the first line of the document
G - go to the last line of the document
5G - go to line 5

Editing

J - join line below to the current one
u - undo
Ctrl + r - redo
:s/pattern/replace/ - replace one string
:%s/pattern/replace/ - replace every occurrence

Inserting

i - insert before the cursor
I - insert at the beginning of the line
a - insert (append) after the cursor
A - insert (append) at the end of the line
o - append (open) a new line below the current line
O - append (open) a new line above the current line

Làm việc với nhiều files cùng lúc

:e file - edit a file in a new buffer
:bn - go to the next buffer
:bp - go to the previous buffer
:bd - delete a buffer (close a file)
:ls - list all open buffers
:sp file - open a file in a new buffer and split window
:vsp file - open a file in a new buffer and vertically split window
Ctrl + ws - split window
Ctrl + ww - switch windows
Ctrl + wq - quit a window
Ctrl + wv - split window vertically
Ctrl + wh - move cursor to the left window (vertical split)
Ctrl + wl - move cursor to the right window (vertical split)
Ctrl + wj - move cursor to the window below (horizontal split)
Ctrl + wk - move cursor to the window above (horizontal split)

Tabs

gt - move to the next tab
gT - move to the previous tab
#gt - move to tab number #
:tabnew file - open a file in a new tab
:tabclose - close the current tab and all its windows
:tabonly - close all tabs except for the current one
:tabdo q - closes all opened tabs

Marking

v - start visual mode, mark lines, then do a command (like y-yank)
V - start linewise visual mode
ab - a block with ()
aB - a block with {}
ib - inner block with ()
iB - inner block with {}
~ - switch case

Cut and paste

yy - yank (copy) a line
p - put (paste) the clipboard after cursor
dd - delete (cut) a line
D - delete (cut) to the end of the line
x - delete (cut) character

Others

:syntax on
:set nu
:set hlsearch
:noh
Ctrl + N keyword completion
. repeat last command
gd Go to the definition
gg=G auto indent
== indent current line
4== indent 4 lines below the current line

MongoDB

mongodb-logo

mongodb-logo

Dump data

mongodump --db db_name --collection collection_name --query='{field01:"query_value"}'

CRUD Operations

db.collection.insert()
db.collection.find()
db.collection.update()
db.collection.remove()

Aggregation

db.collection.count()
db.collection.distinct()
db.collection.aggregate([
{$match: {…}},
{$group: {…}},
{$project: {…}}
])

Glassfish

glassfish-logo

glassfish-logo

asadmin start-domain --debug: khởi động server ở chế độ debug
asadmin list-domains: liệt kê các domain hiện tại
asadmin deploy --force=true my_app.jar: deploy ứng dụng lên server

S3

aws-s3-logo

aws-s3-logo

s3cmd ls  s3://bucket_name/data_folder/: liệt kê các files trên S3
s3cmd put file.txt s3://bucket_name/data_folder/: upload files lên S3
s3cmd del s3://bucket_name/data_folder/: xóa files trên S3

Zookeeper

Zookeeper cần ít nhất 3 instances gồm 1 leader và 2 follower.

docker-machine ip
HOST_IP=docker-server-ip
docker run -d \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
garland/zookeeper

Mesos

Khởi động mesos master

docker run --net="host" \
-p 5050:5050 \
-e "MESOS_HOSTNAME=${HOST_IP}" \
-e "MESOS_IP=${HOST_IP}" \
-e "MESOS_ZK=zk://${HOST_IP}:2181/mesos" \
-e "MESOS_PORT=5050" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_QUORUM=1" \
-e "MESOS_REGISTRY=in_memory" \
-e "MESOS_WORK_DIR=/var/lib/mesos" \
-d \
garland/mesosphere-docker-mesos-master

Khởi động mesos slave

docker run -d \
--name mesos_slave_1 \
--entrypoint="mesos-slave" \
-e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_LOGGING_LEVEL=INFO" \
garland/mesosphere-docker-mesos-master:latest

Ghi chú:
-p, –publish list: Publish a container’s port(s) to the host (default [])
-e, –env: Set environment variables (default [])
-d, –detach: Run container in background and print container ID

Marathon

docker run \
-d \
-p 8080:8080 \
garland/mesosphere-docker-marathon --master zk://${HOST_IP}:2181/mesos --zk zk://${HOST_IP}:2181/marathon

Chronos

Còn tiếp…

Kafka

Còn tiếp…

Redis

Còn tiếp…

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s