Cassandra 4.1 sstableloader从Azure文件共享加载失败,本地正常
Cassandra 4.1 sstableloader加载Azure文件共享SSTable失败的解决方案
问题现象
执行sstableloader从Azure文件共享挂载目录加载SSTable时出现报错,本地磁盘加载相同文件则正常运行。核心报错信息如下:
$ sudo sstableloader -d 172.168.11.42,172.168.11.41 /mnt/cassandra/kairosdb/row_keys/ # 省略参数弃用警告信息 ERROR 13:06:42,492 [Stream #7caa25a0-fd84-11ee-8a7a-9be902713f6b] Streaming error occurred on session with peer 172.168.11.42:7000 org.apache.cassandra.io.FSWriteError: java.nio.file.FileSystemException: /mnt/cassandra/kairosdb/row_keys/me-453-big-Statistics.db.804797b0-fd84-11ee-8a7a-9be902713f6b.tmp -> /mnt/cassandra/kairosdb/row_keys/me-453-big-Statistics.db: Operation not supported at org.apache.cassandra.io.util.FileUtils.createHardLink(FileUtils.java:186) # 省略后续堆栈追踪信息
原因分析
报错堆栈明确指向FileUtils.createHardLink操作失败,本质原因是Azure文件共享(通常通过SMB协议挂载)不支持Unix硬链接,而sstableloader在处理SSTable时会尝试创建硬链接生成临时统计文件,触发了文件系统的功能限制。
解决方案
方案1:临时绕开限制——复制到本地磁盘后加载
将Azure文件共享中的SSTable复制到本地临时目录,再执行sstableloader加载本地文件:
# 复制SSTable到本地临时目录 cp -r /mnt/cassandra/kairosdb/row_keys/ /tmp/local_cassandra_sstables/ # 执行sstableloader加载本地文件 sudo sstableloader -d 172.168.11.42,172.168.11.41 /tmp/local_cassandra_sstables/
方案2:长期优化——使用Azure磁盘替代文件共享
如果需要频繁执行SSTable加载操作,建议将SSTable存储在Azure Managed Disk等支持Unix硬链接的存储介质中,直接配合sstableloader使用,省去文件复制的额外步骤。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

