Coder Social home page Coder Social logo

data_analysis's People

Contributors

warrenlo avatar

Watchers

 avatar

data_analysis's Issues

[Hodoop] Home_Work_1

題目:

  1. 將儲存重要資料的其中一台data node電腦關機
  2. 10分鐘內,觀看一次檔案狀態並記錄
  3. 10分鐘後,再次觀看檔案狀態並記錄
  4. 將關閉的電腦打開,觀看檔案狀態、儲存位置並記錄

關機指令 : docker stop ubuntu_wka01_1
開機指令 : docker start ubuntu_wka01_1


紀錄結果 :

Step 1. block存在 wka02 & wka03

Step 2. 關機

Step 3. 10分鐘內 : block 儲存在原本的 data node (wka02 & wka03) 裡。

  • The filesystem under path '/passwd' is HEALTHY

Step 4. 10分鐘後 : block 只顯示儲存在 wka03 (172.19.0.11)

  • The filesystem under path '/passwd' is HEALTHY

Step 5. 開機

Step 6. block 只顯示儲存在 wka03 (172.19.0.11)

  • The filesystem under path '/passwd' is HEALTHY
  • 但是wka02中的檔案依然存在。

外紀

如果關機前,把其中一個 block刪掉,並關掉此主機
那麼開機後, block會被儲存到另一個原本沒有 block的主機。

[Hadoop] Docker基本指令

Docker 基本指令

在Docker啟動一個最小化的ubuntu/ CentOS/ Nginx/ MariaDB 環境 (創造貨櫃主機)

syntax: docker run --rm -it ubuntu

  • --rm Automatically remove the container when it exits

  • -it Instructs Docker to allocate a pseudo-TTY connected to the container’s stdin
    (pseudo-TTY = 虛擬終端機/ TTY = teletypes/ stdin = standard in)

  • -d detached: Run container in background and print container ID

查詢IP location

hostname -i
cat /etc/hosts
docker exec [ID] hostname -i

Run a command in a running container

docker exec -it [container_ID] sh

Stop one or more running containers

syntax: docker stop [container_ID]

List containers

syntax: docker ps -a

  • -a Show all containers (default shows just running)

apt-get 指令

apt-get upgrade
apt-get install all: 安裝全部套件

ifconfig
brctl show

Appendix

參考 Docker docs
參考 Docker —— 從入門到實踐

[Hadoop] YARN Architecture

YARN (Yet Another Resource Negotiator)

  • client - 提供jar程式
  • YARN Resource Manager -rma -java program
  • Node Manager -wka01/ wka02/ wka03

YARN Architecture
ps 灰色部分都是java程式

[Hadoop] 啟動程序整理

CVN80環境

  1. 在CVN80環境裡進入 ~/wk/ubuntu 資料夾
    cd ubuntu
  2. 啟動HDFS系統
    docker-compose -f hdp311.yml start
  3. 進入HDFS環境
    ssh localhost -p 22100

HDFS環境

  1. 啟動HDFS java程式
    starthdfs
    • nna - Name Node, Secondary Name Node
    • wka01, 02, 03 - Data Node
  2. 啟動YARN java程式
    startyarn
    • [注意] 啟動 YARN 分散運算系統之前, 必須先啟動 HDFS 分散檔案系統
    • [重點] YARN 第一次啟動後, 會在 HDFS 分散檔案系統中產生 /tmp/hadoop-yarn
    • rma - Resource Manager, Job History Server
    • wka01, 02, 03 - Node Manager

[Hadoop] HIVE練習題

  1. 男性與女性的會員數量與總點播次數,輸出格式如下(res01.tsv)
    性別 會員數量 總點播次數
    男性
    女性

  2. 會員數量排行顯示前五名的國家,和這些國家的總點播次數,輸出格式如下 (res02.tsv)
    國家 會員數量 總點播次數
    第一名的國家
    .
    .
    .
    第五名的國家

  3. 哪一天是會員透過我們的音樂網站聆聽音樂最多的一天? (res03.tsv)

  4. 會員年齡層分布,第一個欄位請依定依照下方樣式輸出,輸出格式如下 (res04.tsv)
    會員年齡層 會員數量
    0-19
    20-39
    40-64
    65--

/user/bigred/dataset/userdemand.tsv
會員ID 日期 歌手 歌名
user_000010 2008-04-25T15:05:44Z Linkin Park Wake

