Leo Yeh's Blog

資料分析 Cloudera (1)

基本介紹

教學目標

初步了解 Cloudera 資料分析師認證,以及學習如何在 Cloudera 的 CDH 環境使用 Impala 和 Hive 工具建立資料庫和查詢資料表。

重點概念

最近又開始接觸 Hadoop 平台,上網複習相關資訊,發現 Cloudera 原來除了有提供開發人員和管理人員認證之外,更有針對 SQL 開發者推出資料分析師認證 (Cloudera Certified Data Analyst,CCA Data Analyst) 。

資料分析師認證

資料分析師認證主要具備在 Cloudera 的 CDH 環境使用 Impala 和 Hive 建立報表,其中主要有三個重點,分別為資料準備、資料結構和資料分析,重點是考試是以實機操作為主,而非只考選擇題,非常值得挑戰。接下來我們就先了解三個重點的學習目標。

資料準備

使用 ETL 處理程序準備查詢資料。

資料結構

使用資料定義語言敘述建立或修改在中繼資料儲存中給 Hive/Impala 使用的結構。

資料分析

使用 Hive/Impala 中的查詢語言敘述在叢集中分析資料。

開始練習

首先我們從 Cloudera 官方網站下載 CDH 5.x 版本的 VMware 專屬虛擬機器,接著請透過 Vmware Workstation 12 Player 開啟 CDH 5.x 版本的 VMware 專屬虛擬機器,再來設定 Processors 為 2 核心,Memory 為 10 GB,最後啟動 CDH 5.XX 版本的虛擬機器。

當我們順利進入桌面之後,就能夠開始在 Cloudera 環境中練習解決如何將 MySQL 關聯式資料庫的零售業資料表透過 Sqoop 工具全部匯入至 HDFS 儲存空間中,並且透過 Hive/Impala 工具進行查詢。

建立 Hive/Impala 資料庫

在 Hive/Impala 中建立全新的資料庫。

1
$ impala-shell
1
2
> create database hadoopexamdb;
> show database;

在 Hive/Impala 中建立全空的資料庫
在 Hive/Impala 中建立全空的資料庫

透過 Hue 網站服務中的「HDFS Browser」功能確認 hadoopexamdb.db 資料庫檔案是否正常建立。

(註:登入帳密預設皆為 cloudera。)

確認資料庫檔案是否正常建立
確認資料庫檔案是否正常建立

測試 MySQL 關聯式資料庫

測試 MySQL 連線至零售業關聯式資料庫。

1
$ mysql --user=retail_dba --password=cloudera retail_db
1
> show tables;

測試 MySQL 連線至零售業專屬資料庫
測試 MySQL 連線至零售業專屬資料庫

匯入資料表至 HDFS 中

透過 Sqoop 工具匯入 MySQL 資料庫中所有資料表。

1
$ sqoop import-all-tables --connect jdbc:mysql://quickstart:3306/retail_db --username=retail_dba --password=cloudera --warehouse-dir=/user/hive/warehouse/hadoopexamdb.db --m 1

透過 Sqoop 工具匯入 MySQL 資料庫中所有資料表
透過 Sqoop 工具匯入 MySQL 資料庫中所有資料表

透過 Sqoop 工具匯入 MySQL 資料庫中所有資料表
透過 Sqoop 工具匯入 MySQL 資料庫中所有資料表

檢查每個資料表已經在 HDFS 中建立資料夾。

1
$ hdfs dfs -ls /user/hive/warehouse/hadoopexamdb.db

檢查每個資料表已經在 HDFS 中建立資料夾
檢查每個資料表已經在 HDFS 中建立資料夾

同步 Hive/Impala 資料

透過 invalidate metadata 指令將 Hive 中的資料同步至 Impala 中,然而在 Impala 中新增的資料會自動同步至 Hive 中。

1
$ impala-shell
1
> invalidate metadata

