Hadoop-HDFS学习课件
HDFS基本概念
前沿
- 设计思想:分而治之: 将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;
- 在大数据系统中的作用:为各类分布式原酸框架(如:mapreduce,spark,flink…)提供数据存储服务。
HDFS的概念和特性
HDFS,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件。
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色;
重要特性如下:
- HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
- HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
- 目录结构及文件分块信息(元数据)的管理由namenode节点承担,namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器)。
- 文件的各个block的存储管理由datanode节点承担,datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication)。
- HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改(不支持从中间插入数据,支持追加)。
重点概念:文件切块,副本存放,元数据
HDFS-shell
shell客户端使用
HDFS提供shell命令行客户端,使用方法如下:
hadoop fs -ls /
或者
hdfs dfs -ls /
客户端支持的命令参数
参数 | 示例 | 功能 |
---|---|---|
help | hadoop fs -help | 输出这个命令参数手册 |
ls | hadoop fs -ls / | 显示目录信息 |
mkdir | hadoop fs -mkdir -p /aa/bb/cc | 在hdfs上创建目录 |
appendToFile | hadoop fs -appendToFile /hello.txt /hello.txt | 追加一个文件到已经存在的文件末尾(节点大于3) |
cat | hadoop fs -cat /hello.txt | 显示文件内容 |
tail | hadoop fs -tail /weblog/access_log.1 | 显示一个文件的末尾 |
text | hadoop fs -text /weblog/access_log.1 | 以字符形式打印一个文件的内容 |
chgrp chmod chown |
hadoop fs -chmod 666 /hello.txt hadoop fs -chown someuser:somegrp /hello.txt |
linux文件系统中的用法一样,对文件所属权限 |
cp | hadoop fs -cp path1 path2 | 从hdfs上拷贝文件到hdfs |
mv | hadoop fs path1 path2 | 移动文件 |
get | hadoop fs -get hdfspath localpath | 从hdfs上下载数据到本地 |
put | hadoop fs -put localpath hdfspath | 从本地上传文件到hdfs上 |
copyFromLocal | 同put | 同put |
copyToLocal | t同get | 同get |
rm | hadoop fs -rm -r path | 删除文件或者目录 |
rmdir | hadoop fs -rmdir path | 删除空目录 |
df | hadoop fs -df -h / | 统计文件系统的可用空间信息 |
du | hadoop fs -du -s -h /path | 统计文件夹的大小信息 |
count | hadoop fs -count /aaa/ | 统计一个指定目录下的文件节点数量 |
moveFromLocal | hadoop fs -moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd | 从本地剪切粘贴到hdfs |
moveToLocal | hadoop fs -moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt | 从hdfs剪切粘贴到本地 |
setrep | hadoop fs -setrep 3 /file | 设置文件的副本数量 |
HDFS-JAVA-API操作
依赖引入
引入依赖,可以是maven,也可以使用jar的形式;使用jar的形式导入的jar包在安装目录下面的share/hadoop//.jar,maven的形式如下:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
编译打包插件如下(可以不加入):
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打jar插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase