天天看點

玩轉阿裡雲EMR三部曲-進階篇 互動式查詢及統一資料源

作者:鄧力,entobit技術總監,八年大資料從業經曆,由一代HADOOP入坑,深耕雲計算應用領域,由從事亞馬遜EMR和阿裡雲EMR應用開發逐漸轉入大資料架構領域,對大資料生态及架構應用有深刻了解。

引言

筆者近幾年工作以架構為主,本系列文章旨在從系統架構層面提供一定參考和幫助。

本文預設閱讀文章的小夥伴們有MR/SPARK等基礎,文中不再重複介紹相關知識。

本文為玩轉阿裡雲EMR系列最終篇,第一篇文章為基礎介紹和樣例實戰,可以檢視

玩轉阿裡雲EMR三部曲-入門篇 ,第二篇文章為內建自有服務于EMR,可以檢視 玩轉阿裡雲EMR三部曲-內建篇

多樣化的資料需求

随着資料越來越多,商務和營運同學們需求更多的資料開發和維護,但是研發同學忙于産品線,沒有足夠的資源可以持續滿足日益增多的資料開發。

寶貴的硬碟空間

之前資料結果集中存放于自有的FTP伺服器,磁盤空間越來越緊張,需要不停的增加硬碟,也會受到單節點磁盤性能的影響。

不統一的資料源

不同的業務線使用了不同的資料庫,有一些類日志行為使用MONGODB,事務類使用了MYSQL,還有搜尋服務等,不同的資料源極大增加了開發/維護的難度

尋找解決方案

目标

  • 統一資料源
  • 釋放單點硬碟瓶頸
  • 引入互動式類SQL查詢

方案選型

1.阿裡雲資料湖

2.基于EMR定制

3.自建加定制混合雲

三種方案成熟,最終都能達到效果。不同的公司/組織架構會有差異化,以下是三種方案的側重點

  • 阿裡雲資料湖

    完美相容阿裡雲生态下的各種服務,比如OSS,阿裡雲MYSQL版,阿裡雲MONGODB版,圖形化界面

  • 基于EMR定制

    完美相容OSS,相容自有MYSQL,MONGODB等,圖形化界面(hue)

  • 混合雲

    自有IDC與阿裡雲結合

其中阿裡雲資料湖也可以相容自有MYSQL/MONGODB服務等,隻不過可能會因為版本不同有異常問題。

一點點建議:

  • 首選阿裡雲資料湖
  • 次選EMR定制
  • 忽略成本問題可以參考混合雲

團隊控制成本非常嚴格,是以這次隻能選用的是方案2-基于EMR定制

實作細節

1.建立EMR包月叢集,可以參考玩轉

阿裡雲EMR三部曲-入門篇

2.等待叢集建立成功,在EMR控制台界面修改HIVE參數 hive.execution.engine=tez,重新開機HIVE服務

玩轉阿裡雲EMR三部曲-進階篇 互動式查詢及統一資料源

3.登陸MASTER并檢視HUE服務是否正常,不正常重新啟動HUE程序 參考指令(預設端口為8888)

/usr/lib/hue-current/build/env/bin/supervisor >/dev/null 2>&1 &           

4.綁定域名至阿裡雲ECSIP

5.利用域名綁定ECS NGINX跳轉MASTER端口開啟公網HUE服務

# nginx核心部分
upstream hue {
    server ip:8888 max_fails=3 fail_timeout=20s;
}

server {
    listen 80;
    server_name HOSTNAME;
    location / {
        proxy_pass http://hue;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-SSL-Protocol $ssl_protocol;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-HTTPS-Protocol $ssl_protocol;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_send_timeout 300;
        proxy_read_timeout 300;
    }
}
           

重新開機或者重載NGINX服務

備注:

  • 這裡可以設定IP黑白名單
  • 開啟公網TEZUI可以類似設定
  • 如果實在沒有域名可以在EMR安全組設定打開公網端口通路,不推薦

    登陸公網域名并通路HUE,其中域名為NGINX内配置加域名字尾,比如:hue.abcd.com。預設賬号和密碼可以在EMR控制台檢視,這裡涉及安全問題不予描述

6.登陸公網域名并通路HUE,其中域名為NGINX内配置加域名字尾,比如:hue.abcd.com。預設賬号和密碼可以在EMR控制台檢視,這裡涉及安全問題不予描述

玩轉阿裡雲EMR三部曲-進階篇 互動式查詢及統一資料源

7.進入notebook工作台頁面,在IDE内可以建表并查詢如下:

// 建測試表
create external table a (
  c0 bigint,
  day string,
  name string,
  channel string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
location 'oss://xxx:[email protected]/daily/test/'

// 查詢
select * from a limit 10

// 結果
2018-04-19    2018-07-04    一代傾城逐浪花    youku
2018-04-22    2018-09-02    喪屍屠城2    iqiyi
2018-08-07    2018-08-08    前任攻略    letv
2018-08-07    2018-08-08    複仇者聯盟2:奧創紀元    letv
2018-04-18    2018-09-02    外八門之雪域魔窟    iqiyi
           

8.引入更多支援格式,統一資料源,添加JSON格式JAR包,MONGDODB驅動等等

// 下載下傳JAR包
wget "http://www.congiu.net/hive-json-serde/1.3.8/cdh5/json-serde-1.3.8-jar-with-dependencies.jar"
// 拷貝至hive jar路徑
cp json-serde-1.3.8-jar-with-dependencies.jar /usr/lib/hive-current/lib/
// 利用EMR控制台重新開機HIVE服務
// 建立json表,注意key大小寫映射
CREATE EXTERNAL TABLE default.json_test (isOriginal BOOLEAN,`@timestamp` STRING,official_account STRING,down BIGINT,duration BIGINT)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties ("mapping.isOriginal"="isOriginal")
location 'oss://xxx:[email protected]/json/test/'           

9.檢視正在執行的任務可以檢視連結

http://hue.abcd.com/jobbrowser/

或者通過TEZUI頁面檢視

更多思考

1.包月叢集任務優先級或者資源如何隔離:使用隊列

2.包月叢集在某個時間段負載過高如何解決: 使用EMR彈性伸縮,可以更具CPU負載或者時間設定增加/縮減節點數量

3.統計結果查詢過慢如何解決:可以使用HUE打開IMPALA/PRESTO查詢接口,使用新引擎接口可以更快查詢

4.營運報表次元太多,每次HIVE計算過慢,IMPALA有記憶體限制:可以采用預計算機制,提前計算中間表,更好的方案是SparkSQL, 3.22版本支援RelationalCache,除此之外還有阿裡雲DRUID,但更适用于通用報表統計,adhoc需求推薦使用SparkSQL實作

5.包月叢集磁盤空間已滿:善用OSS作為備份存儲或者開啟JINDOFS檔案系統(強烈推薦)

使用OSS作為存儲,請使用external建立外表,否則drop會删除OSS資料

總結

利用阿裡雲EMR生态定制化叢集,實作資料倉庫滿足商業/營運的查詢需求,并提供橫向擴充提升性能的空間,結合多樣服務達到資料互動查詢及統一資料源下的最佳成本控制。

歡迎對EMR及相關技術感興趣的同學進釘釘群一起讨論 :)

玩轉阿裡雲EMR三部曲-進階篇 互動式查詢及統一資料源

繼續閱讀