Hive 使用 JindoSDK 处理阿里云 OSS-HDFS 服务(JindoFS 服务)上的数据§
Hive 是大数据的常用工具之一,很多用户使用 Hive 搭建离线数仓。随着数据量不断增长,传统的基于 HDFS 存储的数仓可能无法以较低成本满足用户的需求,结合对象存储等云存储使用 Hive 也是一种常见做法。如果要使用 OSS-HDFS 服务作为 Hive 数仓的底层存储,使用 JindoSDK 可以获得更好的读写性能以及更强大的技术支持。
安装配置§
1. 在 Hive 客户端或服务所在结点安装 JindoSDK。§
下载最新的 tar.gz 包 jindosdk-x.x.x.tar.gz (下载页面),解压后将sdk包安装到 Hive 的 classpath下。
cp jindosdk-x.x.x/lib/*.jar $HIVE_HOME/lib/
2. 配置 OSS-HDFS 服务实现类及 Access Key§
- 配置 JindoSDK OSS-HDFS 服务实现类
将 JindoSDK OSS-HDFS 服务实现类配置到 Hadoop 的配置文件 core-site.xml
中。
<configuration>
<property>
<name>fs.AbstractFileSystem.oss.impl</name>
<value>com.aliyun.jindodata.oss.OSS</value>
</property>
<property>
<name>fs.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
</property>
</configuration>
- 配置 OSS-HDFS 服务 Access Key
将已开启 OSS-HDFS 服务的 Bucket 对应的Access Key ID
、Access Key Secret
等预先配置在 Hadoop 的core-site.xml
中。
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxxx</value>
</property>
</configuration>
JindoSDK 还支持更多的 AccessKey 的配置方式,详情参考JindoSDK OSS-HDFS 服务 Credential Provider 配置。
3. 配置 OSS-HDFS 服务 Endpoint§
访问 OSS/OSS-HDFS Bucket时需要配置 Endpoint。推荐访问路径格式为 oss://<Bucket>
.<Endpoint>
/<Object>
,例如 oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt。配置完成后,JindoSDK会根据访问路径中的 Endpoint 访问对应的 OSS/OSS-HDFS 服务接口。
此外,您也可以通过以下方式配置默认 Endpoint,以简化访问路径格式为 oss://<Bucket>
/<Object>
,例如 oss://examplebucket/exampleobject.txt
<configuration>
<property>
<name>fs.oss.endpoint</name>
<value>xxx</value>
</property>
</configuration>
这种方式在访问路径中包含 OSS-HDFS 服务的 Endpoint,JindoSDK 会根据路径中的 Endpoint 访问对应的 OSS-HDFS 服务接口。 JindoSDK 还支持更多的 Endpoint 配置方式,详情参考 OSS-HDFS 服务 Endpoint 配置。
最后重启 Hive 所有服务,使配置生效。
4. Hive on MR§
当使用 Hive on MR 方式执行 Hive 作业时,还应保证集群所有结点均安装了 JindoSDK,需要把 jindosdk-${version}.jar
放到 $HADOOP_CLASSPATH
并重启 YARN 服务。并重启 Hive 所有服务。
5. Hive on Tez§
当使用 Hive on Tez 方式执行 Hive 作业时,还应保证配置 tez.lib.uris
所指向路径中包含 jindosdk-${version}.jar
。
6. Hive on Spark§
当使用 Hive on Spark 方式执行 Hive 作业时,请参考Spark 使用 JindoSDK 访问 OSS同时配置好 Spark。
OSS-HDFS 服务用于表的存储§
在创建数据库和表时,可以指定 OSS-HDFS 服务路径,把数据库或表的数据默认保存到 OSS-HDFS 服务上:
CREATE DATABASE db_on_oss1 LOCATION 'oss://bucket_name.endpoint_name/path/to/db1';
CREATE TABLE db2.table_on_oss ... LOCATION 'oss://bucket_name.endpoint_name/path/to/db2/tablepath';
也可以在 Hive Metastore 的 hive-site.xml 配置中设置 hive.metastore.warehouse.dir
到 OSS-HDFS 服务路径,并重启 Hive Metastore,则后续创建的数据库和这些数据库下的表都会默认存储于 OSS-HDFS 服务。
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>oss://bucket_name.endpoint_name/path/to/warehouse</value>
</property>
</configuration>
给已有表添加位于 OSS 的分区§
ALTER TABLE existed_table ADD PARTITION (dt='2021-03-01', country='cn') LOCATION 'oss://bucket_name.endpoint_name/path/to/us/part210301cn';
参数调优§
JindoSDK包含一些高级调优参数,配置方式以及配置项参考文档JindoSDK 配置项列表。