Cloudera

SAS Viya (18)

教學目標

初步了解如何針對 Cloudera 的 Hadoop 平台將主機名稱變更為完整網域名稱,以利 SAS Viya 順利安裝。

重點概念

首先許多企業導入 Hadoop 解決方案大部份皆會採用 Cloudera 的 Hadoop 平台,但是預設主機名稱為簡短主機名稱。此時若是要安裝 SAS Viya 則需要將主機名稱設為完整網域名稱 (Fully Qualified Domain Name,FQDN),否則在設定 RabbitMQ 時會發生錯誤。

接著我們主要可以透過 /etc/hosts, /etc/sysconfig/network, hostname 等指令進行修改,並且透過 hostname 確認是否顯示為完整網域名稱,變更主機名稱為完整網域名稱不會造成 Hadoop 平台運作不正常,但是在 Cloudera 管理介面中則會產生錯誤訊息,因此我們最好針對 Cloudera 的 Hadoop 平台變更主機名稱。

再來我們要如何針對 Cloudera 的 Hadoop 平台變更主機名稱,主要以下步驟,分別為:

  1. 匯出 Cloudera Manager 的設定檔。
  2. 刪除 YARN 的 High Availability 之 Failover 設定。
  3. 停用 Cloudera Management 、 Cloudera Manager Server 和 Cloudera Manager Agents。
  4. 備份 Cloudera Manager Server 的資料庫。
  5. 修改主機名稱為完整網域名稱。
  6. 修改每台機器上的 config.ini 設定檔中的主機名稱為完整網域名稱。
  7. 啟動 Cloudera Manager Server。
  8. 啟動 Cloudera Manager Agent。
  9. 啟動 ZooKeeper Server。
  10. 重新初始化 ZooKeeper Server 的 High Availability 。
  11. 更新 Hive 的 Metastore Namenode。
  12. 啟動 Hadoop 所有叢集服務。
  13. 啟動 Cloudera Management Services。
  14. 部署 Client 設定。
  15. 設定 YARN 的 High Availability 之 Failover 設定。

最後我們可能會遇到 DNS 網域名稱解析的錯誤,此時請確認 hostname 是否回傳完整網域名稱,接著分別重新啟動 Cloudera Manager Agent 確認伺服器的健康狀態是否正常。

總結當我們確認 hostname 指令回傳為完整完整網域名稱,此時就能夠開始安裝 SAS Viya 平台。

相關資源

SAS Viya (5)

教學目標

初步了解 SAS Viya 平台如何設定從 HDFS 中讀取 CSV 檔案。

重點概念

今天在架構師的耐心指導下,了解到文件手冊和系統設定一定要再三確認,不然當發生錯誤時,就會浪費很多時間除錯,此篇主要說明當安裝完 SAS Viya 面臨無法從 HDFS 中讀取 CSV 檔案的情況時,該如何解決,以下所有內容皆在「SAS Viya 3.2 部署手冊」 中詳細說明。

首先當我們嘗試透過 SAS Visual Analytics 讀取 HDFS 時發生「無法連線至 Hadoop 群集」,此問題主要是 Hadoop 設定還未完成,此時請參考「SAS Viya 3.2 部署手冊」中的附錄E 之「Configure the Existing Cloudera Hadoop Cluster to Interoperate with the CAS Server」內容,按照步驟進行,主要步驟有:

確認關鍵檔案

請先確認 /opt/sas/viya/home/SASFoundation/hdatplugins 資料夾中是否具備下述八個檔案:

  1. /opt/sas/viya/home/SASFoundation/hdatplugins/SAS_VERSION
  2. /opt/sas/viya/home/SASFoundation/hdatplugins/sas.cas.hadoop.jar
  3. /opt/sas/viya/home/SASFoundation/hdatplugins/sas.grid.provider.yarn.jar
  4. /opt/sas/viya/home/SASFoundation/hdatplugins/sas.lasr.hadoop.jar
  5. /opt/sas/viya/home/SASFoundation/hdatplugins/sascasfd
  6. /opt/sas/viya/home/SASFoundation/hdatplugins/sashdfsfd
  7. /opt/sas/viya/home/SASFoundation/hdatplugins/start-namenode-cas-hadoop.sh
  8. /opt/sas/viya/home/SASFoundation/hdatplugins/start-datanode-cas-hadoop.sh

