Hadoop 从入门到精通----编程不良人笔记

本文详细介绍了Hadoop的基础知识,包括大数据的定义、特点及起源,接着深入探讨了Hadoop的诞生、生态圈及安装过程。文章通过实际操作展示了HDFS的安装、配置和基本操作,包括Shell命令和Java API。此外,还讨论了NameNode的持久化机制和HDFS的完全分布式部署。最后,简要介绍了MapReduce的计算模型、核心思想及案例分析,包括Word Count程序,为读者提供了全面的Hadoop学习路径。
摘要由CSDN通过智能技术生成

编程不良人原版笔记 — https://blog.csdn.net/wei198621/article/details/111280555
part 01 hadoop 集群的搭建 – https://blog.csdn.net/wei198621/article/details/111167560
part 02 mapreduce 的学习 – https://blog.csdn.net/wei198621/article/details/111411463

相关笔记下载地址 ( 很少的费用 带来很多的收获 支持一下自己技术上的进步 支持一下陈兄 )
https://www.baizhiedu.xin/front/index#/main

Hadoop 从入门到精通----编程不良人 ( 25 小时 )
https://www.bilibili.com/video/BV17E411g7F2

java hdfs 操作hdfs库
https://github.com/wei198621/hdfs_by_baizhi

Hadoop

作者: 陈艳男

一. 引言

1.1 什么是大数据

大数据:(Big Data):数据量级很大的应用处理。TB级 ,日数据增长GB级

K -- M---- G ---- T ----PB  ---- EB  ---ZB  1024

通过对海量数据进行分析,挖掘,进而发现数据内在的规律,从而为企业或者国家创造价值。

1.2 大数据特点

4V 是大数据典型的特点具体指的是:

# 1.Volume (大量)
	数据量很大,至少是TB或者日均增加GB级
# 2.Variety (多样) 
	a.结构化数据  :  传统关系型数据库中的数据
	b.半结构化数据:  json xml mongodb存储的数据
	c.非结构化数据:  音频 视频
# 3.Velocity(快速)
	处理数据速度要快 注意:是相对速度快
# 4.Value (价值)
	海量没有价值的数据中,分析出有价值的内容。

1.3 大数据的工作方向

# 1. 业务
   电商的推荐系统,智能广告系统,专家系统,智慧城市,智能交通,金融大脑,智慧医疗,灾害预警....

# 2. 工作方向
   大数据运维工程师,大数据开发工程师(实时计算,数据仓库,ETL,基本挖掘),数据分析师(算法)

1.4 大数据的起源

Google是最早面临大数据问题的公司。

1. GFS google File System
2. MapReduce 
3. BigTable (NoSQL 数据库)

大数据起源可以说是google最早开源的3篇论文,开创了大数据时代

1.5 大数据处理的核心数据类型

大数据处理的核心数据类型通常为: 文本类型

1.6 大数据的数据来源

# 1.自己公司业务系统运行产生的日志 (nginx,log4j,数据库中的日志)
# 2.爬虫
# 3.行业数据  电信 医疗 政府.

1.7 大数据目前面临问题

# 1.存储
	如何解决现有大数据中数据存储问题
# 2.统计|计算
	如何解决现有大规模的数据集中统计和计算的问题

二. Hadoop的引言

2.1 解决问题

Hadoop 主要是用来解决大数据所面临的数据存储数据计算的问题。

2.2 Hadoop诞生

2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。然后Yahoo招安Doug Gutting及其项目。
2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
2006年2月被分离出来,成为一套完整独立的软件,起名为Hadoop
Hadoop名字不是一个缩写,而是一个生造出来的词。是Hadoop之父Doug Cutting儿子毛绒玩具象命名的。

Hadoop之父Doug Cutting,可能所有人都间接用过他的作品,他是LuceneNutchHadoop等项目的发起人。是他,把高深莫测的搜索技术形成产品,贡献给我们;还是他,打造了目前在云计算和大数据领域里如日中天的Hadoop。