/user/bigred/dataset/userprofile.tsv
會員ID 性別 年齡 國籍 加入會員月日年
user_000003 m 22 United States Oct 30, 2005

[Hadoop] 共享電腦

查詢本機電腦IP位址

hostname -I

進入他人電腦

ssh [帳號名稱]@[IP位置] -p [port]
ex :
ssh [email protected] - 22100
passwd : dsa101

密碼 : 才不告訴你勒


如果發生Permission Denied

error : Permission denied: user=dsa101, access=WRITE, inode="/user":bigred:bigboss:drwxr-xr-x

解決方式 : 被連線的電腦需要替連線者建立家目錄

在admin下面執行以下程式

  • hdfs dfs -mkdir -p /user/dsa101

  • hdfs dfs -chown dsa101:dsa101 /user/dsa101

    • chown : change owner ; 改變檔案擁有者
    • syntax : chown [ -R ] [帳號名稱] : [群組名稱] [檔案或目錄]
      • 潛規則 : 帳號與群組名稱一樣
  • hdfs dfs -chmod 750 /user/dsa101

    • chmod : change mode ; 改變權限
    • 750 : 7- owner, 5- dsa101, 0- others
      755 = User : r+w+x / Group : r+x / World : r+x
      750 = User : r+w+x / Group : r+x / World : --- (i.e. World: no access)
      r = read
      w = write
      x = execute (traverse for directories)

p.s : 有N個連線需求,就要建立N個帳號 & 家目錄


建立新機器 dswka03

  1. 進入ubuntu 資料夾
  2. 更改 hdp311.yml 文件內容 nano hdp311.yml
  3. 安裝機器
    docker-compose -f hdp311.yml up -d
  4. 檢查是否安裝成功
    docker-compose -f hdp311.yml ps

建立新帳號

  • 建立帳號 : sudo useradd -m -s /bin/bash [帳號名稱]
  • 設定密碼 : sudo passwd [帳號名稱]
  • 永遠記得,帳號是建立在電腦裡面
  • 一個帳號永遠只有一個遠端使用者

如何刪除帳號 ????

  • 查看帳號是否存在
    cat /etc/passwd
  • 刪除帳號
    sudo userdel -r [帳號名稱]
  • 記得要進入擁有帳號的機器裡面,才能查詢及刪除帳號

[Hadoop] 綜合練習

Hadoop 綜合練習

下載資料

wget ["網址"] -O [檔名]

