问题描述:在搭配好复杂的hadoop完全分布式版的配置后进行一个简单的测试demo:
package com.demo.bigdata.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.BasicConfigurator;
import org.junit.Test;
import java.io.IOException;
public class HdfsTest {
/*
* 写文件操作
* */
@Test
public void testWriteFile() throws IOException {
//BasicConfigurator.configure(); //自动快速地使用缺省Log4j环境。
//创建配置对象
Configuration conf=new Configuration();
//conf.set("fs.defaultFS", "hdfs://demo01:8020");
//创建文件系统对象
FileSystem fs=FileSystem.get(conf);
System.out.println(fs+"test");
Path path=new Path("/test01.txt");
FSDataOutputStream fsDataOutputStream=fs.create(path,true);
fsDataOutputStream.write("hello,hadoop".getBytes());
fsDataOutputStream.flush();
fsDataOutputStream.close();
}
}
完成hdfs 的API操作之写文件,其中首先遇到了log4j配置文件问题
解决方案:在pom.xml中配置lg4j:
<!-- 添加log4j日志相关jar包:共3个jar-->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
其次遇到了搞了半天都没解决的问题:
在windows端本地我并未保存相关hadoop的文件夹,于是重新找到了hadoop-2.4.6的文件夹放在D盘,而这个问题是什么原因造成的,简言之就是在hadoop\bin\目录下缺少两个配置文件:
网上只需找到对应版本的hadoop.dll(最好大于等于当前版本,不要跳跃太大如2到3),还有winutils.exe放进去
链接:https://github.com/srccodes/hadoop-common-2.2.0-bin/tree/master/bin
然后配置HADOOP_HOME环境变量:
然后重启。即可。