本文介紹如何在開源大數據平臺 EMR(E-MapReduce)集群上,使用Spark3將表格存儲中一張表的數據復制到另一張表中,全程使用SQL語句實現表的創建以及數據的復制操作。
前提條件
已創建EMR集群。具體操作,請參見創建EMR集群。
重要創建集群時,請確保打開Master節點組的掛載公網開關,將集群掛載到公網,用于遠程登錄。
不開啟"掛載公網",創建后只能通過內網訪問。創建后如果您需要公網訪問,請前往ECS掛載EIP。
已創建表格存儲數據表,且目標表的主鍵列應和需要復制的源表主鍵列保持一致(包括主鍵順序和名稱)。具體操作,請參見通過控制臺創建數據表或通過SDK創建數據表。
已創建RAM用戶,并授予RAM用戶管理表格存儲服務的權限(AliyunOTSFullAccess)。具體操作,請參見配置RAM用戶權限。
重要由于配置時需要填寫訪問密鑰AccessKey(AK)信息來執行授權,為避免阿里云賬號泄露AccessKey帶來的安全風險,建議您通過RAM用戶來完成授權和AccessKey的創建。
已獲取AccessKey(包括AccessKey ID和AccessKey Secret),用于進行簽名認證。具體操作,請參見獲取AccessKey。
步驟一:啟動Spark SQL CLI
遠程登錄EMR集群的Master節點。具體操作,請參見遠程登錄Master節點。
執行如下命令啟動Spark SQL CLI,用于Spark表創建和后續的SQL操作。
spark-sql --jars /opt/apps/SPARK-EXTENSION/spark-extension-current/spark3-emrsdk/*,/opt/apps/HADOOP-COMMON/hadoop-common-current/share/hadoop/common/lib/commons-net-3.6.jar
步驟二:創建Spark表
以兩張表格存儲數據表source_pet和target_pet為例,表結構如下,其中name為主鍵。
name | owner | species | sex | birth | death |
創建source_pet外表。
CREATE TABLE source_pet USING tablestore OPTIONS(endpoint = "https://xxx.cn-hangzhou.vpc.tablestore.aliyuncs.com", access.key.id = "xxx", access.key.secret = "xxx", table.name = "source_pet", instance.name = "test_instance", catalog = '{"columns":{"name":{"col":"name","type":"string"},"owner":{"col":"owner","type":"string"},"species":{"col":"species","type":"string"},"sex":{"col":"sex","type":"string"},"birth":{"col":"birth","type":"string"},"death":{"col":"death","type":"string"}}}' );
具體參數說明請參見下表。
參數
說明
endpoint
表格存儲實例訪問地址,建議使用VPC地址。使用VPC時,請確保EMR集群和表格存儲實例之間的網絡可連通。更多信息,請參見服務地址。
說明如果要實現跨賬號、跨地域數據復制,請通過云企業網連通VPC進行操作。關于使用云企業網的具體操作,請參見云企業網快速入門。
access.key.id
阿里云賬號或者RAM用戶的AccessKey ID和AccessKey Secret。獲取方式請參見創建AccessKey。
access.key.secret
instance.name
表格存儲實例名稱。
table.name
表格存儲的數據表名稱。
catalog
表格存儲數據表的Schema定義。
創建target_pet外表。
CREATE TABLE target_pet USING tablestore OPTIONS(endpoint = "https://xxx.cn-hangzhou.vpc.tablestore.aliyuncs.com", access.key.id = "xxx", access.key.secret = "xxx", table.name = "target_pet", instance.name = "test_instance", catalog = '{"columns":{"name":{"col":"name","type":"string"},"owner":{"col":"owner","type":"string"},"species":{"col":"species","type":"string"},"sex":{"col":"sex","type":"string"},"birth":{"col":"birth","type":"string"},"death":{"col":"death","type":"string"}}}' );
創建target_pet外表與創建source_pet外表的參數設置中只有
table.name
字段有差別,其他參數設置均相同。說明如果要實現跨賬號、跨地域數據復制,請通過云企業網連通VPC進行操作。關于使用云企業網的具體操作,請參見云企業網快速入門。
步驟三:復制數據
將source_pet表中數據復制到target_pet表中。
INSERT INTO target_pet SELECT * FROM source_pet;