Apache Storm 1.2.3升级至2.2.0时BlobStore文件找不到问题咨询
Apache Storm 1.2.3升级至2.2.0后BlobStore路径异常问题排查与解决
问题原因定位
从报错日志可明确:LocalFsBlobStore读取Blob时生成了错误路径,在实际文件名后额外追加了/data后缀,导致文件无法找到。这是因为Storm 2.x对LocalFsBlobStore的存储结构做了破坏性变更:
- Storm 1.x中,Blob文件直接存储在哈希命名的目录下(如
/grid/1/storm/blobs/967/data_all_test-xxx.jar) - Storm 2.x中,每个Blob会被放在以Blob名称命名的子目录中,子目录下存在两个文件:
data(存储实际Blob内容)和metadata(存储Blob元数据),正确路径应为/grid/1/storm/blobs/967/all_test-xxx.jar/data
相关配置说明
控制BlobStore行为的核心配置项如下,其中没有直接强制回退到1.x存储结构的开关:
storm.blobstore.class:指定BlobStore实现类,默认值为org.apache.storm.blobstore.LocalFsBlobStorestorm.local.dir:Storm本地数据根目录,BlobStore的文件默认存放在该目录下的blobs子目录中
解决方案
清空旧BlobStore数据(推荐)
升级前删除storm.local.dir/blobs目录下的所有内容,让Storm 2.x重新生成符合新结构的Blob文件。重新提交拓扑
旧拓扑的Jar包是按1.x结构存储的,需要重新提交拓扑,触发Nimbus将Jar包重新存储到2.x的BlobStore结构中。手动迁移旧数据(兼容旧拓扑)
如果无法清空旧数据,可手动将1.x格式的Blob文件迁移到2.x结构:- 为每个Blob创建以其名称命名的子目录(如
all_test-1-1667296118-stormjar.jar) - 将原Blob文件(如
data_all_test-1-1667296118-stormjar.jar)移动到该子目录下,并重命名为data
- 为每个Blob创建以其名称命名的子目录(如
关于Plaintext认证警告
你提到的以下日志并非路径问题的诱因,仅为安全提示:
PlainSaslTransportPlugin [ERROR] SASL PLAIN client transport has been established. This is totally insecure. Please do not use this.
若要消除该警告,可切换至KERBEROS等安全认证方式,但不影响BlobStore的正常功能。
内容的提问来源于stack exchange,提问作者Deepti
相关产品推荐
相关产品推荐

