大数据上云第一课:MaxCompute授权和外表操作躲坑指南
一、子賬號(hào)創(chuàng)建、AK信息綁定
如果您是第一次使用子賬號(hào)登錄數(shù)加平臺(tái)和使用DataWorks,需要確認(rèn)以下信息:
? 該子賬號(hào)所屬主賬號(hào)的企業(yè)別名。
? 該子賬號(hào)的用戶(hù)名和密碼。
? 該子賬號(hào)的AccessKey ID和AccessKey Secret。
? 確認(rèn)主賬號(hào)已經(jīng)允許子賬號(hào)啟用控制臺(tái)登錄。
? 確認(rèn)主賬號(hào)已經(jīng)允許子賬號(hào)自主管理AccessKey。
1、子賬號(hào)創(chuàng)建
(1)創(chuàng)建子賬號(hào)
(2)綁定AK信息
(3)DataWorks給定角色
(1)使用阿里云賬號(hào)(主賬號(hào))登錄RAM控制臺(tái)。
(2)在左側(cè)導(dǎo)航欄的人員管理菜單下,單擊用戶(hù)。
(3)單擊新建用戶(hù)。
(4)輸入登錄名稱(chēng)和顯示名稱(chēng)。
(5)在訪(fǎng)問(wèn)方式區(qū)域下,選擇控制臺(tái)密碼登錄。
(6)單擊確認(rèn)。
2、創(chuàng)建RAM子賬號(hào)的訪(fǎng)問(wèn)密鑰
訪(fǎng)問(wèn)密鑰對(duì)開(kāi)發(fā)人員在DataWorks中創(chuàng)建的任務(wù)順利運(yùn)行非常重要,該密鑰區(qū)別于登錄時(shí)填寫(xiě)的賬號(hào)和密碼,主要用于在阿里云各產(chǎn)品間互相認(rèn)證使用權(quán)限。因此主賬號(hào)需要為子賬號(hào)創(chuàng)建AccessKey。創(chuàng)建成功后,請(qǐng)盡可能保證AccessKey ID和AccessKey Secret的安全,切勿讓他人知曉,一旦有泄漏的風(fēng)險(xiǎn),請(qǐng)及時(shí)禁用和更新。運(yùn)行密鑰AK包括AccessKey ID和AccessKey Secret兩部分。如果云賬號(hào)允許RAM用戶(hù)自主管理AccessKey,RAM用戶(hù)也可以自行創(chuàng)建AccessKey。
為子賬號(hào)創(chuàng)建AccessKey的操作如下所示。
(1)在左側(cè)導(dǎo)航欄的人員管理菜單下,單擊用戶(hù)。
(2)在用戶(hù)登錄名稱(chēng)/顯示名稱(chēng)列表下,單擊目標(biāo)RAM用戶(hù)名稱(chēng)。
(3)在用戶(hù)AccessKey 區(qū)域下,單擊創(chuàng)建新的AccessKey。
(4)單擊確認(rèn)。
3、給RAM子賬號(hào)授權(quán)
如果您需要讓子賬號(hào)能夠創(chuàng)建DataWorks工作空間,需要給子賬號(hào)授予AliyunDataWorksFullAccess權(quán)限。
(1)在左側(cè)導(dǎo)航欄的人員管理菜單下,單擊用戶(hù)。
(2)在用戶(hù)登錄名稱(chēng)/顯示名稱(chēng)列表下,找到目標(biāo)RAM用戶(hù)。
(3)單擊添加權(quán)限,被授權(quán)主體會(huì)自動(dòng)填入。
(4)在左側(cè)權(quán)限策略名稱(chēng)列表下,單擊需要授予RAM用戶(hù)的權(quán)限策略。
(5)單擊確定。
(6)單擊完成。
二、子賬號(hào)生產(chǎn)環(huán)境創(chuàng)建函數(shù)、訪(fǎng)問(wèn)資源授權(quán),OSS外部表授權(quán)
1、賬號(hào)生產(chǎn)環(huán)境創(chuàng)建函數(shù)、訪(fǎng)問(wèn)資源授權(quán)
子賬號(hào)登錄DataWorks控制臺(tái)之后,單擊工作空間管理,成員管理給該子賬號(hào)一個(gè)相應(yīng)的角色。各角色對(duì)應(yīng)的權(quán)限可以在工作空間管理界面的權(quán)限列表查看。此處添加的成員角色對(duì)生產(chǎn)環(huán)境是隔離的。下面介紹一下生產(chǎn)環(huán)境創(chuàng)建函數(shù)、訪(fǎng)問(wèn)資源授權(quán)。
(1)創(chuàng)建一個(gè)新的角色,給角色授權(quán)。
(2)創(chuàng)建UDF函數(shù)。
CREATE FUNCTION banzha_udf as 'com.aliyun.udf.test.UDF_DEMO' using '1218.jar';前提條件是已經(jīng)上傳1818.jar包。資源上傳結(jié)合搬站第一課視頻。
2、OSS訪(fǎng)問(wèn)授權(quán)
MaxCompute需要直接訪(fǎng)問(wèn)OSS的數(shù)據(jù),前提是需要您將OSS的數(shù)據(jù)相關(guān)權(quán)限賦給MaxCompute的訪(fǎng)問(wèn)賬號(hào)。如果沒(méi)有進(jìn)行相應(yīng)授權(quán)創(chuàng),創(chuàng)建外部表會(huì)發(fā)現(xiàn)報(bào)錯(cuò)如下:
此時(shí)需要我們授權(quán)去訪(fǎng)問(wèn)OSS
授權(quán)方式有兩種:
(1)當(dāng)MaxCompute和OSS的Owner是同一個(gè)賬號(hào)時(shí),可以直接登錄阿里云賬號(hào)后,單擊此處完成一鍵授權(quán)。一鍵授權(quán),我們可以在訪(fǎng)問(wèn)控制給改子賬號(hào)添加管理對(duì)象存儲(chǔ)服務(wù)(OSS)權(quán)限(AliyunOSSFullAccess)。
(2)自定義授權(quán)
a.新增一個(gè)RAM角色oss-admin
b.修改角色策略?xún)?nèi)容設(shè)置
c.授予角色訪(fǎng)問(wèn)OSS必要的權(quán)限AliyunODPSRolePolicy
{ "Version": "1", "Statement": [ { "Action": [ "oss:ListBuckets", "oss:GetObject", "oss:ListObjects", "oss:PutObject", "oss:DeleteObject", "oss:AbortMultipartUpload", "oss:ListParts" ], "Resource": "*", "Effect": "Allow" } ] } --可自定義其它權(quán)限。d.將權(quán)限AliyunODPSRolePolicy授權(quán)給該角色。
三、OSS外部表創(chuàng)建指引
1、外部表創(chuàng)建的語(yǔ)法格式介紹
(1)外部表創(chuàng)建示例:
(2)LOCATION說(shuō)明
LOCATION必須指定一個(gè)OSS目錄,默認(rèn)系統(tǒng)會(huì)讀取這個(gè)目錄下所有的文件。
建議您使用OSS提供的內(nèi)網(wǎng)域名,否則將產(chǎn)生OSS流量費(fèi)用。
訪(fǎng)問(wèn)OSS外部表,目前不支持使用外網(wǎng)Endpoint。
目前STORE AS單個(gè)文件大小不能超過(guò)3G,如果文件過(guò)大,建議split拆分。
建議您OSS數(shù)據(jù)存放的區(qū)域?qū)?yīng)您開(kāi)通MaxCompute的區(qū)域。由于MaxCompute只有在部分區(qū)域部署,我們不承諾跨區(qū)域的數(shù)據(jù)連通性。
(3)外部表創(chuàng)建格式說(shuō)明
語(yǔ)法格式與Hive的語(yǔ)法相當(dāng)接近,但需注意以下問(wèn)題。
(4)用Arn、AK兩種認(rèn)證方式建外表示例
a.用RAM中具體使用的Role的Arn的信息創(chuàng)建外部表
當(dāng)關(guān)聯(lián)OSS權(quán)限使用STS模式授權(quán)時(shí),需要該參數(shù)指定odps.properties.rolearn屬性,屬性值為RAM中具體使用的Role的Arn的信息。
示例如下:
CREATE EXTERNAL TABLE IF NOT EXISTS fc_csv ( vehicleId string, recordId string, patientId string, calls string, locationLatitute string, locationLongtitue string, recordTime string, direction string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES('separatorChar'=',','odps.properties.rolearn'='acs:ram::1928466352305391:role/oss-admin') STORED AS TEXTFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-odps-bucket/extra_test/fc_csv';b.明文AK創(chuàng)建外部表(不推薦使用這種方式)
如果不使用STS模式授權(quán),則無(wú)需指定odps.properties.rolearn屬性,直接在Location傳入明文AccessKeyId和AccessKeySecret。
Location如果關(guān)聯(lián)OSS,需使用明文AK,寫(xiě)法如下所示。
示例如下:
CREATE EXTERNAL TABLE IF NOT EXISTS fc_csv1 ( vehicleId string, recordId string, patientId string, calls string, locationLatitute string, locationLongtitue string, recordTime string, direction string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES('separatorChar'=',','odps.properties.rolearn'='acs:ram::1928466352305391:role/oss-admin') STORED AS TEXTFILE -- LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-odps-bucket/extra_test/fc_csv'; LOCATION 'oss://LTAI4FfgVEQQwsNQ*******:J8FGZaoj2CMcunFrVn1FrL*****wM@oss-cn-beijing-internal.aliyuncs.com/oss-odps-bucket/extra_test/fc_csv';2、創(chuàng)建 Rcfile 類(lèi)型的外部表
(1)查詢(xún)HIVE表schema
結(jié)果如下:
CREATE TABLE `fc_rcfile`( `id` int, `name` string) PARTITIONED BY ( `time_ds` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat' LOCATION 'hdfs://emr-header-1.cluster-138804:9000/user/hive/warehouse/extra_demo.db/fc_rcfile'(2)在MaxCompute創(chuàng)建外部表
CREATE EXTERNAL TABLE IF NOT EXISTS fc_rcfile ( `id` int, `name` string) PARTITIONED BY ( `time_ds` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS RCFILE LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/oss-huabei2/jianwei/fc_rcfile/';(3)添加分區(qū)
alter table fc_rcfile ADD PARTITION (time_ds = '20191209') ; alter table fc_rcfile ADD PARTITION (time_ds = '20191210') ; alter table fc_rcfile ADD PARTITION (time_ds = '20191211') ; 批量創(chuàng)建分區(qū)可參數(shù)使用MMA工具(4)查詢(xún)數(shù)據(jù)
select * from fc_rcfile where time_ds = '20191209' ; select * from fc_rcfile where time_ds = '20191210' ; select * from fc_rcfile where time_ds = '20191211' ;3、創(chuàng)建Json類(lèi)型的外部表
(1)創(chuàng)建Json類(lèi)型的外部表
(2)在對(duì)應(yīng)的OSS控制臺(tái)bucket上傳Json文件數(shù)據(jù)。
(3)查詢(xún)外部表的數(shù)據(jù)
報(bào)錯(cuò)信息如下所示:
解決辦法:需要設(shè)置開(kāi)啟hive兼容的flag。
重新查詢(xún)數(shù)據(jù)即可正確返回Json數(shù)據(jù)。
以下是在Hive中查詢(xún)的數(shù)據(jù),可以看到這兩處數(shù)據(jù)是一致的。
4、創(chuàng)建CSV格式的外部表
(1)創(chuàng)建CSV格式的外部表
(2)查詢(xún)數(shù)據(jù)
set odps.sql.hive.compatible=true; select * from fc_csv;不加Hive兼容的flag設(shè)置會(huì)發(fā)現(xiàn)有如下報(bào)錯(cuò)信息:
FAILED: ODPS-0123131:User defined function exception - internal error - Fatal Error Happended
5、創(chuàng)建壓縮格式的外部表
創(chuàng)建外部表時(shí)列分隔符需要使用field.delim。選擇delimiter會(huì)報(bào)錯(cuò)或數(shù)據(jù)沒(méi)有按照預(yù)期的分割符去分割。以下分別按照兩種方式去創(chuàng)建外部表。
需要設(shè)置以下說(shuō)明的屬性flag。
(1)創(chuàng)建外部表
查詢(xún)數(shù)據(jù)的時(shí)候會(huì)發(fā)現(xiàn)數(shù)據(jù)并沒(méi)有按照我們的分隔符去進(jìn)行分割,如下圖所示:
6、創(chuàng)建存在新數(shù)據(jù)類(lèi)型的外部表
當(dāng)外部表創(chuàng)建字段涉及新數(shù)據(jù)類(lèi)型時(shí),需要開(kāi)啟新類(lèi)型flag。
否則會(huì)報(bào)如下錯(cuò)誤:
四、利用Information Schema元數(shù)據(jù)查看project、table的操作行為以及費(fèi)用計(jì)算
1、主賬號(hào)安裝package
開(kāi)始使用前,需要以Project Owner身份安裝Information Schema的權(quán)限包,獲得訪(fǎng)問(wèn)本項(xiàng)目元數(shù)據(jù)的權(quán)限。
以下錯(cuò)誤是沒(méi)有安裝對(duì)應(yīng)的Information Schema的權(quán)限包和子賬號(hào)沒(méi)有相關(guān)的權(quán)限
安裝Information Schema的權(quán)限包方式有如下兩種:
(1)在MaxCompute命令行工具(odpscmd)中執(zhí)行如下命令。
(2)在DataWorks中的數(shù)據(jù)開(kāi)發(fā) > 臨時(shí)查詢(xún)中執(zhí)行如下語(yǔ)句。
install package information_schema.systables;2、給子賬號(hào)授權(quán)
grant read on package information_schema.systables to role worker;3、查詢(xún)?cè)獢?shù)據(jù)信息
select * from information_schema.tasks_history limit 20;
TASKS_HISTORY字段列信息如下:
4、通過(guò) TASKS_HISTORY 計(jì)算SQL費(fèi)用
SQL任務(wù)按量計(jì)費(fèi):您每執(zhí)行一條SQL作業(yè),MaxCompute將根據(jù)該作業(yè)的輸入數(shù)據(jù)及該SQL的復(fù)雜度進(jìn)行計(jì)費(fèi)。該費(fèi)用在SQL執(zhí)行完成后產(chǎn)生,并在第二天做一次性的計(jì)費(fèi)結(jié)算。
計(jì)算輸入數(shù)據(jù)量:指一條SQL語(yǔ)句實(shí)際掃描的數(shù)據(jù)量,大部分的SQL語(yǔ)句有分區(qū)過(guò)濾和列裁剪,所以一般情況下這個(gè)值會(huì)遠(yuǎn)小于源表數(shù)據(jù)大小。
在 information_schema.tasks_history中字段input_bytes為實(shí)際掃描的數(shù)據(jù)量也就是我們的計(jì)算輸入數(shù)據(jù)量。字段complexity為sql復(fù)雜度。所以我們可以根據(jù)以下公式來(lái)計(jì)算SQL費(fèi)用。
歡迎加入“MaxCompute開(kāi)發(fā)者社區(qū)2群”,點(diǎn)擊鏈接MaxCompute開(kāi)發(fā)者社區(qū)2群申請(qǐng)加入或掃描以下二維碼加入。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的大数据上云第一课:MaxCompute授权和外表操作躲坑指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 云计算与星辰大海的结合
- 下一篇: 完美日记:保障电商大促活动平稳运行