本篇文章為大家展示了基于DataLakeAnalytics如何做跨地域的數(shù)據(jù)分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)成立于2013年,公司以網(wǎng)站建設(shè)、做網(wǎng)站、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上千,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
在阿里云上,很多客戶的應(yīng)用都是多地域部署的, 比如在北京(cn-beijing)的地域部署一個應(yīng)用讓北方的客戶訪問快一點,同時在杭州(cn-hangzhou)地域部署一份讓南方的客戶訪問快一點。多地域部署之后,業(yè)務(wù)數(shù)據(jù)被拆成了多份,而各個地域的數(shù)據(jù)庫都是獨立的,網(wǎng)絡(luò)又不通,給總體業(yè)務(wù)數(shù)據(jù)的分析造成了困難。今天我給大家介紹一套基于 DataLakeAnalytics, OSS, DataX 等幾個阿里云產(chǎn)品的跨地域數(shù)據(jù)分析的解決方案。
其實云產(chǎn)品本身(比如我們 DataLakeAnalytics 自己)也有跨地域數(shù)據(jù)分析的需求,這個方案也同樣適用。這個方案本來就是為了分析 DataLakeAnalytics 自己的業(yè)務(wù)數(shù)據(jù)而探索出來的。
我們知道各個地域的RDS是不通的,除非你開公網(wǎng)訪問權(quán)限(有很大的安全風(fēng)險,不推薦), 而且即使你開公網(wǎng),要對多個數(shù)據(jù)庫里面的數(shù)據(jù)進行聯(lián)合分析也不是一件容易的事情;而且這種數(shù)據(jù)分析的需求我們不希望它占用太多的預(yù)算。
我們的方案是把各個地域的數(shù)據(jù)都同步到同一個地域的OSS上面去,然后用 DataLakeAnalytics 進行聯(lián)合分析。這個方案的優(yōu)點在于 OSS 存儲收費非常便宜, DataLakeAnalytics 也是按查詢量收費的,你平時不查詢的時候一分錢都不用花??傮w方案如下圖:
我們方案的第一步是把各個地域的RDS數(shù)據(jù)同步到同一個地域的OSS里面去。阿里巴巴集團開源了一個很棒的數(shù)據(jù)搬運的工具: DataX, 可以把數(shù)據(jù)在各種不同的數(shù)據(jù)源之間進行搬運,它支持的數(shù)據(jù)源類型非常豐富: 從關(guān)系型的 MySQL, SQLServer, 到各種文件系統(tǒng)如 HDFS, OSS等等,其中我們需要的是從 MySQL 讀數(shù)據(jù)的 mysqlreader
插件以及往 OSS 寫數(shù)據(jù)的 osswriter
插件。
假定我們有下面這么一個記錄人員信息的表 person
需要同步:
create table person ( id int primary key auto_increment, name varchar(1023), age int );
我們寫一個類似下面這樣的DataX任務(wù)描述文件 person.json
:
{ "job": { "setting": { "speed": { "channel": 1, "byte": 104857600 }, "errorLimit": { "record": 10 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "your-user-name", "password": "your-password", "column": [ "id", "name", "age", ], "connection": [ { "table": [ "person" ], "jdbcUrl": [ "jdbc:mysql://your-rds.mysql.rds.aliyuncs.com:3306/dbname" ] } ] } }, "writer": { "name": "osswriter", "parameter": { "endpoint": "http://oss.aliyuncs.com", "accessId": "your-access-id", "accessKey": "your-access-secret", "bucket": "mydb-bucket", "object": "mydb/person/region=cn-hangzhou/person.csv", "encoding": "UTF-8", "fieldDelimiter": "|", "writeMode": "truncate" } } } ] } }
這里 MySQL 相關(guān)的信息填你的業(yè)務(wù)庫的信息,而 OSS 相關(guān)的信息選擇一個我們同步到的OSS的地址。注意 OSS 配置部分的 object
字段,mydb
保存你所有的數(shù)據(jù), person
這個目錄保存你的 person
表的數(shù)據(jù),region=cn-hangzhou
這個目錄就有意思了,它保存的是你的應(yīng)用在 cn-hangzhou
這個region里面的數(shù)據(jù),同樣的,你可能還會有 cn-beijing
, cn-shangahi
的數(shù)據(jù)等等。
然后執(zhí)行如下命令:
// 執(zhí)行前確保你已經(jīng)下載并正確配置好 DataX 了。 python datax/bin/datax.py person.json
正確執(zhí)行的話你會看到下面的輸出:
.....省略N行...... 2018-09-06 19:53:19.900 [job-0] INFO JobContainer - PerfTrace not enable! 2018-09-06 19:53:19.901 [job-0] INFO StandAloneJobContainerCommunicator - Total 251 records, 54067 bytes | Speed 5.28KB/s, 25 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.001s | All Task WaitReaderTime 0.026s | Percentage 100.00% 2018-09-06 19:53:19.902 [job-0] INFO JobContainer - 任務(wù)啟動時刻 : 2018-09-06 19:53:09 任務(wù)結(jié)束時刻 : 2018-09-06 19:53:19 任務(wù)總計耗時 : 10s 任務(wù)平均流量 : 5.28KB/s 記錄寫入速度 : 25rec/s 讀出記錄總數(shù) : 251 讀寫失敗總數(shù) : 0
這樣數(shù)據(jù)就自動同步到 OSS 上去了,你可以下載一個 oss-browser 去查看oss上面的數(shù)據(jù):
文件里面數(shù)據(jù)大概是這樣的:
9|ethan|10 10|julian|20 11|train|30 12|wally|40
完成了一個地域的數(shù)據(jù)搬運之后,其它地域都可以照葫蘆畫瓢,唯一需要注意的地方是,雖然 MySQL 數(shù)據(jù)是各個 地域 的數(shù)據(jù),但是 OSS 要用同一個根目錄 person
,因為我們要做數(shù)據(jù)匯集嘛,把幾個地域的數(shù)據(jù)匯集完成之后,person
目錄的結(jié)構(gòu)大概是這樣的:
下面的分析就可以交給 DataLakeAnalytics 了,分析OSS上的數(shù)據(jù)是 DataLakeAnalytics 的拿手好戲,在開始之前我們要有一個 DataLakeAnalytics 的賬號,目前 DataLakeAnalytics 正在公測,直接申請試用就好了。試用審批成功之后,你會獲得一個用戶名和密碼, 然后在控制臺登錄就可以使用:
或者如果你是極客,更偏愛命令行,你也可以使用普通的 MySQL 客戶端就可以連接 DLA 了:
mysql -hservice.cn-shanghai.datalakeanalytics.aliyuncs.com -P10000 -u<your-user-name> -p<your-password>
在這篇文章里面,我會使用 MySQL 命令行給大家演示 DLA 的功能。
首先我們來建一個 DataLakeAnalytics 的數(shù)據(jù)庫:
CREATE DATABASE `mydb` WITH DBPROPERTIES ( catalog = oss, location = 'oss://your-bucket/mydb/' );
這里的 oss://mydb-bucket/mydb/
就是前面我們數(shù)據(jù)匯聚的 person
目錄的父目錄。
建好庫之后,我們再建一個表:
CREATE EXTERNAL TABLE IF NOT EXISTS `person` ( `id` bigint, `name` varchar(128), `age` int ) PARTITIONED BY (region varchar(63)) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'oss://mydb-bucket/mydb/person';
注意這是一個分區(qū)表,分區(qū)的key是我們的region,這樣的好處一是各個地域在同步數(shù)據(jù)的時候比較簡單,不用擔(dān)心把別的地域的數(shù)據(jù)沖掉了;另外利用地域分區(qū)也使得我們在分析單個地域的時候掃描數(shù)據(jù)量會比較小,查詢速度更快。
建好表之后,我們運行如下命令讓 DataLakeAnalytics 去對OSS上的文件列表進行掃描以找到所有的 region
分區(qū):
mysql> msck repair table person; +-----------------------------------------------------------------------------------------------------------+ | Result | +-----------------------------------------------------------------------------------------------------------+ | Partitions not in metastore: person:region=cn-beijing person:region=cn-hangzhou person:region=cn-shanghai | | Repair: Added partition to metastore mydb.person:region=cn-beijing | | Repair: Added partition to metastore mydb.person:region=cn-hangzhou | | Repair: Added partition to metastore mydb.person:region=cn-shanghai | +-----------------------------------------------------------------------------------------------------------+
現(xiàn)在我們就可以開心的對所有地域的數(shù)據(jù)進行聯(lián)合查詢了 :)
mysql> select * from person limit 5; +------+-------+------+-------------+ | id | name | age | region | +------+-------+------+-------------+ | 1 | james | 10 | cn-beijing | | 2 | bond | 20 | cn-beijing | | 3 | lucy | 30 | cn-beijing | | 4 | lily | 40 | cn-beijing | | 5 | trump | 10 | cn-hangzhou | +------+-------+------+-------------+ 5 rows in set (0.43 sec) mysql> select region, count(*) cnt from person group by region; +-------------+------+ | region | cnt | +-------------+------+ | cn-beijing | 4 | | cn-hangzhou | 4 | | cn-shanghai | 4 | +-------------+------+ 3 rows in set (0.18 sec)
在這篇文章里面,我們介紹了一種通過 DataLakeAnalytics, OSS, DataX 進行跨地域數(shù)據(jù)分析的方法。限于篇幅的原因方案的很多細節(jié)沒有進一步優(yōu)化,比如我們其實可以對數(shù)據(jù)進行進一步按天分區(qū),這樣每天同步的數(shù)據(jù)可以更少,效率更高;再比如我們沒有介紹如何周期性的進行數(shù)據(jù)同步,用crontab? 還是什么調(diào)度系統(tǒng)?這些就留給讀者自己去探索了。
上述內(nèi)容就是基于DataLakeAnalytics如何做跨地域的數(shù)據(jù)分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享題目:基于DataLakeAnalytics如何做跨地域的數(shù)據(jù)分析
網(wǎng)址分享:http://muchs.cn/article40/gesoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、電子商務(wù)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、域名注冊、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)