在这里插入图片描述


# Haoop核心设计
		HDFS (Hadoop Distribute File System)           ------->  GFS
		MapReduce                                      ------->  MapReduce
		HBase                                          ------->  Big Table

apache组织正式开源,并将hadoop作为apache顶级的开源项目之一

2.3 Hadoop的发行版本

版本 是否收费 使用难度
Apache 开源的Hadoop 免费 ★★★★☆
Clouder(CDH) $4000 (1个节点) ★★★☆☆
Hortonworks $12500(10个节点) ★★★☆☆
华为hadoop 未知(内部使用) ☆☆☆☆☆

注意:在实际开发中Appache的Hadoop企业实际使用并不多。最原始(基础)版本。但是却是学习hadoop的基础。

2.4 hadoop的生态圈

在这里插入图片描述

# 1.hadoop核心 HDFS,MapReduce
# 2.Hive 通过SQl语句形式执行mapreduce
# 3.Hbase Nosql数据库
# 4.Flume 日志采集工具
# 5.Sqoop sql to hadoop 将数据导入到hadoop中
# 6.Zookeeper 协调服务工具
# 7.Mahout 算法库
# 8.Pig 是MapReduce的一个抽象,它是一个工具/平台,用于分析较大的数据集,并将它们表示为数据流。

三.Hadoop的安装(单机)

说明: hadoop的核心为HDFSMapReduce

3.1 Hadoop的核心之HDFS

3.1.1 HDFS引言
# HDFS (Hadoop Distribute File System): Hadoop 的分布式文件存储系统,他核心解决的大数据的存储问题
3.1.2 HDFS基本架构图

在这里插入图片描述

  • NameNode: 是整个HDFS集群的总入口,存储着HDFS的集群的文件元数据(如:client上传文件的文件名 副本数 块数等相关信息)。
  • DataNode: 是真正用来负责存储数据的节点,一个DataNode就是一个真实的物理主机。
  • Block: 数据块,为了能通过多个节点保存大数据集,HDFS将大数据集文件切分成一块块的数据块,在现有hadoop2版本中默认一个块大小为128M。
3.1.3 Hadoop的安装

准备环境

# 0. 安装centos7.x 虚拟机,并启动
# 1. 输入hostname 查看当前主机名
# 2. 使用vim /etc/hostname  修改主机名
# 3. 重启centos 系统  reboot
# 4. 查看修改之后的主机名 hostname
# 5. 添加主机名与ip映射 vim /etc/hosts
	加入 ip(当前ip地址) centos(主机名)
# 6. 检测主机名ip配置是否生效
# 7.关闭防火墙 
   `systemctl stop firewalld
   `systemctl disable firewalld

配置java环境变量

# 0.下载jdk
	wget https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.rpm

# 1. 安装jdk文件
	rpm -ivh jdk-8u231-linux-x64.rpm

# 2. 配置环境变量 vim /etc/profile
	export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
	export PATH=$PATH:$NODE_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin

# 3. 重新载入配置
	source /etc/profile

# 4. 检测配置是否生效
	jps 
	java
	javac

安装hadoop

# 0.下载hadoo 
	wget hadoop-2.9.2.tar.gz    注意:本次课程使用的事hadoop2.9.2版本 和 centos7.x

# 1. 上传hadoop软件包到系统中
	hadoop-2.9.2.tar.gz

# 2. 解压到指定文件目录中
	tar -zxvf hadoop-2.9.2.tar.gz -C /usr

# 3. 配置hadoop环境变量
	export HADOOP_HOME=/usr/hadoop-2.9.2
	export PATH=$PATH$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 4. 测试环境变量是否配置成功
	直接输入hdfs命令查看效果