觀看資料

  • cat
  • head -n [number] [檔案位置]
  • tail -n [number [檔案位置]
    • number 可以是 " n ", " +n ", " -n "
    • head -n 3 --> 顯示前三筆
    • tail -n 3 --> 顯示後三筆
    • head -n -3 --> 最後三筆不顯示 ( = 顯示第一筆到倒數第四筆)
    • tail -n +3 --> 顯示最後一筆到第三筆

[Hadoop] HIVE

HIVE 第一課 : 沒有人會在Hive裡面下 INSERT 命令

為什麼呢?
讓我們繼續看下去...


HIVE 語法 = SQL 語法

CREATE TABLE

  • 在HIVE裡 CREATE TABLE ,會直接在 HDFS 裡面,建立一個與table名稱一樣的資料夾

INSERT INTO

  • 在table 裡面 INSERT INTO 一筆資料

    這時候有沒有發現 insert 的非常久?
    去泡個咖啡再回來,發現終於 insert 完成
    讓我們看看 table 資料夾裡面發生了什麼事情吧

  1. 先輸入 hdfs dfs -ls [資料夾位置]

  2. 會發現裡面儲存了一個 000000_0 的檔案

  3. 哦! 所以 table 裡面的每一筆資料,都是同名資料夾裡的一個檔案

    剛剛所講的方式,會產生內部資料表(Internal Table)。
    有內部就會有外部 (External Table) 。
    這兩種資料表的差異等一下會提到。


所以為什麼沒有人會在HIVE裡面下 INSERT 命令 ?

因為每一筆資料都是一個檔案

Insert N 筆資料,就會有 N 個檔案啊!!!


那應該要怎麼建立資料呢?

  • 在 HDFS 裡面,put 檔案到 table 的資料夾裡面

  • hdfs dfs -put [檔案] [table資料夾路徑]

    可是這樣好麻煩,要一直在 HIVE 跟 HDFS 之間跳來跳去的
    (這樣不是跟方唐鏡一樣討厭了嗎? 我跳進去啦 我又跳出來啦 揍我啊笨蛋!)

    所以我們可不可以在HDFS下面把資料拿出來,丟進HIVE裡,然後在同時建立 table 呢?

    可以的!
    就讓我們開始吧

更方便的建立資料 (External Table)

  1. 在 HDFS 建立一個資料夾
    hdfs dfs -mkdir [資料夾名稱]

  2. 把資料放進建立好的資料夾
    hdfs dfs -put [檔案位置] [資料夾名稱]

  3. 建立一個.hive檔案
    nano [name].hive

    • 檔案內容 :
      CREATE EXTERNAL TABLE zipcode ( cname STRING, dname STRING, zcode STRING )
      ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
      STORED AS TEXTFILE LOCATION '/user/dsa101/tw.zipcode';
    • Internal Table --> /user/dsa101/hive --> 內部資料表才會產生000000_0檔案
    • External Table --> /dataset/ --> 外部資料表的來源是原來的檔案
  4. 直接在HDFS裡,執行.hive檔
    hive -S -f [.hive檔名稱]

    • -f : SQL from files
  5. 查看
    hive -S -e "show tables"

    • -e : SQL from command line

[Hadoop] Hadoop叢集系統

製作Docker Image

建立

docker-compose -f hdp311.yml up -d

檢視

docker-compse -f hdp311.yml ps

啟動

docker-compose -f hdp311.yml start

關機

docker-compose -f hdp311.yml stop

移除

docker-compose -f hdp311.yml down


[加映場] Hadoop vs Spark

如果Spark要離開Hadoop,Spark的系統要改成

  • HDFS --> Amazon S3
  • YARN --> Standalone
  • MapReduce --> RDD (Resilient Distributed Datasets)

[Hadoop] Hadoop Architecture

Hadoop 基礎架構

Hadoop包含了四大基本模組:

  • Hadoop Common: The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN: A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
  • Others: Spark RDD

MapReducer Programming Model

MapReducer可使用多種程式語言,但Java最快速。

  • 內部邏輯
    HDFS (Input) --> Splitting --> Mapping -->透過網路 --> Shuffling --> Reducing --> HDFS (Final Result)
    MapReducer分成Map與Reduce,中間必須透過網路傳輸。
    Shuffling: 負責資料彙整; 由YARN的Node Manager執行。

  • Mapreducer 與 Spark RDD 比較
    MapReducer --> Disk Killer
    Spark RDD --> Memory Killer

[Hadoop] 下載資料&資料分析

下載資料

wget

檢視資料

  • 查看前N筆資料
    head -n N [file_name]
  • 查看後N筆資料
    tail -n N [file_name]
  • 尋找含關鍵字的資料
    `grep ["key_word"] [file_name]

啟動pig

pig

建立資料夾

mkdir [資料夾名稱]

將檔案放到pig裡面

copyfromlocal [檔案名稱] [資料夾名稱] --這個指令等同於 --> hdfs dfs -put [檔案名稱] [資料夾位置]

載入 & 分析檔案

  1. 用變數載入檔案
    [代號_載入檔案名稱] = LOAD ["檔案位置"] USING PigStorage(',');
  2. 篩選
    [代號_篩選資料] = FILTER [檔案名稱] BY (float)$[欄位]>[條件];
  3. 撰寫 -> 編譯 -> 執行 -> 顯示
    dump [代號_篩選資料];
  • ex :
    grunt> movies = LOAD '/dataset/movies_data.csv' USING PigStorage(',');
    grunt> a = FILTER movies BY (float)$3>2.0;
    grunt> dump a;

篩選指令整理

FILTER

[代號] = FILTER [代號] BY ([表達式]) and ([表達式]) ;

GROUP

[代號] = GROUP [代號] BY [欄位];

  • 一定會產生新的dataset

ORDER

[代號] = ORDER [代號] BY [欄位] [ASC|DESC];

只取得前N筆資料

limit [代號_檔案] [筆數];

FOREACH

[代號] = FOREACH [代號] GENERATE [欄位], [欄位], [欄位], ...;

在pig環境外編輯及執行pig指令

  1. 建立文件
    nano [pig檔案名稱]
  2. 編輯檔案
  3. 執行
    pig [檔案名稱]
  • 如果只想看到結果,不想看到錯誤指令
    pig [檔案名稱] 2>/dev/null ( 2>/dev/null 可以把垃圾訊息丟進黑洞 )

為什麼執行速度很慢???

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.