windows下eclipse运行hdfs API常见问题

在windows下写hdfs的java API常见问题:

准备:例如访问hdfs需要对应的jar包,可以在hadoop解压包里找(common+hdfs核心包+hdfs依赖的lib包),也可以通过maven。

1、报空指针异常

这是因为运行环境问题, 

解决办法:

系统环境变量指定HADOOP_HOME:F:\BaiduNetdiskDownload\day06 hadoop\day06\软件\hadoop-2.6.4  还有在PATH中加入hadoop_home的bin
但是hadoop-2.6.4是linux版本编译过来的,所以会调用linux的本地库native而在windows上运行要调用windows的本地库(可以去网上下载windows版本编译的hadoop包),所以要把无jar版windows平台hadoop-2.6.1.zip解压后的hadoop-2.6.1中的bin和lib替换到2.6.4中
或者直接指定HADOOOP_HOME为hadoop-2.6.1


2、Permission deny权限不足

客户端去操作hdfs时,是有一个用户身份的
默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=hadoop

在windows上运行代码,访问hdfs时jvm会查找系统环境变量HADOOP_USER_NAME,如果系统环境变量没有配置的话就就会以windows的默认用户名zzd去登录到hdfs,但是权限不够 rw-r-r

解决办法:

(1)可以chmod 777 hdfs上的文件权限,但是不安全
 (2)以System.setProperty("HADOOP_USER_NAME", "hadoop")指定运行时以什么身份登录到hdfs
(3)也可以配置电脑的系统环境变量:增加一个HADOOP_USER_NAME为hadoop,也可以直接改windows系统用户名为hadoop
 (4)run configurations 指定jvm运行参数:-DHADOOP_USER_NAME=hadoop
 (5)在构造客户端fs对象时,通过参数传递进去FileSystem.get(new URI("hdfs://master:9000"), conf,"hadoop");
推荐第5种

总结:

建议在linux下进行hadoop应用的开发,不会存在兼容性问题。如在window上做客户端应用开发,需要设置以下环境(解决空指针及其他环境问题):

A、windows的某个目录下解压一个hadoop的安装包

B、将安装包下的libbin目录用对应windows版本平台编译的本地库替换

C、window系统中配置HADOOP_HOME指向你解压的安装包

D、windows系统的path变量中加入hadoopbin目录


猜你喜欢

转载自blog.csdn.net/qq_32563713/article/details/79157551