1、准备Hadoop的安装压缩包以及源码压缩包,解压得到hadoop-2.6.5 和 hadoop-2.6.5-src,然后创建 空白的一个文件夹,命名hadooplib(可以自己起名),如图:
2、在hadoop-2.6.5/share/hadoop文件夹下几个子目录中找到所有的jar包,并拷贝到hadooplib目录下
3、在tool文件中 找到bin目录,并将该文件夹的所有文件复制到hadoop-2.6.5/bin目录下,将源文件进行覆盖;
4、在hadoop-2.6.5/bin下找到hadoop.dll文件放到C盘的system32文件夹下;
5、创建环境变量
配置HADOOP_HOME;PATH;HADOOP_USER_NAME;
6、将Eclipse插件放到Eclipse安装目录的plugins文件夹下:
7、打开Eclipse添加MAP/Reduce模块,步骤如图:
添加完之后,界面的变化:
8、windows --> Preferences -- > HADOPP map/reduce,加载安装目录;
9、新建hadoop location
host 和 Port 如果不确定可以到URL页面查询(master:50070):
9、Eclipse页面变化
10、添加jar包
在Eclipse中,windows --> preferences --> Java --> user libraries --> new,创建新的libraries hadoop-2.6.5,然后点击Add External JARs,将hadooplib中的所有jar包添加进来。
11、创建一个就Java project:0402
12、添加jar包:右击0402 --> Build Path --> Add libraries --> user library -- > hadoop 2.6.5
13、添加单元测试类:右击0402 --> Build Path --> Add libraries -->JUnit
14、我们默认搭建了HA,需要将配置文件core-site.xml 和 hdfs-site.xml 导入。右击0402 --> floder --> conf/ha,右击conf --> folder --> ha,然后将core-site.xml 和 hdfs-site.xml拖入ha文件夹下,如图:
15、选择ha文件夹右击(一定是ha,不是conf) -- > Build Path --> use as Source Floder,如图:
16、创建Java类,开始测试:分别为申请资源,关闭资源,创建目录,上文本地文件到HDFS,下载HDFS文件到本地。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataInputStream;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestHDFS {
// Configuration连接xml配置文件
Configuration conf;
// HDFS客户端
FileSystem fs;
// 客户端连接
@Before
public void conn() throws Exception{
// true为读取配置文件,false为不读取配置文件
conf = new Configuration(true);
// 客户端对象
// ctrl + t 看源码
fs = FileSystem.get(conf);
}
@After
public void close() throws Exception{
// 关闭客户端
fs.close();
}
// 正式HDFS编程,创建目录
@Test
public void mkdir() throws Exception{
Path ifile = new Path("/ajasonchan");
// 判断目录是否存在
if(fs.exists(ifile)){
// 如果该目录已经存在,递归删除
fs.delete(ifile, true);
}
// 创建目录
fs.mkdirs(ifile);
}
// 上传文件
@Test
public void upload() throws Exception{
Path f = new Path("/aaa/hello.txt");
// 输出流
FSDataOutputStream output = fs.create(f);
// 输入流
InputStream input =
new BufferedInputStream(new FileInputStream(new File("F:sxta.txt")));
// 流的对接
// 按字节拷贝,也支持buffer
// true:写完之后,自动关闭流
// conf:配置信息大小,带有buffer大小
IOUtils.copyBytes(input, output, conf,true);
// 1、读取本地文件
// 2、写入HDFS
}
// 从HDFS下载文件
@Test
public void download() throws Exception{
// 读取HDFS文件内容
Path dir = new Path("/aaa/hello.txt");
FSDataInputStream input = fs.open(dir);
// 将HDFS文件内容写到本地文件
OutputStream output =
new BufferedOutputStream(new FileOutputStream(new File("F:sxtc.txt")));
IOUtils.copyBytes(input, output, conf, true);
}