Hive 資料同步至 Impala 中
Hive 資料同步至 Impala 中

建立 Hive/Impala 資料表

在 Hive/Impala 中建立 hecategories 資料表。

1
> CREATE EXTERNAL TABLE hecategories (category_id INT, category_department_id INT, category_name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/hadoopexamdb.db/categories';

查詢 Hive/Impala 中的 hecategories 資料表資料。

1
> SELECT * FROM hecategories LIMIT 10;

在 Hive/Impala 中建立與查詢 hecategories 資料表
在 Hive/Impala 中建立與查詢 hecategories 資料表

在 Hive/Impala 中建立 hecustomers 資料表。

1
> CREATE EXTERNAL TABLE hecustomers (customer_id INT, customer_fname string, customer_lname string,  customer_email string, customer_password string, customer_street string, customer_city string, customer_state string, customer_zipcode string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/hadoopexamdb.db/customers';

查詢 Hive/Impala 中的 heustomers 資料表資料。

1
> SELECT * FROM hecustomers LIMIT 10;

在 Hive/Impala 中建立與查詢 hecustomers 資料表
在 Hive/Impala 中建立與查詢 hecustomers 資料表

在 Hive/Impala 中建立 he_order_items 資料表。

1
> CREATE EXTERNAL TABLE he_order_items (order_item_id INT, order_item_order_id INT, order_item_product_id INT, order_item_quantity tinyint, order_item_subtotal float, order_item_product_price float) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/hadoopexamdb.db/order_items';

查詢 Hive/Impala 中的 he_order_items 資料表資料。

1
> SELECT * FROM he_order_items LIMIT 10;

在 Hive/Impala 中建立與查詢 he_order_items 資料表
在 Hive/Impala 中建立與查詢 he_order_items 資料表

在 Hive/Impala 中建立 hedepartments 資料表。

1
> CREATE EXTERNAL TABLE hedepartments (department_id INT, department_name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/hadoopexamdb.db/departments';

查詢 Hive/Impala 中的 hedepartments 資料表資料。

1
> SELECT * FROM hedepartments LIMIT 10;

在 Hive/Impala 中建立與查詢 hedepartments 資料表
在 Hive/Impala 中建立與查詢 hedepartments 資料表

在 Hive/Impala 中建立 heorders 資料表。

1
> CREATE EXTERNAL TABLE heorders (order_id INT, order_date timestamp, order_customer_id INT, order_status string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/hadoopexamdb.db/orders';

查詢 Hive/Impala 中的 heorders 資料表資料。

1
> SELECT * FROM heorders LIMIT 10;

在 Hive/Impala 中建立與查詢 heorders  資料表
在 Hive/Impala 中建立與查詢 heorders 資料表

在 Hive/Impala 中建立 heproducts 資料表。

1
> CREATE EXTERNAL TABLE heproducts (product_id INT, product_category_id INT, product_name string, product_description string, product_price float, product_image string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hive/warehouse/hadoopexamdb.db/products';

查詢 Hive/Impala 中的 heproducts 資料表資料。

1
> SELECT * FROM heproducts LIMIT 10;

在 Hive/Impala 中建立與查詢 heproducts 資料表
在 Hive/Impala 中建立與查詢 heproducts 資料表

刪除 Hive/Impala 資料庫

透過 Hive/Impala 刪除在資料庫,其中 cascade 選項代表將會刪除所有來自於資料庫的資料表。

1
$ impala-shell
1
2
> use default;
> drop database hadoopexamdb cascade;

總結我們透過 Cloudera 的 CDH 環境就能夠快速透過 Sqoop 工具將關聯式資料庫的資料在 HDFS 儲存空間中建立資料庫檔案,同時使用 Impala 和 Hive 建立資料庫和查詢資料表,以利我們準備 Cloudera 資料分析師認證 (Cloudera Certified Data Analyst,CCA Data Analyst) 考試。

相關資源

⬅️ Go back