若檔案不存在則請透過 sudo rpm -i /sas-hdatplugins-03.00.00-20160315.083831547133.x86_64.rpm 進行安裝。

確認 Hadoop Home 目錄

請確認 Hadoop Home 目錄是否為 /opt/cloudera/parcels/CDH-version/lib/hadoop ,此時可以查看 /opt/sas/viya/home/SASFoundation/cas.settings 中的設定是否正確。

放置 JAR 檔案至每台 Hadoop 機器

請將下述三個 Jar 檔案放置每台 Hadoop 機器上的 /opt/cloudera/parcels/CDH-version/lib/hadoop/lib 目錄中,請注意若沒有放置檔案,則會在 Cloudera Manager 管理網站重新啟動 HDFS 服務時會發生錯誤。

  1. sas.cas.hadoop.jar
  2. sas.lasr.hadoop.jar
  3. sas.grid.provider.yarn.jar

放置執行檔案至每台 Hadoop 機器

請將下述四個執行檔案放置每台 Hadoop 機器上的 /opt/cloudera/parcels/CDH-version/lib/hadoop/bin 目錄中,請注意若少了 sascasfd 檔案,則會發生「HDFS 檔案遺漏資料區塊」的錯誤。

  1. sashdfsfd
  2. sascasfd
  3. start-namenode-cas-hadoop.sh
  4. start-datanode-cas-hadoop.sh

放置 SAS_VERSION 檔案至每台 Hadoop 機器

請將 SAS_VERSION 檔案放置每台 Hadoop 機器上的 /opt/cloudera/parcels/CDH-version/lib/hadoop 目錄中。

設定 HDFS 參數

開啟 Cloudera Manager 管理網站登入 Administrator 管理者帳密設定 HDFS 的參數

參數名稱 屬性值
dfs.namenode.plugins com.sas.cas.hadoop.NameNodeService
dfs.datanode.plugins com.sas.cas.hadoop.DataNodeService

接著針對 Service-Wide Group 中 Advanced 下的 HDFS Service Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml 屬性設定 XML,可以點選 「View as XML」進行設定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>com.sas.cas.service.allow.put</name>
<value>true</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.namenode.port</name>
<value>15452</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.datanode.port</name>
<value>15453</value>
</property>
<property>
<name> dfs.namenode.fs-limits.min-block-size</name>
<value>0</value>
</property>

再來針對 Gateway Default Group 中 Advanced 下的 HDFS Client Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml 屬性設定 XML。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>com.sas.cas.service.allow.put</name>
<value>true</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.namenode.port</name>
<value>15452</value>
</property>
<property>
<name>com.sas.cas.hadoop.service.datanode.port</name>
<value>15453</value>
</property>
<property>
<name> dfs.namenode.fs-limits.min-block-size</name>
<value>0</value>
</property>

最後針對 Gateway Default Group 中 Advanced 下的 HDFS Client Environment Advanced Configuration Snippet for hadoop-env.sh (Safety Valve) 屬性設定 JAVA_HOME 的變數,文件手冊中主要是寫 JAVA_HOME=/usr/lib/java/jdk1.7.0_07,但若為 JDK 8.0 ,則會是 JAVA_HOME=/usr/lib/java/jdk1.8.0,所以請特別注意 JAVA 路徑是否正確。當確認 HDFS 參數設定無誤,就能夠按下「Save」進行儲存。

重新啟動 HDFS 服務

開啟 Cloudera Manager 管理網站登入 Administrator 管理者帳密重新啟動 HFDS 服務

驗證 CAS SASHDAT 存取 HDFS

在 HDFS 中建立 test 目錄,設定權限為 777。

1
2
hadoop fs -mkdir /test
hadoop fs -chmod 777 /test

開啟 SAS Studio 網站執行下述程式驗證 CAS SASHDAT 是否能夠正常存取 HDFS。

1
2
3
4
5
6
cas mysession;
caslib testhdat datasource=(srctype="hdfs") path="/test";
proc casutil;
load data=sashelp.zipcode;
save casdata="zipcode" replace;
run;

若出現以下訊息就代表成功。

1
NOTE: Cloud Analytic Services saved the file zipcode.sashdat to HDFS in caslib
TESTHDAT.

驗證從 HDFS 中讀取 CSV 檔案

