一、在本地配置HADOOP
1.1 下载与集群对应的hadoop版本的压缩包,解压
1.2 设置HADOOP_HOME等环境变量
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下即可。
删除刚才上传的文件后,再次运行。发现没有了异常。可以快乐的在本地调试了。