1:在Windows下配置Hadoop的运行环境
第一步:将hadoop2.7.5文件夹拷贝到一个没有中文没有空格的路径下面
第二步:在windows上面配置hadoop的环境变量: HADOOP_HOME,并将%HADOOP_HOME%\bin添加到path中
第三步:把hadoop2.7.5文件夹中bin目录下的hadoop.dll文件放到系统盘:C:\Windows\System32 目录
第四步:关闭windows重启
2:获取FileSystem的方式
@Test
public void getFileSystem2() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"),
new Configuration()); //new Configuration()该对象会自动读取haoop的xml配置文件
System.out.println("fileSystem:"+fileSystem);
}
3:HDFS的API操作
/*
创建文件夹和文件
*/
@Test
public void mkdirs() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"),new Configuration());
//boolean mkdirs = fileSystem.mkdirs(new Path("/hello/mydir/test")); //递归创建文件夹
/*
1:如果父目录不存在,则会自动创建
2:创建文件时,文件所属用户是你windows下的用户
*/
boolean mkdirs = fileSystem.create(new Path("/hello/mydir/test"));
fileSystem.close();
}
4:HDFS文件流的获取
//获取hdfs文件的输入流--->读取hdfs文件--->下载
FSDataInputStream inputStream = fileSystem.open(new Path("/a.txt"));
//获取hdfs文件的输出流--->向hdfs文件写数据
FSDataOutputStream outputStream = fileSystem.create(new Path("/a.txt"));
//文件上传:
fileSystem.copyFromLocalFile(new Path("D://set.xml"), new Path("/"));
//文件下载:
fileSystem.copyToLocalFile(new Path("/a.txt"), new Path("D://a4.txt"));
5:HDFS的权限问题
1:如果要让hdfs的权限生效,则需要修改hdfs-site.xml文件,修改如下:
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
2:伪造用户:以某一个用户的身份去访问 //过滤器 Filter
//最后一个参数root,就是以root身份去访问
FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), new Configuration(),"root");
6:HDFS的高可用(HA)
1:HDFS高可用是有2个namenode,一个是Active状态,一个是Standby状态
2:Zookeeper用来解决两个namenode的单点故障问题,Journal Node用来保证两个namenode元数据的同步
7:MapReduce的思想
MpReduce运行在yarn之上
阶段划分:
Map阶段: 负责将一个大的任务划分成小的任务,小任务之间不能有依赖关系
Reduce阶段: 负责将Map阶段的结果进行汇总
8:MapReduce的步骤
Map阶段2个步骤
1. 设置 InputFormat 类, 将数据切分为 Key-Value(K1和V1) 对, 输入到第二步
2. 自定义 Map 逻辑(自己写代码), 将第一步的结果转换成另外的 Key-Value(K2和V2) 对, 输出结果
Shuffle 阶段 4 个步骤
3. 分区(Partition)
4. 排序(Sort)
5. 规约(Combiner)
6. 分组(Group By) ETL
Reduce阶段2个步骤
7. 自定义Reduce逻辑(自己写代码)将新的K2和V2转为新的 Key-Value(K3和V3)输出
8. 设置 OutputFormat 处理并保存 Reduce 输出的K3和V3 数据