注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

云计算和云存储之八Hadoop的文件上传  

2016-09-08 16:51:14|  分类: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

云计算和云存储之八Hadoop的文件上传

在一篇文章中介绍了上传和下载,虽然没有正式使用-put命令来上传一个文件,但实际情况是肯定没有问题的。

今天开始在Eclipse里配置新的上传工程。但是启动Hadoop后,发现怎么也连接不到Eclipse的工程里,体现到实际情况就是在Eclispe里的“工程浏览”面板里的”DFS Locations”,点击,不断点击打开,连接不上。

在打开的“Map/Reduce”的面板里配置,也不行。后来干脆还是新建立了一个工程,把名字什么的都匹配好,再弄就好了。这里面有一个细节需要注意,直接打开面板里的右上角的小象,其实的配置内容是默认的,太坑人了。要想看到配置好的工程,得点击已经出现的图像,右键,编辑,就可以看到了。其实弄来弄去,还是“Edit Hadoop location”的配置不对,前面是Tracker JOBHOSTPORT,在mapred-site.xml中有两个地址和端口号。网上一般说是在core-site.xml里,这里一定要注意。

比如这里第一个是:192.168.123.136  9001

         第二个是:192.168.123.136 9000

本地名字随便写,但用户名得写你的HADOOP的名字。注意,一定注意。这个前面有写过,但没引起注意,今天又遇到这个坑了,再说一次。

还有,如果在更改的过程没有错误,但是在运行时报“Usage: MapFile inFile outFile”,原因就是你的工程名称和你的类名称等有些地方不匹配,就象上面一样,重写弄一个一致的就好了,这个也耽误了一段时间。

配置完成这个以后,编译报找不到日志的错误“ClassNotFoundException: org.apache.commons.logging.LogFactory”,在前面也提过,从HADOOP目录里/home/fjf/hadoop-0.20.2/build/ivy/lib/Hadoop/common里找到日志commons-logging-1.0.4.jar这个包,添加到工程中去。这里也丢人了,怎么也加不进去,拷贝,拖进去,都不行。后来在工程名称上右击属性,进入对话框界面,在java build path里找到了“AddressExternal JARS”,点击打开,添加路径就可以了。多么简单的东西,不用,就慢慢忘记了。

然后重新都弄好,开始编译,还是发现了一个问题,程序不会自动配置,总是自动匹配到ArrayFile里,所以程序总是报各种错误,这个是偶然解决的,在运行配置时,在“Main”里的“Project”和“MainClass”里找到工程的名字和主要类。Apply后,下面有一个Run,点击后,正常运行,虽然有错误,但没有报上面的莫名其妙的错误。这时候儿再重新运行时发现了首先配置到的是ArrayFile ,而下面才是刚刚配置正确的CopyFile。不像上次的WordCount每次自动就是它。无语。

发现这个问题后,再运行就选择一下,防止出现错误。程序正常运行,出现下面的错误:

Exception in thread "main" java.io.FileNotFoundException: /home/test.txt (Permission denied 权限不够)

at java.io.FileOutputStream.open(Native Method)

at java.io.FileOutputStream.<init>(FileOutputStream.java:212)

at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:188)

at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:184)

at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:255)

at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:236)

at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSOutputSummer.<init>(ChecksumFileSystem.java:335)

at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:381)

at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:364)

at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:555)

at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:536)

at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:443)

at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:229)

at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:163)

at org.apache.hadoop.fs.LocalFileSystem.copyFromLocalFile(LocalFileSystem.java:67)

at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1143)

非常明显,是权限的问题,从网上找了好多的资料,都解决不了这个问题,有的说是版本的问题,有的说是HADOOP的权限问题,有的说是XML没拷贝到当前路径,要修改。结果HADOOP在运行时那两个文件根本不让拷贝。

后来又按一个网上的资料,用chgrpchmodchown命令都操作了这个上传的文件,还是不行。

后来在网上发现了解决方法:

http://www.codeweblog.com/hadoop%E4%B8%8A%E8%B7%AF_07-%E4%BD%BF%E7%94%A8java%E6%93%8D%E4%BD%9Chdfs/

是上传的路径不对,也就是说路径没有权限,好吧,那就找一个,按上面的截图中,如图索骥,写了一个又一个,都不行,无语了。

报下面的错误:

"main" java.io.IOException: Mkdirs failed to create /home/hadoop-0.20.2

网上说格式不对,路径不合法,正好在后面加了一个/,怀疑是它,再来,还是不行,无语,这时无意看到路径上从home直接跳到了hadoop-0.20-2里,无语啊,少了一层,加上。程序运行成功。其实,只要写到当前用户路径下就可以了。比如自己是/home/用户名文件夹

在这个过程中甚至怀疑HADOOP装的不对,用PUT命令上传了几个文件,都成功了,才明白还是使用的方式不对,最后还是在网上找到了解决问题的方法,不容易。

但这里也有一些不太明白的问题,那就是上传的文件如果没有指定路径会上传到/user目录下,这个目录找不到在LINUX上的映射目录,可能是HADOOP自己建立的吧。

可以使用上面提到的 Hadoop dfs –ls /来看,也可以打开浏览器:

http://localhost:50070

在里可以查看到相关的数据结果。但如果象上传到上面说的自己的路径下,就可以在实体的操作系统上看到自己上传的文件。

回头得认真学习一下代码的流程和使用方法。

苟日新,日日新,又日新。

  评论这张
 
阅读(119)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017