重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章给大家介绍如何使用FUSE挂载HDFS,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了桓仁免费建站欢迎大家使用!
因为要使用iozone和dd对HDFS做个简单的测试,所以需要将HDFS挂载到本地,挂载过程不复杂,但中间出现了各种各样的错误,弄了有半个星期,终于测试完毕。现将整个挂载及解决错误的过程记录下来,大家共同学习讨论。
一、FUSE安装
安装步骤很简单
1、解压 $ tar zxvf fuse-2.9.3.tar.gz
2、进入fuse目录 $ cd /usr/local/fuse-2.9.3
3、$ ./configure
4、$ make
5、$ make install
6、$ modprobe fuse (自动载入fuse模块)
二、HDFS挂载
1、增加系统配置
$ 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能够看到每个节点都处于正常状态,但是就是不能通过浏览器查看。
三、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参数很多,可以根据使用需求具体学习某个参数。
四、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表示用指定的参数转换文件。实际使用时,可以根据自己的需求进行调整。
五、总结
最后,简单总结一下遇到了几个问题及解决办法
1、FUSE编译出错: ./configure后出现error
解决办法:在Ubuntu12.04LTS环境下,使用fuse-2.7.4或fuse-2.8.5两个版本都会出现各种各样的问题,但换用fuse-2.9.3后,不再报错,其他版本没有进行尝试;
2、版本不匹配:使用ant对hadoop的模块fuse-dfs编译后,datanode不能启动,且报版本不匹配错误
解决办法:在hadoop/conf/core-site.xml配置文件中增加配置信息(每个节点都要修改)
由于默认配置中这两个属性值都为false,集群启动时会检查版本,不匹配时datanode就会拒绝连接到
namenode上,造成集群中节点个数为0,也就是datanode没有启动;
3、不能通过浏览器查看集群状态:
原因:ant clean之后,之前编译过的模块都被清除了,猜测清除的模块可能涉及到浏览器显示这一部分的实现
解决办法:重新将FUSE模块编译回来,不要轻易清除编译模块
4、测试文件不能写入HDFS
原因:普通ubuntu用户对hadoop hdfs没有写入权限
解决办法:开放hadoop目录的权限,命令为: hadoop fs -chmod 777 /user/hadoop
关于如何使用FUSE挂载HDFS就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。