主要開啟 SAS Visual Analytics 網站,點選項目選單中「資料」,此時會頁面會轉至 SAS Environment Manager 網站中,此時我們就能夠從「資料館」中點選 HDFS 資料來源中的 CSV 檔案載入至記憶體中,請注意若載入過程中發生「HDFS 檔案遺漏資料區塊」的錯誤,那請確認是否缺少 sascasfd 檔案至 /opt/cloudera/parcels/CDH-version/lib/hadoop/bin 目錄中

此外本篇的應用情境在文件中也有提到,主要內容為 CAS SASHDAT 可以存取 HDFS , 其中 SASHDAT 檔案格式支援 SAS 格式,並且透過 CAS 最佳化記憶體處理,同時允許使用者儲存和讀取 HDFS 中的資料,請注意需要透過 SAS 針對 Hadoop 的外掛檔案在 Hadoop 節點機器上的設定才能夠完成此情境的需求,也就是本篇的重點

總結無論是「放置外掛檔案」或「HDFS 參數設定」總共九個步驟請一定要確認三次以上,因為我只確認一次沒看仔細文件手冊的關鍵內容,導致後續錯誤問題發生,浪費大家的時間,好在有架構師的耐心指導才能夠解決,真該好好反省,下次不能再犯同樣的錯誤了,若是我們設定無誤理應就能夠在 SAS Viya 中從 HDFS 中讀取 CSV 等不同格式的檔案資料,以利實踐大數據管理與進階分析的應用。

相關資源

資料分析 Cloudera (2)

基本介紹

教學目標

初步了解如何在 Cloudera 的 CDH 環境使用 Impala 和 Hive 建立資料庫和查詢資料表中統計資訊。

重點概念

在實務應用中我們將會需要將 HDFS 儲存空間中的 CSV 檔案匯入至 Hive/Impala 中的資料表,以利查詢統計資訊等應用。

建立資料表

開啟 Hive 工具。

1
$ hive

首先查看目前資料庫的資訊,是否存在 hadoopexamdb 資料庫,若不存在請先建立 hadoopexamdb 資料庫。

1
> SHOW DATABASES;

使用 hadoopexamdb 資料庫。

1
> USE hadoopexamdb;

建立 region 資料表。

