使用FUSE挂载HDFS流程及错误集锦

由于要使用iozone和dd对HDFS作个简单的测试,因此须要将HDFS挂载到本地,挂载过程不复杂,但中间出现了各类各样的错误,弄了有半个星期,终于测试完毕。现将整个挂载及解决错误的过程记录下来,你们共同窗习讨论。java

1、FUSE安装node

       安装步骤很简单web

        一、解压  $ tar zxvf fuse-2.9.3.tar.gz
apache

        二、进入fuse目录  $ cd /usr/local/fuse-2.9.3
ubuntu

        三、$ ./configure
浏览器

        四、$ make
多线程

        五、$ make install
dom

        六、$ modprobe fuse (自动载入fuse模块)
异步

2、HDFS挂载async

         一、增长系统配置

              $ sudo vi /etc/profile

               增长以下内容

                 

重启集群,发现全部的datanode都在启动后的几秒钟内挂掉了,查看日志,发现报错:

FATAL ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Shutting down. Incompatible version or revision.DataNode version '1.2.1' and revision '1503152' and NameNode version '1.2.2-SNAPSHOT' and revision ' and hadoop.relaxed.worker.version.check is not enabled and hadoop.skip.worker.version.check is not enabled

版本不匹配,还觉得是ant编译过程当中使用的包的版本问题,结果使用ant clean命令把以前编译的都清除了。觉得这下应该恢复正常了,结果更糟糕的问题出现了。集群能够正常启动了,经过命令行hadoop dfsadmin -report可以看到每一个节点都处于正常状态,可是就是不能经过浏览器查看。

3、iozone测试

 iozone测试比较简单,iozone主要用来测试操做系统文件系统性能的测试工具,该工具所测试的范围主要有,Write , Re-write, Read, Re-Read, Random Read, Random Write, Random Mix, Backwards Read, Record Rewrite, Strided Read, Fwrite, Frewrite, Fread, Freread, Mmap, Async I/O。使用iozone能够在多线程、多cpu,并指定cpu cache空间大小以及同步或异步I/O读写模式的状况下进行测试文件操做性能。

命令为:iozone –s 128k –i 0 –i 1 –i 2 –i 3 –i 4 –i 5 –i 8 –t 8 –r 1m –B > test.txt

参数解释:0=write/rewrite, 1=read/re-read, 2=random-read/write 3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-fwrite, 7=fread/Re-fread, 8=random mix, 9=pwrite/Re-pwrite, 10=pread/Re-pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv).  =pread/Re-pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv,-t表示线程数,-r block size 指定一次写入/读出的块大小,-s file size 指定测试文件的大小,-f filename 指定测试文件的名字,完成后会自动删除(这个文件必须指定你要测试的那个硬盘中),-F file1 file2... 指定多线程下测试的文件名,-B或-b指定到输出文件。iozone参数不少,能够根据使用需求具体学习某个参数。

4、dd测试

 dd测试并非标准的磁盘和文件系统读写测试工具,只是Linux系统的一个磁盘命令,但dd命令实现的磁盘拷贝功能,能够间接地反映磁盘的读写能力,所以,在测试磁盘和文件系统的读写性能时,也经常经过dd命令进行测试。dd测试读写命令分开,

写入操做:dd if=/dev/zero of=/tmp/hdfs/zerofiles bs=4M count=1240 conv=fdatasync

读取操做:dd if=/tmp/hdfs/zerofiles of=/dev/null bs=4M count=1240

其中,if表示input file,即输入文件;of表示output file,即输出文件;bs表示一次读取或写入的块大小;count表示写入或读取多少块;conv表示用指定的参数转换文件。实际使用时,能够根据本身的需求进行调整。

5、总结

最后,简单总结一下遇到了几个问题及解决办法

一、FUSE编译出错: ./configure后出现error

     解决办法:在Ubuntu12.04LTS环境下,使用fuse-2.7.4或fuse-2.8.5两个版本都会出现各类各样的问题,但换用fuse-2.9.3后,再也不报错,其余版本没有进行尝试;

二、版本不匹配:使用ant对hadoop的模块fuse-dfs编译后,datanode不能启动,且报版本不匹配错误

     解决办法:在hadoop/conf/core-site.xml配置文件中增长配置信息(每一个节点都要修改)

                    <property>

                            <name>hadoop.relaxed.worker.version.check</name>

                            <value>true</value>

                    </property>

                    <property>

                            <name>hadoop.skip.worker.version.check</name>

                            <value>true</value>

                    </property>

                     因为默认配置中这两个属性值都为false,集群启动时会检查版本,不匹配时datanode就会拒绝链接到

                     namenode上,形成集群中节点个数为0,也就是datanode没有启动;

三、不能经过浏览器查看集群状态:

     缘由:ant clean以后,以前编译过的模块都被清除了,猜想清除的模块可能涉及到浏览器显示这一部分的实现

     解决办法:从新将FUSE模块编译回来,不要轻易清除编译模块

四、测试文件不能写入HDFS

     缘由:普通ubuntu用户对hadoop hdfs没有写入权限

     解决办法:放hadoop目录的权限,命令为: hadoop fs -chmod 777 /user/hadoop

相关文章
相关标签/搜索