Lindorm计算引擎提供完善的Hive数仓能力,支持与对象存储OSS之间的导入导出功能,方便进行跨数仓文件管理。本文介绍如何使用计算引擎与OSS间的数据导入导出功能。
前提条件
已开通Lindorm计算引擎。
已开通Hive Metastore服务。
操作步骤
连接计算引擎
使用Beeline访问计算引擎。连接时,需额外在
conf/beeline.conf
中添加以下配置项:# your oss accessKeyId spark.hadoop.fs.oss.accessKeyId=LTAI5tA********* # your oss accessKeySecret spark.hadoop.fs.oss.accessKeySecret=pNrAHzJ4hEQ****** # your oss endpoint spark.hadoop.fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com spark.hadoop.fs.oss.impl=org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem spark.hadoop.fs.oss.list.version=1 kyuubi.engine.share.level=CONNECTION
配置项
说明
spark.hadoop.fs.oss.endpoint
OSS的Endpoint。
spark.hadoop.fs.oss.accessKeyId
阿里云账号或RAM用户的AccessKey ID。
spark.hadoop.fs.oss.accessKeySecret
阿里云账号或RAM用户的AccessKey Secret。
spark.hadoop.fs.oss.impl
访问OSS的类。
固定值为:org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem。
在Spark作业中添加配置项
spark.sql.warehouse.dir
,指定Hive表存储的OSS路径。例如oss://<YourBucketName>/ldps_warehouse
。说明您也可以在创建namespace或者table时,通过
LOCATION
关键字指定该namespace或者table的存储路径。例如CREATE TABLE testTbl(id LONG) LOCATION "oss://<YourBucketName>/tbl_dir"
。使用该方式配置的路径会覆盖spark.sql.warehouse.dir
配置项指定的路径。
访问Hive表数据
访问方式:访问Hive数据。
将Hive数据导入OSS
您可以通过以下操作步骤,将Lindorm中的Hive数据,转化为CSV格式并存储至OSS中。
在计算引擎中创建表,指定使用CSV格式存储数据,并指定表的OSS存储路径。
CREATE TABLE my_table ( id BIGINT, data STRING, company STRING) USING CSV partitioned by (company) LOCATION 'oss://<YourBucketName>/path/to/store/data/';
写入数据。
INSERT INTO my_table SELECT 1, "my_data0", "ALIBABA" UNION ALL SELECT 1, "my_data1", "BYD";
通过上述语句,可以将数据同时写入计算引擎和OSS路径
oss://<YourBucketName>/path/to/store/data/
。由于指定的数据分区为company
字段,因此在OSS中, 数据将按照company
字段进行分区,存储在不同目录中。如下所示:您也可以查询不同的源表并写入OSS,例如查询宽表数据:
INSERT INTO my_table SELECT id, data, company FROM lindorm_table.my_lindorm_db.my_lindorm_table;
将OSS中的Hive数据导入计算引擎
假设OSS中的CSV文件的数据如下:
{"data_type":"document","version":"1.0","source":"cc","id":"sha1:223CN5DQHLZFTLCK45RGXKFIVEHU****","data":[{"meta":{"url":"http://www.publicdomainpictures.net/view-image.php?image=1446&picture=&jazyk=CN","date_download":"2017-05-22T21:56:02Z","source_domain":"www.publicdomainpictures.net","bucket":"head","title":"烟花 免费图片 - Public Domain Pictures","language":"zh","language_score":0.75,"perplexity":1073.4},"text":"烟花 高级下载\n1280 x 853 px, ▼ 3,341 次烟花,"}]}
创建OSS外表。
CREATE TABLE raw_json_data ( data_type STRING, version STRING, source STRING, id STRING, data ARRAY<STRUCT< meta: STRUCT< url: STRING, date_download: STRING, source_domain: STRING, bucket: STRING, title: STRING, language: STRING, language_score: DOUBLE, perplexity: DOUBLE >, text: STRING >> ) USING JSON LOCATION 'oss://<YourBucketName>/tbl_dir/';
创建结果表(列存表)
data_clean
,用于保存从OSS导入的数据。CREATE TABLE data_clean ( id STRING, title STRING, data_type STRING, url STRING, content STRING, source STRING, publish_time TIMESTAMP, create_time TIMESTAMP, query STRING, snippet STRING, language STRING );
将OSS外表中的部分列写入结果表
data_clean
。INSERT INTO data_clean SELECT uuid() AS id, data[0].meta.title AS title, data_type AS data_type, data[0].meta.url AS url, data[0].text AS content, source AS source, CURRENT_TIMESTAMP AS publish_time, CURRENT_TIMESTAMP AS create_time, "query", "snippet", data[0].meta.language AS language FROM raw_json_data;
(可选)您可以通过SELECT语句查询数据是否成功导入计算引擎。
SELECT * FROM data_clean;