一、在本地配置HADOOP

1.1 下载与集群对应的hadoop版本的压缩包,解压

1.2 设置HADOOP_HOME等环境变量

HADOOP_HOME环境变量
HADOOP_BIN_PATH环境变量

1.3 修改JAVA_HOME的格式

上面都配置好以后,进入CMD输入hadoop version 还是有问题,提示JAVA_HOME设置不正确。同时提示我们要去hadoop-env.cmd中修改JAVA_HOME。当然了直接在修改环境变量也是可以的。因为在hadoop-env.cmd中有这样一句代码。

如果你不在这个位置设定,他就会自动找JAVA_HOME这个环境变量。

修改JAVA_HOME的方式有两种,我试了第一种不好用,我采用的第二种。

第一种方式:
set JAVA_HOME=C:\Progra~1\Java\jdk1.8.0_171
第二种方式:
set JAVA_HOME="C:\Program Files"\Java\jdk1.8.0_171

成功~~~

二、使用Hadoop API上传文件中的坑。

2.1 访问控制异常,权限问题

解决方法:

方法1:用户环境变量添加 HADOOP_USER_NAME=hadoop,需重启电脑

方法2:IDEA 的 VM 参数中添加 -DHADOOP_USER_NAME=hadoop

方法3:代码中设置系统变量,需在加载配置类创建 fileSystem 对象前

System.setProperty("HADOOP_USER_NAME", "hadoop");
Configuration configuration = new Configuration();

方法4:直接使用含用户名入参的方法创建 fileSystem 对象

fileSystem = FileSystem.get(new URI("hdfs://node01:9000"),configuration, "hadoop");

方法5:虚拟机中直接hadoop fs -chmod 777 /
修改集群root目录的权限,表示任何用户都能修改。

方法6:
修改到Namenode上修改hadoop的配置文件:etc/hadoop/hdfs-site.xml 加入

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

成功解决。

程序截图

2.2 winutil 和 hadoop.dll问题

解决完权限问题后,直接运行出现了下面的异常:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray

出现这个问题是因为hadoop的版本与winutil和hadoop.dll的版本不兼容。需要自己在windows下编译hadoop源码。或者去https://github.com/steveloughran/winutils 这个网站下载自己对应的版本。然后把bin目录下的文件全部复制到%HADOOP_HOME%/bin下即可。

删除刚才上传的文件后,再次运行。发现没有了异常。可以快乐的在本地调试了。