# 5. 查看hadoop的安装目录 tree -L 1  /usr/hadoop-2.9.2
    	[root@hadoop ~]# tree -L 2 hadoop-2.9.2
      hadoop-2.9.2
      ├── bin
      │   ├── container-executor
      │   ├── hadoop
      │   ├── hadoop.cmd
      │   ├── hdfs
      │   ├── hdfs.cmd
      │   ├── mapred
      │   ├── mapred.cmd
      │   ├── rcc
      │   ├── test-container-executor
      │   ├── yarn
      │   └── yarn.cmd
      ├── etc
      │   └── hadoop
      ├── include
      │   ├── hdfs.h
      │   ├── Pipes.hh
      │   ├── SerialUtils.hh
      │   ├── StringUtils.hh
      │   └── TemplateFactory.hh
      ├── lib
      │   └── native
      ├── libexec
      │   ├── hadoop-config.cmd
      │   ├── hadoop-config.sh
      │   ├── hdfs-config.cmd
      │   ├── hdfs-config.sh
      │   ├── httpfs-config.sh
      │   ├── kms-config.sh
      │   ├── mapred-config.cmd
      │   ├── mapred-config.sh
      │   ├── yarn-config.cmd
      │   └── yarn-config.sh
      ├── LICENSE.txt
      ├── logs
      │   ├── hadoop-root-datanode-hadoop.log
      │   ├── hadoop-root-datanode-hadoop.out
      │   ├── hadoop-root-datanode-hadoop.out.1
      │   ├── hadoop-root-datanode-hadoop.out.2
      │   ├── hadoop-root-datanode-hadoop.out.3
      │   ├── hadoop-root-datanode-hadoop.out.4
      │   ├── hadoop-root-datanode-hadoop.out.5
      │   ├── hadoop-root-namenode-hadoop.log
      │   ├── hadoop-root-namenode-hadoop.out
      │   ├── hadoop-root-namenode-hadoop.out.1
      │   ├── hadoop-root-namenode-hadoop.out.2
      │   ├── hadoop-root-namenode-hadoop.out.3
      │   ├── hadoop-root-namenode-hadoop.out.4
      │   ├── hadoop-root-namenode-hadoop.out.5
      │   ├── hadoop-root-secondarynamenode-hadoop.log
      │   ├── hadoop-root-secondarynamenode-hadoop.out
      │   ├── hadoop-root-secondarynamenode-hadoop.out.1
      │   ├── hadoop-root-secondarynamenode-hadoop.out.2
      │   ├── hadoop-root-secondarynamenode-hadoop.out.3
      │   ├── hadoop-root-secondarynamenode-hadoop.out.4
      │   ├── hadoop-root-secondarynamenode-hadoop.out.5
      │   ├── SecurityAuth-root.audit
      │   ├── userlogs
      │   ├── yarn-root-nodemanager-hadoop.log
      │   ├── yarn-root-nodemanager-hadoop.out
      │   ├── yarn-root-nodemanager-hadoop.out.1
      │   ├── yarn-root-nodemanager-hadoop.out.2
      │   ├── yarn-root-nodemanager-hadoop.out.3
      │   ├── yarn-root-nodemanager-hadoop.out.4
      │   ├── yarn-root-nodemanager-hadoop.out.5
      │   ├── yarn-root-resourcemanager-hadoop.log
      │   ├── yarn-root-resourcemanager-hadoop.out
      │   ├── yarn-root-resourcemanager-hadoop.out.1
      │   ├── yarn-root-resourcemanager-hadoop.out.2
      │   ├── yarn-root-resourcemanager-hadoop.out.3
      │   ├── yarn-root-resourcemanager-hadoop.out.4
      │   └── yarn-root-resourcemanager-hadoop.out.5
      ├── NOTICE.txt
      ├── README.txt
      ├── sbin
      │   ├── distribute-exclude.sh
      │   ├── FederationStateStore
      │   ├── hadoop-daemon.sh
      │   ├── hadoop-daemons.sh
      │   ├── hdfs-config.cmd
      │   ├── hdfs-config.sh
      │   ├── httpfs.sh
      │   ├── kms.sh
      │   ├── mr-jobhistory-daemon.sh
      │   ├── refresh-namenodes.sh
      │   ├── slaves.sh
      │   ├── start-all.cmd
      │   ├── start-all.sh
      │   ├── start-balancer.sh
      │   ├── start-dfs.cmd
      │   ├── start-dfs.sh
      │   ├── start-secure-dns.sh
      │   ├── start-yarn.cmd
      │   ├── start-yarn.sh
      │   ├── stop-all.cmd
      │   ├── stop-all.sh
      │   ├── stop-balancer.sh
      │   ├── stop-dfs.cmd
      │   ├── stop-dfs.sh
      │   ├── stop-secure-dns.sh
      │   ├── stop-yarn.cmd
      │   ├── stop-yarn.sh
      │   ├── yarn-daemon.sh
      │   └── yarn-daemons.sh
      └── share
          ├── doc
          └── hadoop
  • bin 和 sbin 目录用来启动hdfs yarn 等可执行的脚本文件
  • etc 目录用来存放hadoop的配置文件
  • logs目录用来存放hadoop的日志文件
  • share用来存放hadoop的依赖jar第三方jar目录
  • lib用来存放hadoop使用核心库文件
