hadoop-hdfs-fuse的陷阱一例:不能更新太頻繁

筆者使用的版本是 hadoop-hdfs-fuse-2.0.0+960-1.cdh4.2.1.p0.9.el6.x86_64 ,將使用fuse導數據時出現大量IO錯誤,大致有2類:bash

fuse_dfs: ERROR /data/1/jenkins/workspace/generic-package-rhel64-6-0/topdir/BUILD/hadoop-2.0.0-cdh4.2.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/f
use_impls_open.c:128 Could not open file /hive/2012-12-12/10-31.log (errno=255)
fuse_dfs: ERROR /data/1/jenkins/workspace/generic-package-rhel64-6-0/topdir/BUILD/hadoop-2.0.0-cdh4.2.1/src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/f
use_impls_write.c:57 User trying to random access write to a file 774318412 != 770588846 for /hive/2012-12-12/05-16.log併發

掛載信息以下:dom

$ df -Th /data/mount_hadoop/
文件系統    類型      容量  已用  可用 已用%% 掛載點
fuse_dfs
     fuse.fuse_dfs     14T  427G   13T   4% /mnt/hadoopoop

腳本以下:spa

#!/bin/bash
# mkdir -pv $(ls /log/startup/)
sDir=/log/startup/
tDir=/mnt/hadoop/hive/
for Date in $(ls ${sDir})
do
    for Path in $(find ${sDir}${Date}/ -type f -name "*-open-*.parsed.gz")
    do
        Type=$(file --uncompress --mime-type ${Path} | cut -d' ' -f 2)
        if [[ "X${Type}" = "Xtext/plain" ]];then
            tag=$(echo ${Path} | awk -F'/' '{print $NF}' | cut -d '-' -f 1-2)
            tFile=${tDir}${Date}/${tag}.log
            gunzip -c ${Path} >> ${tFile}
            sleep 1
        fi
    done
done調試

這裏的陷阱就是「sleep 1」。爲何要停頓?由於若是不停頓的話,你將收到大量IO錯誤。進程

如上全是單進程寫入,不存在併發的問題。且在調試時過程,找到出錯的語句手動執行都沒有問題,加上Sleep以後,就基本不出錯了。ip

相關文章
相關標籤/搜索