HDFS文件上传:8020端口拒绝连接问题解决!

忙了一整天,一直在解决hdfs上传文件时的错误,昨天最后有了一些头绪,但是没来得及验证,今天上午终于验证了自己的想法,从而顺利解决了困扰了自己许久的问题。以这个问题为契机,自己对Hadoop的配置文件重新进行了梳理,顺便加深了对于HDFS的理解。首先来看一直困扰自己的问题,该问题是在自己尝试向HDFS上传本地文件的时候发生的:
CopyFromLocal: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException

     问题提示本机的8020端口无法连接。一开始我都懵了,怎么还有8020端口呢,自己载配置文件里明明设定的namenode的端口是9000,但是为什么会连接8020端口呢?解决问题的过程就不再赘述了,总之是log+google+thinking的结合,在自己尝试修改默认连接8020端口无效之后,转而修改namenode的端口9000。方法是修改hadoop配置文件core-site.xml重点属性配置fs.default.name的值修改为hdfs://localhost:8020。修改之后运行通过,稍后再上图,因为问题到这里并没有结束。

补充一点:

原因:本地用户administrator(本机windows用户)想要远程操作hadoop系统,没有权限引起的。
解决办法:
1、如果是测试环境,可以取消hadoop hdfs的用户权限检查。打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。(1.2.1 版本只有这个方法可行),如何操作可以参考第一个问题。


     
Hadoop的关键配置文件
     hdfs上传文件成功之后,自己又开始好奇地修改其配置文件。因为之前自己对于hadoop一直都是胡打乱撞,缺乏系统的理解和认识,在网上查到了一个篇hadoop配置文件的资料,于是就开始动起手来,不想出现了新的错误。首先来梳理下hadoop的配置文件:
1. hadoop-env.sh
     hadoop的运行环境配置,主要设置HADOOP_HOME和JAVA_HOME两个环境变量,指定其所在路径即可
2. core-site.xml
     注意fs.default.name属性要正确配置,该属性用于配置namenode节点,我们都知道一个hadoop系统中一般只有一个namenode节点管理所有的datanode,所以设置一定要正确:hdfs://localhost:8020。一般默认都是9000端口,但是我自己的ubuntu并不能正常运行,所以才修改为8020。8020端口是hadoop的namenode的RPC调用端口。
3. hdfs-site.xml
     dfs.replication属性,顾名思义表示指定的hadoop文件块的备份数量,一般默认是3份,可以设为1
     dfs.name.dir属性,非常重要,用来设置存放namenode数据的目录,如果这个目录访问失败,则会导致namenode启动失败
     dfs.data.dir属性,用来指定datanode上本地存放数据的目录,与namenode的设置独立没有关系
4. mapred-site.xml
     mapred.jop.tracker属性用来设置JobTracker的主机、IP地址和端口,本机的话可以设置为:localhost:9001
     Hbase系统的配置文件主要需要注意以下几个:
1. hbase-env.sh
     设置环境变量,要export Java路径,最后一行有个属性HBASE_MANAGES_ZK设为true表示启用自带的ZK,否则运行时会提示打开ZK错误,到时也可以使用apt-get单独的zookeeper运行。
2. hbase-site.xml
     hbase.rootdir属性设置region server的共享目录,默认写到tmp中,不改写的话重启后数据会丢失,我的设为了hdfs://localhost:8020/hbase
     zookeeper.znode.parent表示Hbase的跟ZNODE,一般默认为/hbase
     

      在修改完配置文件后,启动hadoop时发现namenode无法启动,使用hadoop namenode -format也不能成功:

      其中提示"Cannot create directory /hdfs/name/current"。一般出现这个错误有两个原因,一个是路径设置的有错误,另一个原因则更有可能是因为权限问题。自己的在指定namenode的存放路径时使用了"~"用来表示主目录,但是事实证明是行不通的,必须使用绝对路径,自己的修改为/home/hadoop/hdfs/;然后确保home的属性是775,而hadoop的属性是775即可。

      这里的hadoop fs -ls [directory]可以列出目录内容,hadoop fs -lsr则可以递归列出目录的子目录。-mkdir和-rmr分别用来创建和删除目录。之后我们可以使用hadoop fs -put src hdfs://localhost:8020/user/hadoop/img中拷贝自己的IMG文件和JSON文件。

     这里还有一段小插曲,自己在解决namenode文件创建失败问题时,找到了hadoop默认的存放namenode和data的目录,在/tmp/hadoop-hadoop下,当然,设置dfs.name.dir后便存放到指定的目录了。HDFS文件存放在实际的节点本地系统中,但是使用特殊的编码方式,有着自己的文件系统树结构,因此一般不能用cd命令进入查看。上传文件就是将自己的文件添加进HDFS的树中。


      由于配置时经常需要修改文件,不晓得什么时候不小心就导致配置错误,因此经常备份是个好习惯,可以使用ubuntu的tar命令来实现备份,生成backup.tgz后放在/下:
tar  -cvpzf  backup.tgz   --exclude=/proc  --exclude=/backup.tgz  --exclude=/lost+found  --exclude=/mnt  --exclude=/sys  /
      恢复的时候可以使用命令:
tar -xvpzf  backup.tgz -C /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值