Spark/Hive/HDFS使用JindoSDK访问OSS-HDFS服务
本文介绍如何通过在CDP集群中部署JindoSDK(4.5.0),访问OSS-HDFS服务相关操作。
背景信息
OSS-HDFS服务是一款云原生数据湖存储产品,基于统一的元数据管理能力,在完全兼容HDFS文件系统接口的同时,提供充分的POSIX能力支持,能更好的满足大数据和AI领域丰富多样的数据湖计算场景,详细信息请参见OSS-HDFS服务概述。
前提条件
已创建CDP环境。具体步骤,请参见创建CDP运行环境。
操作流程
步骤一:开启OSS-HDFS
步骤二:获取HDFS服务域名
步骤三:在CDP集群中使用OSS-HDFS
步骤一:开启OSS-HDFS
开通并授权访问OSS-HDFS服务,具体操作请参见开通并授权访问OSS-HDFS服务。
步骤二:查看HDFS服务域名(endpoint)
在OSS管理控制台的概览页面,可以查看HDFS服务的域名
步骤三:在CDP集群中使用OSS-HDFS
登录CDP集群服务器
下载并解压JindoSDK JAR包。
执行以下命令,下载4.5.0版本JindoSDK JAR包。
wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/4.5.0/jindosdk-4.5.0.tar.gz
解压JindoSDK JAR包。
sudo tar zxvf jindosdk-4.5.0.tar.gz -C /usr/lib/
将已下载的JindoSDK JAR包安装到class path下(所有节点都要执行)
#hadoop sudo cp /usr/lib/jindosdk-4.5.0/lib/*.jar /opt/cloudera/parcels/CDH/lib/hadoop/lib/ #spark sudo cp /usr/lib/jindosdk-4.5.0/lib/*.jar /opt/cloudera/parcels/CDH/lib/spark/jars/ #hive sudo cp /usr/lib/jindosdk-4.5.0/lib/*.jar /opt/cloudera/parcels/CDH/lib/hive/auxlib/
在CM管控core-site.xml中配置OSS-HDFS服务实现类及AccessKey。
<configuration> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOSS</value> </property> <property> <name>fs.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value> </property> <property> <name>fs.oss.accessKeyId</name> <value>LTAI5t7h6SgiLSganP2m****</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>KZo149BD9GLPNiDIEmdQ7d****</value> </property> </configuration>
重启Hive/Hive-on-Tez/Spark/HDFS服务
配置Yarn MR 分发JARS
使用HDFS Shell访问OSS-HDFS服务
# 上传文件
hdfs dfs -put WordCount.txt oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/dir/
# 新建目录
hdfs dfs -mkdir oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/dir/
# 查看文件或目录信息
hdfs dfs -ls oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/
# 使用Hadoop distcp上传hdfs文件到oss
hadoop distcp -skipcrccheck /warehouse/tablespace/external/hive/ oss://<yourBucketName>.<yourBucketEndpoint>/<path>/
使用Hive访问OSS-HDFS服务
-- 创建数据库时指定OSS-HDFS服务路径
CREATE DATABASE db_on_oss LOCATION 'oss://<yourBucketName>.<yourBucketEndpoint>/<path>/';
-- 创建表时指定OSS-HDFS服务路径
CREATE TABLE db_on_oss.table_on_oss ... LOCATION 'oss://<yourBucketName>.<yourBucketEndpoint>/<path>/';
-- 向表中插入数据
insert into table db_on_oss.table_on_oss values ("***");
使用Spark访问OSS-HDFS服务
使用Spark-shell访问OSS-HDFS
# 读取txt文件执行WordCount val text_file = sc.textFile("oss://<yourBucketName>.<yourBucketEndpoint>/data/WordCount.txt") val counts = text_file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) counts.collect().foreach(println) # 将结果 counts.saveAsTextFile("oss://<yourBucketName>.<yourBucketEndpoint>/data/result/")
在提交spark-submit任务时除了可以在core-site.xml配置,还可以直接在conf中配置
spark-submit --conf spark.hadoop.fs.AbstractFileSystem.oss.impl=com.aliyun.jindodata.oss.OSS --conf spark.hadoop.fs.oss.impl=com.aliyun.jindodata.oss.JindoOssFileSystem --conf spark.hadoop.fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --conf spark.hadoop.fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7d****
上述文本中
<yourBucketName>.<yourBucketEndpoint>
为步骤二:获取HDFS服务域名中您获取到的HDFS服务的域名。本示例使用OSS-HDFS的域名作为路径的前缀。如果您希望只使用Bucket名称来指向OSS-HDFS,则可以配置Bucket级别的Endpoint或全局Endpoint,具体操作请参见附录一:配置Endpoint的其他方式。