# 6.配置core-site.xml
	vim /usr/hadoop-2.9.2/etc/hadoop/core-site.xml  加入如下配置: 
<configuration>
  <!--配置hdfs文件系统默认名称-->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop(主机名):9000</value>
  </property>
</configuration>

注意:名称是一个HDFS的URL

# 7.配置hdfs-site.xml
	vim /usr/hadoop-2.9.2/etc/hadoop/hdfs-site.xml 加入如下配置:
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
# 8.配置slaves文件
	vim /usr/hadoop-2.9.2/etc/hadoop/slaves    加入如下配置:
	hadoop (当前主机名)
# 9.格式化hdfs
	 hdfs namenode -format (仅仅是第一次使用需要格式化)  
	
	 `出现如下错误: /usr/hadoop-2.9.2/bin/hdfs:行319: /usr/java/jdk1.8.0_171-amd64/bin//bin/java: 没有那个文件或目录`参考步骤10解决

注意:这里的格式化是格式成hadoop可以识别的文件系统,比如我们买了一块硬盘我们需要格式化成windows或者mac,linux系统识别的文件系统,才能使用这个文件系统。

# 10.配置etc/hadoop目录中中hadoop-env.sh
	将原来export JAVA_HOME=$JAVA_HOME ====修改为jdk安装目录==> export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
# 11.启动HDFS
	start-dfs.sh  启动
	stop-dfs.sh   关闭
# 12. 查看hadoop是否启动成功
    jps 存在以下进程名称说明启动成功 
    5876 SecondaryNameNode
    5702 DataNode
    5995 Jps
    5612 NameNode

注意:只要能看到NameNode 和 DataNode 说明启动成功

# 13. 访问hdfs提供的web界面
	http://IP地址:50070/

3.2 查看HDFS日志

# 1.进入hadoop安装目录中logs目录中
   
	 hadoop-root-namenode-hadoop.log ---- namenode日志
	 hadoop-root-datanode-hadoop.log ---- datanode日志
	 hadoop-root-secondarynamenode-hadoop.log ---- secondnamenode  日志
	 yarn-root-resourcemanager-hadoop.log     ---- resourcemanager 日志
	 yarn-root-nodemanager-hadoop.log         ---- nodemanager     日志

注意:针对于hdfs日志规则为hadoop-用户名-服务名-主机名.log,针对于后续学习的yarn生成规则为yarn-用户名-服务名-主机名.log

3.3 修改hdfs默认数据位置

  • 说明: 通过查看日志得知namenode数据和datanode数据默认都是存放在/tmp//tmp/hadoop-root/dfs下,这对于我们来说是不安全的,因为tmp目录为临时目录,系统可能会定期清除目录中文件,因此为了保证数据安全修改数据默认的存放位置
# 1.修改hadoop安装目录下etc/hadoop/core-site.xml  加入如下配置
<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/hadoop-2.9.2/data</value>
</property>

