在 pom.xml 文件里添加hadoop的依赖包 hadoop-common, hadoop-client, hadoop-hdfs ,内容如下:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
my.hadoopstudy
hadoopstudy
jar
1.0-SNAPSHOT
hadoopstudy
http://maven.apache.org
org.apache.hadoop
hadoop-common
2.5.1
org.apache.hadoop
hadoop-hdfs
2.5.1
org.apache.hadoop
hadoop-client
2.5.1
问题一:
在运行的过程中,原项目采用 log4j2 ,而 本hadoop-2.5.1 采用的是log4j ,更改 pom.xml 将log4j 冲突依赖排除
org.apache.hadoop
hadoop-common
2.5.1
org.slf4j
slf4j-log4j12
org.apache.hadoop
hadoop-hdfs
2.5.1
org.slf4j
slf4j-log4j12
org.apache.hadoop
hadoop-client
2.5.1
org.slf4j
slf4j-log4j12
问题二:
因为本项目是在windows 10 环境下去开发 CentOS6.5 环境下的hadoop
会出现错误:
Could not locate executable null\bin\winutils.exe in the Hadoop binaries
原因是没有配置hadoop 的环境变量:
添加
HADOOP_HOME=E:/hadoop/hadoop
在 path 中添加
E:/hadoop/hadoop/bin
同时下载 hadoop.dll 和 winutils.exe 放到 bin 文件夹下
读取 hadoop 下的内容
package my.hadoopstudy.dfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.io.InputStream;
import java.net.URI;
public class Test {
public static void main(String[] args) throws Exception {
String uri = "hdfs://9.111.254.189:9000/";
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), config);
// 列出hdfs上/user/fkong/目录下的所有文件和目录
FileStatus[] statuses = fs.listStatus(new Path("/user/fkong"));
for (FileStatus status : statuses) {
System.out.println(status);
}
// 在hdfs的/user/fkong目录下创建一个文件,并写入一行文本
FSDataOutputStream os = fs.create(new Path("/user/fkong/test.log"));
os.write("Hello World!".getBytes());
os.flush();
os.close();
// 显示在hdfs的/user/fkong下指定文件的内容
InputStream is = fs.open(new Path("/user/fkong/test.log"));
IOUtils.copyBytes(is, System.out, 1024, true);
}
}