第三章 HDFS的客户端操作
3.1. shell操作
1. 基本语法
bin/hadoop fs 具体命令 或者 bin/hdfs dfs 具体命令
#bin/hdfs dfs 能返回所有命令
2. 常用命令
# 1. 启动集群
sbin/start-dfs.sh
sbin/start-yarn.sh
# 2. 帮助命令
hadoop -help rm
# 3. 上传命令
#-moveFromLocal 本地剪切到HDFS
hadoop fs -moveFromLocal ./test.txt /updata
#-copyFromLoacl 从本地考本到HDFS路径
Hadoop fs -copyFromLoacl test.txt /updata
#-appendToFile 追加到已经存在的文件末尾
Hadoop fs - appendToFile test.txt /updata/test.txt
#-put等同于 copyFromLocal
# 4. 下载命令
# -copyToLocal 从HDFS拷贝到本地
# -get 等同于copyToLocal
# -getmerge 合并下载的多个而文件到一个本地文件
# 5. -ls 显示目录信息
# 6. -mkdie 在hdfs系统
# 7. -cat 显示文件内容
# 8. -chgrp、-chmod、-chown 修改文件所属,同Linux用法以一样
Hadoop fs -cahmod 666 ./test.txt
# 9. -tail 展示文末1kb的数据
# 10. -cp -mv -rm -rmdir 同Linux用法以一样
# 11 -du 统计文件夹大小信息
hadoop fs -du -s -h /user/atguigu/test
2.7 K /user/atguigu/test
hadoop fs -du -h /user/atguigu/test
1.3 K /user/atguigu/test/README.txt
15 /user/atguigu/test/jinlian.txt
1.4 K /user/atguigu/test/zaiyiqi.txt
# -setrep: 设置HDFS文件副本数
Hadoop fs -setrep 10 ./test.txt
##注意:这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
3. HDFS文件限额配置
-
HDFS文件限额配置
HDFS文件的限额配置允许我们以文件大小或者文件个数来限制我们在某个目录下上传的文件数量或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量
###1.数量限额
hdfs dfs -mkdir -p /user/root/lagou #创建hdfs文件夹
hdfs dfsadmin -setQuota 2 /user/root/lagou # 给该文件夹下面设置最多上传两
个文件,上传文件,发现只能上传一个文件
hdfs dfsadmin -clrQuota /user/root/lagou # 清除文件数量限制
###2.空间大小限额
hdfs dfsadmin -setSpaceQuota 4k /user/root/lagou # 限制空间大小4KB
#上传超过4Kb的文件大小上去提示文件超过限额
hdfs dfs -put /export/softwares/xxx.tar.gz /user/root/lagou
hdfs dfsadmin -clrSpaceQuota /user/root/lagou #清除空间限额
#查看hdfs文件限额数量
hdfs dfs -count -q -h /user/root/lagou
4. Hadoop归档技术
主要解决HDFS集群存在大量小文件的问题!!
由于大量小文件会占用NameNode的内存,因此对于HDFS来说存储大量小文件造成NameNode
内存资源的浪费!
Hadoop存档文件HAR文件,是一个更高效的文件存档工具,HAR文件是由一组文件通过archive
工具创建而来,在减少了NameNode的内存使用的同时,可以对文件进行透明的访问,通俗来说
就是HAR文件对NameNode来说是一个文件减少了内存的浪费,对于实际操作处理文件依然是一
个一个独立的文件。
##归档文件
#把/user/lagou/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/user/lagou/output路径下。
bin/hadoop archive -archiveName input.har –p /user/root/input /user/root/output
##查看归档
hadoop fs -lsr /user/root/output/input.har
hadoop fs -lsr
##解归档
hadoop fs -cp har:/// user/root/output/input.har/* /user/root
3.2 Java API操作
1. 简单样例
环境准备
解压安装包,配置HADOOP_HOME环境变量,配置Path环境变量,重启
创建Maven工程,导入依赖,日志控制
junit
junit
4.12
org.apache.logging.log4j
log4j-slf4j-impl
2.12.0
org.apache.hadoop
hadoop-client
3.1.3
为了便于控制程序运行打印的日志数量,需要在项目的src/main/resources目录下,新建一个文件,命 名为“log4j.properties”,文件内容:
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
创建java类链接HDFS
public class HdfsClient{
@Test
public void testMkdirs() throws IOException, InterruptedException,
URISyntaxException {
// 1 获取文件系统
Configuration configuration = new Configuration();
// 配置在集群上运行
// configuration.set("fs.defaultFS", "hdfs://linux121:9000");
// FileSystem fs = FileSystem.get(configuration);
FileSystem fs = FileSystem.get(new URI("hdfs://linux121:9000"),
configuration, "root");
// 2 创建目录
fs.mkdirs(new Path("/test"));
2. 中文文档
Apache Hadoop 中文文档
专栏更新: 大数据技术-hadoop - 蜗牛捣蛋的专栏 - 掘金 (juejin.cn)
上一篇: Hadoop之分布式文件系统HDFS - 掘金 (juejin.cn)
下一篇: hadoop-MapReduce计算框架(还在写)