HDFS集成
存储共享架构
当前,TSFile(包括TSFile文件和相关的数据文件)支持存储在本地文件系统和Hadoop分布式文件系统(HDFS)。配置使用HDFS存储TSFile十分容易。
系统架构
当你配置使用HDFS存储TSFile之后,你的数据文件将会被分布式存储。系统架构如下:

Config and usage
如果你希望将TSFile存储在HDFS上,可以遵循以下步骤:
首先下载对应版本的源码发布版或者下载 github 仓库
使用maven打包server和Hadoop模块:mvn clean package -pl server,hadoop -am -Dmaven.test.skip=true -P get-jar-with-dependencies
然后,将Hadoop模块的target jar包hadoop-tsfile-X.X.X-jar-with-dependencies.jar复制到server模块的target lib文件夹 .../server/target/iotdb-server-X.X.X/lib下。
编辑iotdb-engine.properties中的用户配置。相关配置项包括:
- tsfile_storage_fs
| 名字 | tsfile_storage_fs |
|---|---|
| 描述 | Tsfile和相关数据文件的存储文件系统。目前支持LOCAL(本地文件系统)和HDFS两种 |
| 类型 | String |
| 默认值 | LOCAL |
| 改后生效方式 | 仅允许在第一次启动服务器前修改 |
- core_site_path
| Name | core_site_path |
|---|---|
| 描述 | 在Tsfile和相关数据文件存储到HDFS的情况下用于配置core-site.xml的绝对路径 |
| 类型 | String |
| 默认值 | /etc/hadoop/conf/core-site.xml |
| 改后生效方式 | 重启服务器生效 |
- hdfs_site_path
| Name | hdfs_site_path |
|---|---|
| 描述 | 在Tsfile和相关数据文件存储到HDFS的情况下用于配置hdfs-site.xml的绝对路径 |
| 类型 | String |
| 默认值 | /etc/hadoop/conf/hdfs-site.xml |
| 改后生效方式 | 重启服务器生效 |
- hdfs_ip
| 名字 | hdfs_ip |
|---|---|
| 描述 | 在Tsfile和相关数据文件存储到HDFS的情况下用于配置HDFS的IP。如果配置了多于1个hdfs_ip,则表明启用了Hadoop HA |
| 类型 | String |
| 默认值 | localhost |
| 改后生效方式 | 重启服务器生效 |
- hdfs_port
| 名字 | hdfs_port |
|---|---|
| 描述 | 在Tsfile和相关数据文件存储到HDFS的情况下用于配置HDFS的端口 |
| 类型 | String |
| 默认值 | 9000 |
| 改后生效方式 | 重启服务器生效 |
- dfs_nameservices
| 名字 | hdfs_nameservices |
|---|---|
| 描述 | 在使用Hadoop HA的情况下用于配置HDFS的nameservices |
| 类型 | String |
| 默认值 | hdfsnamespace |
| 改后生效方式 | 重启服务器生效 |
- dfs_ha_namenodes
| 名字 | hdfs_ha_namenodes |
|---|---|
| 描述 | 在使用Hadoop HA的情况下用于配置HDFS的nameservices下的namenodes |
| 类型 | String |
| 默认值 | nn1,nn2 |
| 改后生效方式 | 重启服务器生效 |
- dfs_ha_automatic_failover_enabled
| 名字 | dfs_ha_automatic_failover_enabled |
|---|---|
| 描述 | 在使用Hadoop HA的情况下用于配置是否使用失败自动切换 |
| 类型 | Boolean |
| 默认值 | true |
| 改后生效方式 | 重启服务器生效 |
- dfs_client_failover_proxy_provider
| 名字 | dfs_client_failover_proxy_provider |
|---|---|
| 描述 | 在使用Hadoop HA且使用失败自动切换的情况下配置失败自动切换的实现方式 |
| 类型 | String |
| 默认值 | org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider |
| 改后生效方式 | 重启服务器生效 |
- hdfs_use_kerberos
| 名字 | hdfs_use_kerberos |
|---|---|
| 描述 | 是否使用kerberos验证访问hdfs |
| 类型 | String |
| 默认值 | false |
| 改后生效方式 | 重启服务器生效 |
- kerberos_keytab_file_path
| 名字 | kerberos_keytab_file_path |
|---|---|
| 描述 | kerberos keytab file 的完整路径 |
| 类型 | String |
| 默认值 | /path |
| 改后生效方式 | 重启服务器生效 |
- kerberos_principal
| 名字 | kerberos_principal |
|---|---|
| 描述 | Kerberos 认证原则 |
| 类型 | String |
| 默认值 | your principal |
| 改后生效方式 | 重启服务器生效 |
启动server, Tsfile将会被存储到HDFS上。
如果你想要恢复将TSFile存储到本地文件系统,只需编辑配置项tsfile_storage_fs为LOCAL。在这种情况下,如果你已经在HDFS上存储了一些数据文件,你需要将它们下载到本地,并移动到你所配置的数据文件文件夹(默认为../server/target/iotdb-server-X.X.X/data/data), 或者重新开始你的整个导入数据过程。
常见问题
- 这个功能支持哪些Hadoop版本?
A: Hadoop 2.x and Hadoop 3.x均可以支持。
- 当启动服务器或创建时间序列时,我遇到了如下错误:
1. ERROR org.apache.iotdb.tsfile.fileSystem.fsFactory.HDFSFactory:62 - Failed to get Hadoop file system. Please check your dependency of Hadoop module.
A: 这表明你没有将Hadoop模块的以来放到IoTDB server中。你可以这样解决:
- 使用Maven打包Hadoop模块:
mvn clean package -pl hadoop -am -Dmaven.test.skip=true -P get-jar-with-dependencies - 将Hadoop模块的target jar包
hadoop-tsfile-X.X.X-jar-with-dependencies.jar复制到server模块的target lib文件夹.../server/target/iotdb-server-X.X.X/lib下。
