一、Hadoop简介:
1.大数据略知一二:
1)大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产,需要在合理的时间内达到提取、管理、处理、并且整理成为帮助企业运营决策更积极目的的信息;
2)在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》 中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理;
3)大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
- 图解大数据:
http://www.ruanyifeng.com/blog/2017/07/iaas-paas-saas.html
3.项目起源:
Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。Hadoop是一个能够对大量数据进行分布式处理的软件框架。
Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。
4.hadoop优点:
1)高可靠:在多台廉价商用机器群集上,善于存放超大文件;
2)高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
3)高效性:处理速度较快。
4)高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
5)低成本:hadoop是开源的,项目的软件成本因此会大大降低。
6)Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。
补充:云计算大数据必会单位(换算为1024=2^10;1B=8b,1汉字=2B)
bit比特|位--byte字节--KB--MB--GB--TB--PB--EB--ZB--YB--BB--NB--DB
5.hadoop缺点:
1)低时间延迟的数据访问:要求在例如几十毫秒内完成数据访问的应用,不适合在HDFS上运行,HDFS虽然有强大的高数据吞吐量,但是以提高时间延迟为代价,可以使用HBase满足低延迟的访问需求;
2)无法高效存储大量小文件:大量小文件会造成整个文件系统的目录树和索引目录相对较大,而这些的元数据都会存放在namenode节点;
二、Hadoop构成:HDFS+MapReduce:
1.HDFS引擎结构:
1)Hadoop Distributed File System(HDFS)引擎:包括namenode(名称空间节点)和datanode(数据节点);
https://www.cnblogs.com/liango/p/7136448.html
基础概念:
1)文件块:Block,datanode中存放数据最小逻辑单元,默认块大小为64M,便于管理,不受磁盘限制,数据可在datanode的总block中进行冗余备份,存储的副本数量要少于datanode节点的数量,当一个或多个块出现故障,用户可以直接去其他地方读取数据副本;
2)NameNode:管理文件系统的命名空间,属于管理者角色,维护文件系统树内所有文件和目录,记录每个文件在各个DataNode上的位置和副本信息,并协调客户端对文件的访问;
3)DataNode:负责处理文件系统客户端的文件读写请求,存储并检索数据块,并定期向NameNode发送所存储的块的列表,属于工作者角色。负责所在物理节点的存储管理,按照一次写入,多次读取的原则,存储文件按照Block块进行存储;
4)Secondary NameNode:相当于NameNode的快照,也称之为二级NameNode,能够周期性的备份NameNode,记录NameNode上的元数据等。为防止NameNode进程出现故障,起到备份作用;
2. MapReduce 引擎构成:
1)MapReduce 引擎:是用于并行处理计算大数据集的软件框架,是HDFS(对于本文)的上一层,与hadoop结合工作,将用户的任务分发到上千台商用机器组成的集群上。最简单的 MapReduce应用程序至少包含 2个部分:一个 Map (映射)函数、一个 Reduce (归纳)函数,Map负责将任务分解成多个子任务,reduce负责把分解后的多任务的处理结果进行汇总;
JobTrackers :是一个master进程,用于作业的调度和管理工作,一个Hadoop集群中只有一台JobTracker;
TaskTrackers:运行在多个节点上的Slave服务,用于执行任务。TaskTracker需要运行在HDFS的DataNode节点上;
MapReduce 引擎的缺点:JobTracker单点瓶颈(负责集群心跳信息、作业管理)、JobTracker分配作业延迟高、缺乏灵活性;
2) YARN架构:是MapReduce 引擎的V2版本,解决MapReduce 引擎面临的性能瓶颈问题,将集群资源管理和作业调度进行分离;
ResourceManager进程:管理集群资源的资源管理器
MapReduce:管理作业任务
3)数据仓库工具Hive和分布式数据库Hbase:NoSQL数据库
3.Hadoop核心概念注意事项:
1)HDFS把节点分成两类:NameNode和DataNode。NameNode是唯一的,程序与之通信,然后从DataNode上存取文件。这些操作是透明的,与普通的文件系统API没有区别。
2)MapReduce则是JobTracker节点为主,分配工作以及负责和用户程序通信。
3)HDFS和MapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算。
4)Hadoop也跟其他云计算项目有共同点和目标:实现海量数据的计算。而进行海量计算需要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。
5)60款大数据软件:http://blog.csdn.net/SunWuKong_Hadoop/article/details/53580425
6)Hadoop生态:http://blog.csdn.net/u010270403/article/details/51493191
三、案例:部署Hadoop分布式存储集群:
环境:
系统 | IP地址 | 主机名 | 所需软件 |
Centos 7.4 64bit 1708 | 192.168.100.101 | master namenode | hadoop-2.7.6.tar.gz jdk-8u171-linux-x64.tar.gz |
Centos 7.4 64bit 1708 | 192.168.100.102 | slave1 datanode | hadoop-2.7.6.tar.gz jdk-8u171-linux-x64.tar.gz |
Centos 7.4 64bit 1708 | 192.168.100.103 | slave2 datanode | hadoop-2.7.6.tar.gz jdk-8u171-linux-x64.tar.gz |
版本要求:
hadoop版本>=2.7:要求Java 7(openjdk/oracle)
hadoop版本<=2.6:要求Java 6(openjdk/oracle)
步骤:
- 配置所有节点间的域名解析及创建用户(所有节点配置相同,在此列举master节点配置);
- 配置master节点远程管理slave节点;
- 在所有节点安装JDK环境(所有节点配置相同,在此列举master节点配置);
- 在所有节点安装Hadoop并简要配置(所有节点配置相同,在此列举master节点配置);
- 在master节点进行配置hadoop服务,并将配置文件复制到slave节点上;
- 在master节点初始化并且启动Hadoop进程;
- 验证slave节点的进程状态;
- 网页查看http://master:50070统计hadoop集群的信息;
- Hadoop中数据的基本管理;
- 配置所有节点间的域名解析及创建用户(所有节点配置相同,在此列举master节点配置):
[root@master ~]# hostnamectl set-hostname master
[root@master ~]# cat <<END >>/etc/hosts
192.168.100.101 master
192.168.100.102 slave1
192.168.100.103 slave2
END
[root@master ~]# useradd hadoop
[root@master ~]# echo "hadoop" |passwd --stdin hadoop
- 配置master节点远程管理slave节点:
[root@master ~]# su - hadoop
上一次登录:四 5月 31 01:54:26 CST 2018pts/0 上
[hadoop@master ~]$ ssh-keygen -t rsa
[hadoop@master ~]$ ssh-copy-id hadoop@192.168.100.101
[hadoop@master ~]$ ssh-copy-id hadoop@192.168.100.102
[hadoop@master ~]$ ssh-copy-id hadoop@192.168.100.103
[hadoop@master ~]$ ssh hadoop@master ##远程连接slave节点,进行确认key值文件,不然在启动hadoo时,会出现key的问题导致无法启动
[hadoop@master ~]$ ssh hadoop@slave1
[hadoop@master ~]$ ssh hadoop@slave2
- 在所有节点安装JDK环境(所有节点配置相同,在此列举master节点配置):
[hadoop@master ~]$ exit
[root@master ~]# tar zxvf jdk-8u171-linux-x64.tar.gz
[root@master ~]# mv /root/jdk1.8.0_171/ /usr/local/java/
[root@master ~]# ls /usr/local/java/
[root@master ~]# cat <<END >>/etc/profile
JAVA_HOME=/usr/local/java/
JRE_HOME=\$JAVA_HOME/jre
CLASS_PATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib
PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
END
[root@master ~]# source /etc/profile
[root@master ~]# java -version
java version "1.8.0_171"
- 在所有节点安装Hadoop并简要配置(所有节点配置相同,在此列举master节点配置):
[root@master ~]# tar zxvf hadoop-2.7.6.tar.gz
[root@master ~]# mv /root/hadoop-2.7.6/ /usr/local/hadoop/
[root@master ~]# ls /usr/local/hadoop/
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share
[root@master ~]# cat <<END >>/etc/profile
export HADOOP_HOME=/usr/local/hadoop/
export PATH=\$PATH:\$HADOOP_HOME/bin
END
[root@master ~]# source /etc/profile
[root@master ~]# echo "export JAVA_HOME=/usr/local/java/" >>/usr/local/hadoop/etc/hadoop/hadoop-env.sh
##设置HDFS存储加载jdk的环境变量
[root@master ~]# echo "export JAVA_HOME=/usr/local/java/" >>/usr/local/hadoop/etc/hadoop/yarn-env.sh
##设置mapreduce的V2版本--YARN加载jdk的环境变量
[root@master ~]# mkdir /usr/local/hadoop/name/ ##存放namenode中元数据的位置
[root@master ~]# mkdir /usr/local/hadoop/data/ ##存放datanode中的数据目录
[root@master ~]# mkdir /usr/local/hadoop/tmp/ ##存放用户临时文件
[root@master ~]# mkdir /usr/local/hadoop/var/ ##存放服务动态变化文件
[root@master ~]# chown hadoop /usr/local/hadoop/ -R
- 在master节点进行配置hadoop服务,并将配置文件复制到slave节点上;
[root@master ~]# su - hadoop
[hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/core-site.xml ##指定名称节点namenode的相关配置
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
[hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml ##指定hdfs存储的相关配置
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
[hadoop@master ~]$ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml ##修改mapreduce配置文件,将其改为YARN模型
[hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/mapred-site.xml ##指定MapR的相关配置
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/local/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
[hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/slaves ##指定slave的名称
slave1
slave2
附:此文件明确指定DataNode节点,可以通过节点的添加和减少来满足整个hadoop群集的伸缩性,添加节点时,首先将新节点的配置保证与NameNode节点配置相同,在此文件指定新的DataNode节点名,重新启动NameNode便完成。但为保证原有DataNode节点与新添加DataNode节点的数据进行均衡存储,需要执行此命令进行重新平衡数据块的分布:/usr/local/hadoop/sbin/start-balancer.sh
[hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/yarn-site.xml ##指定YARN的相关配置
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
[hadoop@master ~]$ scp -r /usr/local/hadoop/etc/hadoop/* hadoop@192.168.100.102:/usr/local/hadoop/etc/hadoop/
[hadoop@master ~]$ scp -r /usr/local/hadoop/etc/hadoop/* hadoop@192.168.100.103:/usr/local/hadoop/etc/hadoop/
- 在master节点初始化并且启动Hadoop进程:
[hadoop@master ~]$ /usr/local/hadoop/bin/hdfs namenode -format
[hadoop@master ~]$ ls /usr/local/hadoop/name/ ##初始化所生成的名称节点文件
current
注:第一次执行格式化,提示信息如上图,如若第二次再次执行格式化,需要将namenode节点的/usr/local/hadoop/name/目录内容清空,并且将datanode节点的/usr/local/hadoop/data/目录清空,方可再次执行格式化,否则会造成namenode节点与datanode节点的数据版本ID不一致,导致启动服务失败;
[hadoop@master ~]$ /usr/local/hadoop/sbin/start-all.sh ##启动hadoop的所有进程
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-master.out
slave2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-slave2.out
slave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-slave1.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-resourcemanager-master.out
slave2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
slave1: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-nodemanager-slave1.out
注:/usr/local/hadoop/sbin/start-all.sh命令等于/usr/local/hadoop/sbin/start-dfs.sh加/usr/local/hadoop/sbin/start-yarn.sh,前者启动hdfs系统,后者启动mapreduce调度工具,关闭两进程的命令为/usr/local/hadoop/sbin/stop-all.sh
[hadoop@master ~]$ netstat -utpln
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:50070 0.0.0.0:* LISTEN 7266/java ##namenode进程的http端口
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 192.168.100.101:8088 0.0.0.0:* LISTEN 7623/java
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 192.168.100.101:8030 0.0.0.0:* LISTEN 7623/java
tcp 0 0 192.168.100.101:8032 0.0.0.0:* LISTEN 7623/java
tcp 0 0 192.168.100.101:8033 0.0.0.0:* LISTEN 7623/java
tcp 0 0 192.168.100.101:8035 0.0.0.0:* LISTEN 7623/java
tcp 0 0 192.168.100.101:9000 0.0.0.0:* LISTEN 7266/java ##客户端连接hdfs系统时用到的端口
tcp 0 0 192.168.100.101:50090 0.0.0.0:* LISTEN 7467/java ## secondary namenode进程的http端口
[hadoop@master ~]$ /usr/local/hadoop/bin/hdfs dfsadmin -report ##查看hadoop存储节点的状态信息
Configured Capacity: 39631978496 (36.91 GB)
Present Capacity: 33541480448 (31.24 GB)
DFS Remaining: 33541472256 (31.24 GB)
DFS Used: 8192 (8 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
-------------------------------------------------
Live datanodes (2):
Name: 192.168.100.103:50010 (slave2)
Hostname: slave2
Decommission Status : Normal
Configured Capacity: 19815989248 (18.46 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 3045191680 (2.84 GB)
DFS Remaining: 16770793472 (15.62 GB)
DFS Used%: 0.00%
DFS Remaining%: 84.63%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu May 31 03:03:09 CST 2018
Name: 192.168.100.102:50010 (slave1)
Hostname: slave1
Decommission Status : Normal
Configured Capacity: 19815989248 (18.46 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 3045306368 (2.84 GB)
DFS Remaining: 16770678784 (15.62 GB)
DFS Used%: 0.00%
DFS Remaining%: 84.63%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu May 31 03:03:09 CST 2018
[hadoop@master ~]$ jps
7266 NameNode ##namenode节点主进程
7623 ResourceManager ##mapreduce管理进程
7467 SecondaryNameNode ##namenode的备份进程,避免namenode进程意外停止,客户端无法读写数据
7883 Jps
- 验证slave节点的进程状态;
[root@slave1 ~]$ su - hadoop
[hadoop@slave1 ~]$ netstat -utpln
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:13562 0.0.0.0:* LISTEN 3391/java
tcp 0 0 0.0.0.0:50010 0.0.0.0:* LISTEN 3274/java
tcp 0 0 0.0.0.0:50075 0.0.0.0:* LISTEN 3274/java
tcp 0 0 0.0.0.0:39938 0.0.0.0:* LISTEN 3391/java
tcp 0 0 0.0.0.0:50020 0.0.0.0:* LISTEN 3274/java
tcp 0 0 127.0.0.1:38373 0.0.0.0:* LISTEN 3274/java
tcp 0 0 0.0.0.0:8040 0.0.0.0:* LISTEN 3391/java
tcp 0 0 0.0.0.0:8042 0.0.0.0:* LISTEN 3391/java
[hadoop@slave1 ~]$ jps
3526 Jps
3274 DataNode
3391 NodeManager ##与namenode执行心跳信息的节点进程
- 网页查看http://master:50070统计hadoop集群的信息;
Hadoop中数据的基本管理:
[hadoop@master ~]$ pwd
/home/hadoop
[hadoop@master ~]$ touch 1.file
[hadoop@master ~]$ ls
1.file
[hadoop@master ~]$ hadoop fs -ls file:///home/hadoop/ ##查看本地文件
[hadoop@master ~]$ hadoop fs -ls / ##查看hadoop文件
[hadoop@master ~]$ hadoop fs -mkdir /input1
[hadoop@master ~]$ hadoop fs -put /home/hadoop/1.file /input1 ##上传本地文件
[hadoop@master ~]$ hadoop fs -ls /input1
Found 1 items
-rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input1/1.file
[hadoop@master ~]$ hadoop fs -cat /input1/1.file ##查看hadoop文件内容
[hadoop@master ~]$ hadoop fs -cat file:///home/hadoop/1.file ##查看本地文件内容
[hadoop@master ~]$ hadoop fs -get /input1/1.file /tmp ##下载hadoop文件
[hadoop@master ~]$ ls /tmp/
1.file
[hadoop@master ~]$ hadoop fs -mkdir /input2
[hadoop@master ~]$ hadoop fs -mv /input1/1.file /input2/1.txt
[hadoop@master ~]$ hadoop fs -ls /input2
Found 1 items
-rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input2/1.txt
[hadoop@master ~]$ hadoop fs -cp /input2/1.txt /input2/2.txt
[hadoop@master ~]$ hadoop fs -ls /input2
Found 2 items
-rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input2/1.txt
-rw-r--r-- 2 hadoop supergroup 0 2018-05-31 08:01 /input2/2.txt
[hadoop@master ~]$ hadoop fs -rm /input2/2.txt ##删除单个文件
18/05/31 08:01:40 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /input2/2.txt
[hadoop@master ~]$ hadoop fs -ls /input2
Found 1 items
-rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input2/1.txt
[hadoop@master ~]$ hadoop fs -rmr /input2/ ##递归删除目录
rmr: DEPRECATED: Please use 'rm -r' instead.
18/05/31 08:06:23 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /input2
[hadoop@master ~]$ hadoop fs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2018-05-31 07:58 /input1
[hadoop@master ~]$ hadoop fs -test -e /input1/ ##查看文件或目录是否存在,存在返回值为0,不存在返回值为1
[hadoop@master ~]$ echo $?
0
[hadoop@master ~]$ hadoop fs -test -e /input1/2.file
[hadoop@master ~]$ echo $?
1
[hadoop@master ~]$ hadoop fs -du /input1 ##查看目录中文件的所有文件的大小
0 /input1/2.file._COPYING_
[hadoop@master ~]$ hadoop fs -du -s /input1 ##查看目录本身的大小
0 /input1
[hadoop@master ~]$ hadoop fs -expunge ##清空回收站
[hadoop@master ~]$ hadoop fs -chmod 777 /input1
[hadoop@master ~]$ hadoop fs -chown hadoop:hadoop /input1
[hadoop@master ~]$ hadoop fs -ls /
Found 1 items
drwxrwxrwx - hadoop hadoop 0 2018-05-31 07:58 /input1