目录:
- Hadoop简介
- Hadoop架构
- Hadoop目录说明
- Hadoop文件系统HDFS介绍
- Hadoop环境搭建:伪分布式模式
- Hadoop修改存储路径和免密
- web界面访问HDFS与java操作HDFS
一.Hadoop简介
请参考自己下载的Hadoop版本对应的文档:Hadoop快速入门中文文档
1.Hadoop的由来
硬盘和服务器的关系:一个服务器可以有多个硬盘,就像抽屉一样,拉开一个个抽屉,将硬盘放进去
2.简介
- 官网:http://hadoop.apache.org/
- Hadoop是一个分布式系统基础架构,有Apache基金会开发。用户可以不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
- Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了储存,MapReduce为海量的数据提供了计算。
- Hadoop可运行于一般的商用服务器上,具有高容错、高可靠性、高扩展性等特点
特别适合写一次,读多次的场景 - 适合
- 大规模数据
- 流式数据(写一次,读多次)
- 商用硬件(一般硬件)
- 不适合
- 低延时的数据访问
- 大量的小文件
- 频繁修改文件(基本就是写1次)
二.Hadoop架构
- HDFS: 分布式文件存储
- YARN: 分布式资源管理
- MapReduce: 分布式计算
- Others: 利用YARN的资源管理功能实现其他的数据处理方式
- 内部各个节点基本都是采用Master-Woker架构
三.Hadoop目录说明
- bin:Hadoop最基本的管理脚本和使用脚本,这些脚本是sbin目录下管理脚本的基础实现,用户可以用这些脚本管理和使用Hadoop。
- etc:Hadoop配置文件所在的目录,包括core-site.xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的文件。
- include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是C++定义的,通常用于C++程序访问HDFS或者变成MR程序。
- lib:该目录提供了对外编程的静态库和动态库,与include目录下的头文件结合使用。
- libexec:各个服务所对应你的shell配置文件所在目录,可用于配置日志输出目录、启动参数(比如JVM参数)等基本信息。
- sbin:Hadoop管理脚本所在目录,主要包括HDFS和YARN中各类服务的启动/关闭脚本。
- share:Hadoop各个模块编译后的jar包所在目录。
四.HDFS介绍
1.Hadoop和HDFS的关系:
- HDFS(Hadoop Distributed File System)Hadoop分布式文件系统
- 对外部客户机而言,HDFS就像一个传统的分组文件系统,可以创建、删除、移动或重命名文件等等。很多时候,我们就叫它DFS(Distributed File System)
五.Hadoop环境搭建
步骤:
- 安装虚拟机
- 安装jdk
- 安装Hadoop
- Hadoop的安装模式
- 单节点安装
所有服务运行在一个JVM中,适合调试、单元测试。
只能本地电脑使用,外部人不能使用。 - 伪集群
所有服务运行在一台机器中,每个服务都在独立的JVM中,适合做简单、抽样测试。
可以对外提供入口、出口地址,外部的人可以通过这个配置访问hadoop,但是只有一台服务器。所有的服务全部都在一台服务器当中。 - 多节点集群
服务运行在不同的机器中,适合生产环境。
需要提供一个入口、出口地址。但是有多台服务器同时存在。服务可以分布到各台主机上。外部的人,也是通过统一的配置来访问。 - 问题:地址,我们在进行web项目测试的时候,比如:http://192.168.200.10:8080 这就是一个地址,它由
http:协议,192.168.200.10 ip,8080:端口 组成,那么hadoop所需要提供的地址是怎么样的呢?
hadoop的地址:hdfs://主机名:9000 (一定是主机名,而不是ip,具体见hadoop安装的3.2配制Hadoop的入口和出口)
- Hadoop安装(linux下安装)
- 上传tar.gz的文件
- 解压
- 配置
- 第一步:关联jdk
- 第二步:配置hadoop的入口、出口
- 第三步:设置hdfs的副本数
什么是副本:
- 第四步:启动
六.Hadoop修改存储路径和免密
- 修改储存路径
- 设置免密
- 免密的原因
- 加密分类
- 免密操作
- 实例
七.界面访问hdfs与java操作HDFS
1.web界面访问hdfs
2.Java操作HDFS :
示例:Java 将 hdfs:192.168.200.10:9000/user/yiguang/aaa.txt,复制存储在windows中e:/
- 在HDFS中创建目录user/yiguang/,并在其目录下创建文件aaa.txt
#第一步:在hdfs中创建文件目录/user/yiguang
[root@kd01 ~]# hdfs dfs -mkdir /user
[root@kd01 ~]# hdfs dfs -mkdir /user/yiguang
#第二步:创建/test/aaa.txt文件,写入的内容为:我们一起学习hadoop。
[root@kd01 test]# touch aaa.txt
[root@kd01 /]# hdfs dfs -cat /aaa.txt
我们一起学习hadoop。
#第三步:将aaa.txt上传到hdfs中
[root@kd01 /]# hdfs dfs -put /test/aaa.txt hdfs://kd01:9000/user/yiguang/
- 创建maven项目
- 加入以下pom依赖:注意版本对应
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
- 编写代码
package test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HadoopTest {
public static void main(String[] args) throws IOException {
//1.连接
FileSystem fs=FileSystem.get(URI.create("hdfs://192.168.200.10:9000"), new Configuration());
//2.拿数据
FSDataInputStream fsd=fs.open(new Path("/user/yiguang/aaa.txt"));
//3.处理
FileOutputStream fos=new FileOutputStream("e://bbb.txt");
//4.提供了一个工具类
IOUtils.copy(fsd, fos ,4096);
//5.关闭
fos.close();
fsd.close();
fs.close();
}
}
- 运行,查看
注意:问题补充:在上述内容操作过程中需要注意的问题