3.4 配置SSH免密登录

SSH 为 [Secure Shell](https://baike.baidu.com/item/Secure Shell) 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。

从客户端来看,SSH提供两种级别的安全验证。

3.4.1基于口令的安全验证

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

3.4.2 基于密匙的安全验证

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

注意:第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒 。

3.4.3 ssh 登录过程

在这里插入图片描述

3.4.4 配置ssh
# 1. 生成ssh秘钥对
	ssh-keygen -t rsa 然后回车几次就可以啦

# 2. 查看秘钥对生成位置
	ls /root/.ssh 会发现在home目录中生成了两个文件
		id_rsa(私钥)  id_rsa.pub(公钥)

# 3. 将公钥加入另一台机器的受信列表中
	ssh-copy-id hadoop(主机名) 
	cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (和上面命令一样)

# 4. 再次查看/root/.ssh 目录 多出两个文件其中authorized_keys就是存放公钥列表文件
	authorized_keys  id_rsa  id_rsa.pub  known_hosts

# 5. 检测是否配置成功
	ssh hadoop  不需要输入密码即可

四. HDFS的基本操作

4.1 Shell基本操作

4.1.1 命令总结
[root@hadoop ~]# hdfs dfs
  Usage: hadoop fs [generic options]
          [-appendToFile <localsrc> ... <dst>]
          [-cat [-ignoreCrc] <src> ...]
          [-checksum <src> ...]
          [-chgrp [-R] GROUP PATH...]
          [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
          [-chown [-R] [OWNER][:[GROUP]] PATH...]
          [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
          [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
          [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]
          [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
          [-createSnapshot <snapshotDir> [<snapshotName>]]
          [-deleteSnapshot <snapshotDir> <snapshotName>]
          [-df [-h] [<path> ...]]
          [-du [-s] [-h] [-x] <path> ...]
          [-expunge]
          [-find <path> ... <expression> ...]
          [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
          [-getfacl [-R] <path>]
          [-getfattr [-R] {
   -n name | -d} [-e en] <path>]
          [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
          [-help [cmd ...]]
          [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
          [-mkdir [-p] <path> ...]
          [-moveFromLocal <localsrc> ... <dst>]
          [-moveToLocal <src> <localdst>]
          [-mv <src> ... <dst>]
          [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
          [-renameSnapshot <snapshotDir> <oldName> <newName>]
          [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
          [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
          [-setfacl [-R] [{
   -b|-k} {
   -m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
          [-setfattr {
   -n name [-v value] | -x name} <path>]
          [-setrep [-R] [-w] <rep> <path> ...]
          [-stat [format] <path> ...]
          [-tail [-f] <file>]
          [-test -[defsz] <path>]
          [-text [-ignoreCrc] <src> ...]
          [-touchz <path> ...]
          [-truncate [-w] <length> <path> ...]
          [-usage [cmd ...]]
4.1.2 常见命令
# 1.查看目录结构
[root@hadoop1 ~]# hdfs dfs -ls /
# 2.上传文件到HDFS
[root@hadoop1 ~]# hdfs dfs -put aa.txt /

在这里插入图片描述

# 3.创建文件夹
[root@hadoop1 ~]# hdfs dfs -mkdir -p /bbb/cccc
[root@hadoop1 ~]# hdfs dfs -ls /
Found 2 items
-rw-r--r--   1 root supergroup         58 2019-12-18 16:13 /aa.txt
drwxr-xr-x   - root supergroup          0 2019-12-18 16:16 /bbb
[root@hadoop1 ~]# hdfs dfs -ls /bbb/cccc

在这里插入图片描述

# 4.查看文件内容
[root@hadoop1 ~]# hdfs dfs -cat /aa.txt
chenyn 1
xiaohei 1
wangwu 1
xiaohei 1
chenyn 1
zhangsan 1
[root@hadoop1 ~]# hdfs dfs -text /aa.txt
chenyn 1
xiaohei 1
wangwu 1
xiaohei 1
chenyn 1
zhangsan 1

在这里插入图片描述

# 5.删除文件

[root@hadoop1 ~]# hdfs dfs -rm /aa.txt
Deleted /aa.txt

在这里插入图片描述

# 6.删除空目录

[root@hadoop1 ~]# hdfs dfs -rm -r /bbb           -----  递归删除
Deleted /bbb
[root@hadoop1 ~]# hdfs dfs -mkdir -p /aa/bb/cc   -----  创建多级目录
[root@hadoop1 ~]# hdfs dfs -rm -r -f /aa         -----  强制删除
Deleted /aa

在这里插入图片描述

# 7.追加文件内容

[root@hadoop1 ~]# hdfs dfs -put aa.txt /
[root@hadoop1 ~]# hdfs dfs -cat /aa.txt
chenyn 1
xiaohei 1
wangwu 1
xiaohei 1
chenyn 1
zhangsan 1
[root@hadoop1 ~]# touch bb.txt
[root@hadoop1 ~]# echo "xiaohei 1" >> bb.txt
[root@hadoop1 ~]# cat bb.txt
xiaohei 1
[root@hadoop1 ~]# hdfs dfs -appendToFile bb.txt /aa.txt
[root@hadoop1 ~]# hdfs dfs -cat /aa.txt
chenyn 1
xiaohei 1
wangwu 1
xiaohei 1
chenyn 1
zhangsan 1
xiaohei 1

在这里插入图片描述

# 8.查看文件的校验核

[root@hadoop1 ~]# hdfs dfs -checksum /aa.txt
/aa.txt	MD5-of-0MD5-of-512CRC32C	000002000000000000000000fb2fbd294298362dbaabfb7fc8724306

在这里插入图片描述

# 9.查看文件的权限

[root@hadoop1 ~]# hdfs dfs -ls -R /aa.txt
-rw-r--r--   1 root supergroup         68 2019-12-18 16:35 /aa.txt
[root@hadoop1 ~]# hdfs dfs -chmod a+x /aa.txt
[root@hadoop1 ~]# hdfs dfs -ls -R /aa.txt
-rwxr-xr-x   1 root supergroup         68 2019-12-18 16:35 /aa.txt

在这里插入图片描述

# 10.从本地copy到hdfs中

[root@hadoop1 ~]# hdfs dfs -copyFromLocal bb.txt /bb.txt      -----从本地复制文件到HDFS
[root@hadoop1 ~]# hdfs dfs -copyFromLocal bb.txt /bb.txt      -----如果文件已经存在hdfs 复制失败
copyFromLocal: `/bb.txt': File exists
[root@hadoop1 ~]# hdfs dfs -copyFromLocal -f bb.txt /bb.txt   -----如果文件已经存在hdfs 可以强制覆盖hdfs中文件

在这里插入图片描述

# 11.hdfs中复制文件

[root@hadoop1 ~]# hdfs dfs -mkdir /datas
[root@hadoop1 ~]# hdfs dfs -cp /aa.txt /datas
[root@hadoop1 ~]# hdfs dfs -ls /datas
Found 1 items
-rw-r--r--   1 root supergroup         68 2019-12-18 16:54 /datas/aa.txt

在这里插入图片描述

# 12.从hdfs上下载文件到本地

[root@hadoop1 ~]# hdfs dfs -ls /
Found 3 items
-rwxr-xr-x   1 root supergroup         68 2019-12-18 16:35 /aa.txt
-rw-r--r--   1 root supergroup         10 2019-12-18 16:50 /bb.txt
drwxr-xr-x   - root supergroup          0 2019-12-18 16:54 /datas
[root@hadoop1 ~]# ls
aa.txt  bb.txt  hadoop-2.9.2.tar.gz  jdk-8u171-linux-x64.rpm
[root@hadoop1 ~]# hdfs dfs -get /aa.txt /root/down.txt
[root@hadoop1 ~]# ls
aa.txt  bb.txt  down.txt  hadoop-2.9.2.tar.gz  jdk-8u171-linux-x64.rpm

在这里插入图片描述

# 13.查找某个路径下文件

[root@hadoop1 ~]# hdfs dfs -find / -name "aa.txt"
/aa.txt
/datas/aa.txt

在这里插入图片描述

# 14.将hdfs文件移动到hdfs另一个位置

[root@hadoop1 ~]# hdfs dfs -ls /
Found 3 items
-rwxr-xr-x   1 root supergroup         68 2019-12-18 16:35 /aa.txt
-rw-r--r--   1 root supergroup         10 2019-12-18 16:50 /bb.txt
drwxr-xr-x   - root supergroup          0 2019-12-18 16:54 /datas
[root@hadoop1 ~]# hdfs dfs -ls /datas
Found 1 items
-rw-r--r--   1 root supergroup         68 2019-12-18 16:54 /datas/aa.txt
[root@hadoop1 ~]# hdfs dfs -mv /bb.txt /datas/bb.txt
[root@hadoop1 ~]# hdfs dfs -ls /
Found 2 items
-rwxr-xr-x   1 root supergroup         68 2019-12-18 16:35 /aa.txt
drwxr-xr-x   - root supergroup          0 2019-12-18 17:03 /datas
[root@hadoop1 ~]# hdfs dfs -ls /datas
Found 2 items
-rw-r--r--   1 root supergroup         68 2019-12-18 16:54 /datas/aa.txt
-rw-r--r--   1 root supergroup         10 2019-12-18 16:50 /datas/bb.txt

在这里插入图片描述


4.2 Java操作HDFS

4.2.1 引入依赖
<properties>
  <hadoop.version>2.9.2</hadoop.version>
</properties>
<dependencies>
  <!--hadoop公共依赖-->
  <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>${hadoop.version}</version>
  </dependency>
  <!--hadoop client 依赖-->
  <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>${hadoop.version}</version>
  </dependency>
  <!--junit-->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
  </dependency>
</dependencies>

4.2.2 获取hdfs客户端
public class TestHDFS {
   
    private FileSystem fileSystem;  //hdfs客户端对象
    @Before
    public void before() throws IOException {
   
        //hadoop文件系统的权限设置为root
        System.setProperty("HADOOP_USER_NAME","root");
        //用来对core-site.xml hdfs-site.xml进行配置
        Configuration conf = new Configuration();
        //连接hdfs
        conf.set("fs.defaultFS","hdfs://10.15.0.4:9000");
        //设置上传文件的副本集
        conf.set("dfs.replication","1");
        fileSystem =  FileSystem.get(conf);
    }
    @After
    public void close() throws IOException {
   
        fileSystem.close();
    }
}

注意: FileSystem是java操作HDFS的客户端对象

4.2.3 上传文件到hdfs
@Test
public void testUpload() throws IOException {
   
  FileInputStream is = new FileInputStream("/Users/chenyannan/IdeaProjects/ideacode/hadoop_hdfs/pom.xml");
  Path path = new Path("/pom.xml");
  FSDataOutputStream os = fileSystem.create(path);
  //参数1:输入流  参数2:输出流  参数3:缓冲区大小  参数4:是否关闭流
  IOUtils.copyBytes(is,os,1024,true);
}

4.2.4 hdfs下载文件
// 1.第一种方式
@Test
public void testDownload() throws IOException {
   
  Path source = new Path("/pom.xml");
  Path des = new Path("/Users/chenyannan");
  fileSystem.copyToLocalFile(source,des);
}
// 2.第二种方式
@Test
public void testDownload1() throws IOException {
   
  Path path = new Path("/pom.xml");
  FSDataInputStream in = fileSystem.open(path);
  FileOutputStream os = new FileOutputStream("/Users/chenyannan/aa.xml");
  IOUtils.copyBytes(in,os,1024,true);
}

4.2.5 hdfs创建目录
@Test
public void testMkdirs() throws IOException {
   
  boolean mkdirs = fileSystem.mkdirs(new P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值