作者:鄧力,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服務
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2MzN4ITO4UWZmNGOzQ2Y5gjN0kzNkJ2NyMWO0EzYjRGOjVjMjNTYx8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
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控制台檢視,這裡涉及安全問題不予描述
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及相關技術感興趣的同學進釘釘群一起讨論 :)