1
> CREATE TABLE IF NOT EXISTS region (r_regionkey smallint, r_name string, r_comment string, r_nations array<struct<n_nationkey:smallint,n_name:string,n_comment:string>>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' COLLECTION ITEMS TERMINATED BY ',' STORED AS PARQUET;

查看 region 資料表是否成功建立成功。

1
> SHOW TABLE;

建立資料表

在 HDFS 中建立檔案

透過 Hue 網站服務在 HDFS 儲存空間的 /user/cloudera 目錄中建立 hadoopexam_101 目錄,接著新增 region.csv 檔案。

1
/user/cloudera/hadoopexam_101/region.csv

在 HDFS 中建立檔案

在 HDFS 中建立檔案

在 HDFS 中建立檔案

再來編輯 region.csv 檔案。

region.csv 檔案內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
r_regionkey|r_name|r_comment|r_nations<n_nationkey,n_name,n_comment>
1|AFRICA|Good Business Region for company.com|0,Cameroon,Reference site http://www.company.com
1|AFRICA|Good Business Region for company.com|5,Egypt,Reference site http://www.company.com
1|AFRICA|Good Business Region for company.com|14,Namibia,Reference site http://www.company.com
1|AFRICA|Good Business Region for company.com|15,Zimbabwe,Reference site http://www.company.com
1|AFRICA|Good Business Region for company.com|16,Uganda,Reference site http://www.company.com
2|AMERICA|Average Business Region for company.com|1,United States,Reference site http://www.company.com
2|AMERICA|Average Business Region for company.com|2,Canada,Reference site http://www.company.com
2|AMERICA|Average Business Region for company.com|3,Cuba,Reference site http://www.company.com
2|AMERICA|Average Business Region for company.com|17,Costa Rica,Reference site http://www.company.com
2|AMERICA|Average Business Region for company.com|24,Panama,Reference site http://www.company.com
3|ASIA|Best Business Region for company.com|8,India,Reference site http://www.company.com
3|ASIA|Best Business Region for company.com|9,China,Reference site http://www.company.com
3|ASIA|Best Business Region for company.com|12,Japan,Reference site http://www.company.com
3|ASIA|Best Business Region for company.com|18,Russia,Reference site http://www.company.com
3|ASIA|Best Business Region for company.com|21,Israel,Reference site http://www.company.com
4|EUROPE|Low sale Business Region for company.com|6,Austria,Reference site http://www.company.com
4|EUROPE|Low sale Business Region for company.com|7,Bulgaria,Reference site http://www.company.com
4|EUROPE|Low sale Business Region for company.com|19,Belgium,Reference site http://www.company.com
4|EUROPE|Low sale Business Region for company.com|22,Croatia,Reference site http://www.company.com
4|EUROPE|Low sale Business Region for company.com|23,Denmark,Reference site http://www.company.com
5|MIDDLE EAST|Ok Ok sale Business Region for company.com|4,Saudi Arabia,Reference site http://www.company.com
5|MIDDLE EAST|Ok Ok sale Business Region for company.com|10,Yemen,Reference site http://www.company.com
5|MIDDLE EAST|Ok Ok sale Business Region for company.com|11,Oman,Reference site http://www.company.com
5|MIDDLE EAST|Ok Ok sale Business Region for company.com|13,Kuwait,Reference site http://www.company.com
5|MIDDLE EAST|Ok Ok sale Business Region for company.com|20,Qatar,Reference site http://www.company.com

在 HDFS 中建立檔案

將 HDFS 中的檔案匯入至資料表中

建立 tempregion 資料表,主要用於暫存資料。

1
> CREATE TABLE tempregion(data string);

將 HDFS 儲存空間中的 /user/cloudera/hadoopexam_101/region.csv 檔案匯入至 tempregion 資料表中。

1
> LOAD DATA INPATH '/user/cloudera/hadoopexam_101/region.csv' INTO TABLE tempregion;

將 HDFS 中的檔案匯入至資料表中

查詢 tempregion 資料表的資料。

1
> SELECT * FROM tempregion LIMIT 10;

將 HDFS 中的檔案匯入至資料表中

查詢 tempregion 資料表的資料,主要根據 region 資料表的欄位進行對應,以利接下來進行匯入之前的確認。

1
> SELECT SPLIT(data,'\\|')[0] r_regionkey, SPLIT(data,'\\|')[1] r_name, SPLIT(data,'\\|')[2] r_comment, SPLIT(SPLIT(data,'\\|')[3],",")[0] n_nationkey, SPLIT(SPLIT(data,'\\|')[3],",")[1] n_name, SPLIT(SPLIT(data,'\\|')[3],",")[2] n_comment FROM tempregion;

將 HDFS 中的檔案匯入至資料表中

將 tempregion 資料表的資料匯入至 region 資料表中。

1
> INSERT OVERWRITE TABLE region SELECT SPLIT(data,'\\|')[0] r_regionkey, SPLIT(data,'\\|')[1] r_name, SPLIT(data,'\\|')[2] r_comment, ARRAY(named_struct("n_nationkey", CAST(SPLIT(SPLIT(data, '\\|')[3],",")[0] AS SMALLINT), "n_name", SPLIT(SPLIT(data, '\\|')[3],",")[1] , "n_comment", SPLIT(SPLIT(data, '\\|')[3],",")[2])) FROM tempregion;

將 HDFS 中的檔案匯入至資料表中

查詢 region 資料表的資料。

1
> SELECT * FROM region LIMIT 10;

將 HDFS 中的檔案匯入至資料表中

查詢資料表中統計資訊

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

開啟 Impala 工具。

1
$ impala-shell

同步更新 Hive 中的資料。

1
> invalidate metadata;

查詢資料表中統計資訊

查詢 region 資料表中的統計資訊。

1
2
> USE hadoopexamdb;
> SELECT r_name, COUNT(r_nations.item.n_nationkey) AS count, SUM(r_nations.item.n_nationkey) AS sum, AVG(r_nations.item.n_nationkey) AS minimum, MIN(r_nations.item.n_name) AS maximum, NDV(r_nations.item.n_nationkey) AS distinct_vals FROM region, region.r_nations as r_nations GROUP BY r_name ORDER BY r_name;

查詢資料表中統計資訊

重新更新資料表中的資料

開啟 Hive 工具。

1
$ hive

刪除 region 資料表。

1
> DROP TABLE IF EXISTS hadoopexamdb.region;

建立 region 資料表。

1
2
> USE hadoopexamdb;
> CREATE TABLE IF NOT EXISTS region (r_regionkey smallint, r_name string, r_comment string, r_nations array<struct<n_nationkey:smallint,n_name:string,n_comment:string>>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' COLLECTION ITEMS TERMINATED BY ',' STORED AS PARQUET;

將 tempregion 資料表的資料匯入至 region 資料表中。

1
> INSERT OVERWRITE TABLE hadoopexamdb.region SELECT SPLIT(data,'\\|')[0] r_regionkey, SPLIT(data,'\\|')[1] r_name, SPLIT(data,'\\|')[2] r_comment, ARRAY(named_struct("n_nationkey", CAST(SPLIT(SPLIT(data, '\\|')[3],",")[0] AS SMALLINT), "n_name", SPLIT(SPLIT(data, '\\|')[3],",")[1] , "n_comment", SPLIT(SPLIT(data, '\\|')[3],",")[2])) FROM hadoopexamdb.tempregion WHERE NOT (SPLIT(data,'\\|')[1] IN ('r_name'));

重新更新資料表中的資料

開啟 Impala 工具。

1
$ impala-shell

同步更新 Hive 中的資料。

1
> invalidate metadata;

查詢資料表中統計資訊。

1
2
> USE hadoopexamdb;
> SELECT r_name, COUNT(r_nations.item.n_nationkey) AS count, SUM(r_nations.item.n_nationkey) AS sum, AVG(r_nations.item.n_nationkey) AS minimum, MIN(r_nations.item.n_name) AS maximum, NDV(r_nations.item.n_nationkey) AS distinct_vals FROM region, region.r_nations as r_nations GROUP BY r_name ORDER BY r_name;

重新更新資料表中的資料

總結在此篇的練習中主要是以 Hive 進行資料表處理,主要原因是有些 SQL 語法 Impala 目前不支援,但是 Hive 支援,此時我們就可以先在 Hive 處理之後,再開啟 Impala 同步資料。此外我們更能夠透過 Hue 網站服務透過操作介面新建目錄和檔案至 HDFS 儲存空間中,接著再透過 Hive 將 HDFS 儲存空間中的 CSV 檔案匯入成資料表,以利查詢統計資訊等應用。

相關資源

資料分析 Cloudera (1)

基本介紹

教學目標

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

重點概念

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

資料分析師認證

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

資料準備

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

  • 透過 Sqoop 從 MySQL 資料庫匯入資料至 HDFS 中。
  • 透過 Sqoop 從 HDFS 中匯入至 MySQL 資料庫中。
  • 在中繼資料儲存內移動資料表之間的資料。
  • 在分析資料之前轉換數值、欄位和檔案格式。

資料結構

使用資料定義語言敘述建立或修改在中繼資料儲存中給 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 中建立全空的資料庫

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

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

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

測試 MySQL 關聯式資料庫

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

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

測試 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 資料庫中所有資料表

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

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

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

同步 Hive/Impala 資料

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

1
$ impala-shell
1
> invalidate metadata

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 中建立 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 中建立 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 中建立 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 中建立 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 中建立 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 資料庫

透過 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) 考試。

相關資源

Teradata 基本介紹 (8)

基本介紹

教學目標

初步了解多種基於 Hadoop 進行查詢處理的特性。

重點概念

1. Raw Map Reduce

  • Native Map Reduce processing.
  • Direct commands to Hadoop and HDFS.
  • Programming and Map Reduce skills required.
  • Batch processing focused.
  • Full flexibility to operate on any data in HDFS.
  • “Data Maniputation” more than “Query Processing”.

Example: Apache Hadoop

2. Query Engine Using HDFS Files

  • SQL query engine on Hadoop cluster.
    • Standard data dictionary/meta data.
    • Standard data format within HDFS files.
    • Data types may be limited.
  • SQL language, but standards compatibility varies.
  • Query engine maturity varies
  • Data “portable” and can be read by other systems/engines.

Example: Cloudera Impala

3. RDBMS Orchestrating Queries With Remote Access to Hadoop/Hive

  • External RDBMS sends (part of) queries to engine on Hadoop.
    • Standard data dictionary/meta data within Hadoop cluster.
    • Standard data format within HDFS files.
    • Data types may be limited by engine on Hadoop and external RDBMS.
    • SQL query engine capabilities combination of external and internal Hadoop engines.
    • Combines data and analytics in two systems.
  • SQL language, standards compatibility generally high.
  • Query engine generally mature.
  • Data “portable” and can be read by other systems/engines.

Example: Teradata QueryGrid

相關資源