Spark/Hive/HDFS使用JindoSDK访问OSS-HDFS服务

更新时间:

本文介绍如何通过在CDP集群中部署JindoSDK(4.5.0),访问OSS-HDFS服务相关操作。

背景信息

OSS-HDFS服务是一款云原生数据湖存储产品,基于统一的元数据管理能力,在完全兼容HDFS文件系统接口的同时,提供充分的POSIX能力支持,能更好的满足大数据和AI领域丰富多样的数据湖计算场景,详细信息请参见OSS-HDFS服务概述

前提条件

操作流程

  1. 步骤一:开启OSS-HDFS

  2. 步骤二:获取HDFS服务域名

  3. 步骤三:在CDP集群中使用OSS-HDFS

步骤一:开启OSS-HDFS

开通并授权访问OSS-HDFS服务,具体操作请参见开通并授权访问OSS-HDFS服务

步骤二:查看HDFS服务域名(endpoint)

在OSS管理控制台的概览页面,可以查看HDFS服务的域名

image

步骤三:在CDP集群中使用OSS-HDFS

  1. 登录CDP集群服务器

  2. 下载并解压JindoSDK JAR包。

    1. 执行以下命令,下载4.5.0版本JindoSDK JAR包。

      wget https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/4.5.0/jindosdk-4.5.0.tar.gz
    2. 解压JindoSDK JAR包。

      sudo tar zxvf jindosdk-4.5.0.tar.gz -C /usr/lib/

  3. 将已下载的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/
  4. 在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>
    image
  5. 重启Hive/Hive-on-Tez/Spark/HDFS服务

  6. 配置Yarn MR 分发JARS

    image

使用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/")
    imageimage
  • 在提交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的其他方式