公司需要实时收集数据到HDFS, 于是需要调研客户端如何上传文件的细节。
刚开始看了Flume 1.6.0 的HDFSEventSink模块,大致看了下,但是感觉它自己内部封装的东西太多了,实在懒得直接用它家的玩意 。
那该怎么办?既然HDFS提供了shell命令上传文件,我们就看看它的上传过程,然后自己写java代码来实现一遍,就可以搞定。
===1 确定HDFS版本号
这个由于我们用的是CDH-5.4.7,然后上管理界面看了下HDFS的版本,截图如下:
所以,很轻松的,我们得到了版本号: 2.6.0 .
===2 本地下载HDFS的二进制文件
下载地址:http://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/
文件地址:http://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz
===3 上传到Linux机器、解压缩
tar -zvxf hadoop-2.6.0.tar.gz
===4 shell上传文件
shell的命令如下:
查看HDFS里的文件系统有没有上传成功
说明上传成功了
如果再执行一次会怎样?
就会提示文件已经存在。
然后,可以可以通过别的脚本来执行
===5 shell文件内容分析
既然,我们知道可以通过shell来上传文件,那么到底执行了什么过程呢?这就需要我们去查看shell文件来一窥究竟了!
打开这个文件,有278行,我们要怎么分析这个脚本呢?
一行一行的分析固然没有问题,但是,时间宝贵啊。。。
直接切入到我们感兴趣的地方即可,哪里是我们感兴趣的地方呢?
原文:http://my.oschina.net/qiangzigege/blog/525975