跳至主要內容

Hadoop安装文档

fatSheep大约 17 分钟

1 Linux安装与基础操作

1.1 虚拟机安装系统

image-20230317134236115

image-20230317134246364

image-20230317134306055

image-20230317134327250

image-20230317134346926

image-20230317134357571

image-20230317134425864

image-20230317134645110

image-20230317134709862

1.2系统内设置

image-20230317133452211

image-20230317133525272

image-20230317133611164

image-20230317133640535

image-20230317133721895

image-20230317133806837

image-20230317133834603

image-20230317133917866

image-20230317134015085

image-20230317134037965

image-20230317134111381

image-20230317134142559

1.3Linux基本操作

改变目录
命令名称:cd
英文原意:change directory
执行权限:所有用户
功能描述:切换目录
语法:cd [目录]
特殊目录:

.:当前目录
..:上一级目录
cd ..回到上级目录
[root@hello1 ~]# cd /
[root@hello1 /]# ls
[root@hello1 /]# dir
[root@hello1 /]# ll

image-20230317135450191

绝对路径
命令名称:pwd
英文原意:print working directory
执行权限:所有用户
功能描述:显示当前目录
语法:pwd

[root@hello1 /]# clear
[root@hello1 /]# cd /usr/local/had
[root@hello1 had]# pwd -d 

-bash: pwd: -d: invalid option
pwd: usage: pwd [-LP]

[root@hello1 had]# pwd -P
/usr/local/had

创建目录
命令名称:mkdir

英文原意:make directories

执行权限:所有用户

功能描述:创建新目录

[root@hello1 had]# mkdir dir1

[root@hello1 had]# mkdir /usr/local/had/dir1/dir11

[root@hello1 dir1]# mkdir /usr/local/had/dir1/dir11/dir112/dir1112


-p:递归创建

[root@hello1 dir11]# mkdir -p /usr/local/had/dir1/dir11/dir112/dir1112 递归创建
 #善用tab键补全名称
[root@hello1 dir1112]# pwd -P
/usr/local/had/dir1/dir11/dir112/dir1112

image-20230317151335897

cp
命令名称:cp
英文原意:copy
执行权限:所有用户
功能描述:复制文件或目录
语法:cp -rp [源文件或目录] [目标目录]
-r:复制目录
-p:保留文件属性

rm
命令名称:rm
英文原意:remove
执行权限:所有用户
功能描述:删除文件
语法:rm -rf [文件或目录]
-r:删除目录
-f:强制删除

改名
[root@hello1 dir1]# ls
dir11  file1
[root@hello1 dir1]# cp file1 file3
[root@hello1 dir1]# cat file1
bigdata hadoop
[root@hello1 dir1]# cat file3
bigdata hadoop


image-20230317160312220

echo的重定向
(1)echo "content" > filename
将content覆盖到filename文件当中去,filename文件当中之前的内容不复存在了,实际上是修改了原文件的内容。

(2)echo "content" >> filename
将content追加到filename文件后,对filename文件之前的内容不修改,只进行增添,也叫追加重定向。

image-20230317161528794

vim
vim编辑器有三种模式:
命令模式、编辑模式、末行模式

模式间切换方法:
(1)命令模式下,输入:后,进入末行模式
(2)末行模式下,按esc慢退、按两次esc快退、或者删除所有命令,可以回到命令模式
(3)命令模式下,按下i、a等键,可以计入编辑模式
(4)编辑模式下,按下esc,可以回到命令模式

rpm red-hat package manager

image-20230317164902870

image-20230317164939883

image-20230317165049909

image-20230317165250725

image-20230317165353314

1.4Xshell远程连接

虚拟机设置

image-20230317180550535

image-20230317180754079

image-20230317180834929

[root@hello ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
............
BOOTPROTO=static					# 将dhcp改为static
............
ONBOOT=yes								# 将no改为yes
IPADDR=192.168.10.101			# 添加IPADDR属性和ip地址
PREFIX=24									# 添加NETMASK=255.255.255.0或者PREFIX=24	
GATEWAY=192.168.10.2			# 添加网关GATEWAY
DNS1=114.114.114.114      # 添加DNS1和备份DNS
DNS2=8.8.8.8

--2. 重启网络服务
[root@hello1 ~]# systemctl restart network
或者
[root@hello1 ~]# service network restart

--3. 修改主机名(如果修改过,请略过这一步)
[root@localhost ~]# hostnamectl set-hostname hello1
或者
[root@localhost ~]# vi /etc/hostname
hello1
ping baidu.com

Xshell设置

image-20230317181047037

image-20230317181108523

image-20230317181251619

1.5克隆主机

image-20230317181453424

image-20230317181615320

image-20230317181628333

image-20230317181648290

因为是克隆,所以主机名和IP都是一样的,需要调整
1.改变主机名
[root@hello ~]#vim /etc/hostname
t2
:wq
重启后生效

2.改变IP
[root@hello ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
............		
IPADDR=192.168.10.101			# 调整剩余两台主机IP为 192.168.10.102和192.168.10.103


--2. 重启网络服务
[root@hello1 ~]# systemctl restart network
或者
[root@hello1 ~]# service network restart
[root@hello1 ~]# systemctl status network

2 Hadoop集群设置

集群规划规划
操作系统Mac、Windows
虚拟软件Parallels Desktop(Mac)、VMWare(Windows)
虚拟机主机名: hello1, IP地址: 192.168.10.101
主机名: hello2, IP地址: 192.168.10.102
主机名: hello3, IP地址: 192.168.10.103
软件包上传路径/root/softwares
软件包安装路径/usr/local
JDKjdk-8u321-linux-x64.tar.gz
Hadoophadoop-3.3.1.tar.gz
用户root

2.1 完全分布式环境设置

1. 三台机器的防火墙必须是关闭的
2. 确保三台机器的网络配置通常(NAT模式、静态IP、主机名的配置)#之前在Xshell连接中已经设置
3. 确保/etc/hosts文件配置了IP和hosts的映射关系
4. 确保配置了三台机器的免密登录认证
5. 确保所有的机器时间同步
6. JDK和Hadoop的环境变量配置

2.1.1 关闭防火墙

[root@hello1 ~]# systemctl stop firewalld
[root@hello1 ~]# systemctl disable firewalld
[root@hello1 ~]# systemctl stop NetworkManager
[root@hello1 ~]# systemctl disable NetworkManager

#最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
[root@hello1 ~]# vim /etc/selinux/config
.........
SELINUX=disabled			
.........
#其他两台同样操作

image-20230318225805621

2.1.3免密登录

-1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
[root@hello1 ~]# cd ~
[root@hello1 ~]# ssh-keygen -t rsa	

-2. 进入~/.ssh目录下,使用ssh-copy-id命令
[root@hello1 ~]# cd ~/.ssh			
[root@hello1 .ssh]# ssh-copy-id  root@hello1 hello2 hello3

-3. 进行验证	
[hadoop@hello1 .ssh]# ssh hello1
#下面的第一次执行时输入yes后,不提示输入密码就对了
[hadoop@hello1 .ssh]# ssh localhost
[hadoop@hello1 .ssh]# ssh 0.0.0.0

注意:三台机器提前安装好的情况下,需要同步公钥文件。如果使用克隆技术。那么使用同一套密钥对就方便多了。

image-20230317231521804

image-20230317232450333

image-20230317232652191

image-20230317232709933

image-20230317232735316

免密登录的工作原理

image-20230317233028956

2.1.4 时间同步

#  选择集群中的某一台机器作为时间服务器,例如hello1  30s

# 保证这台服务器安装了ntp.x86_64。
[root@hello1 ~]# yum -y install ntp

image-20230318223025829

[root@hello1 ~]#system status ntp
 ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

#  配置相应文件:
[root@hello1 ~]# vim /etc/ntp.conf
	
	# Hosts on local network are less restricted.
	# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
  # 添加集群中的网络段位
	restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

	# Use public servers from the pool.ntp.org project.
	# Please consider joining the pool (http://www.pool.ntp.org/join.html).
	# server 0.centos.pool.ntp.org iburst    注释掉
	# server 1.centos.pool.ntp.org iburst	   注释掉
	# server 2.centos.pool.ntp.org iburst    注释掉
	# server 3.centos.pool.ntp.org iburst    注释掉
	server 127.127.1.0     -master作为服务器
:wq

image-20230318224212953

#开启服务
[root@hello1 ~]# systemctl start ntpd
[root@hello1 ~]# systemctl status ntpd
# 	开机自启动:
[root@hello1 ~]# systemctl enable ntpd

# 其他服务器与hello1 时间同步
[root@hello2 ~]# yum -y install ntpdate
[root@hello3 ~]# yum -y install ntpdate

[root@hello2 ~]# ntpdate -u hello1
[root@hello3 ~]# ntpdate -u hello1


image-20230318230125383

#  保证ntpd 服务运行......
[root@hello1 ~]# skudo service ntpd start	

# 其他机器要保证安装ntpdate.x86_64

#  其他机器要使用root定义定时器
crontable -e
[root@hello2 ~]# crontab -e
*/1 * * * * /usr/sbin/ntpdate -u hello1 

image-20230318233318427

2.2 完全分布式环境-软件安装与配置

2.2.0 上传文件

文件上传至Linux
[root@hello1 softwares]# yum -iy install lrzsz

[root@hello1 softwares]# rpm -qa|grep lrzsz
lrzsz-0.12.20-36.el7.x86_64

[root@hello1 softwares]# rz


image-20230323153736943

image-20230323153931608

image-20230323154018508

2.2.1 安装Java


[root@hello1 ~]# rpm -qa | grep jdk     				# 如果有,请卸载
[root@hello1 ~]# rpm -e xxxxxxxx --nodeps      	# 将查询到的内置jdk强制卸载

[root@hello1 softwares]# tar -zvxf jdk-8u321-linux-x64.tar.gz -C /usr/local/
[root@hello1 softwares]# cd /usr/local

改名
[root@hello1 local]# mv jdk1.8.0_321/ jdk


image-20230323155424750

2.2.2 配置Java环境变量

[root@hello1 ~]# vim /etc/profile

.........省略...........
#jdk environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH

:wq

[root@hello1 ~]# source /etc/profile

image-20230323163857193

验证jdk是否生效
[root@hello1 ~]# java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

2.2.3安装Hadoop

[root@hello1 ~]# cd /usr/softwares/
[root@hello1 softwares]# tar -zxvf hadoop-3.3.1.tar.gz -C /usr/local/
[root@hello1 softwares]# cd /usr/local

改名
[root@hello1 local]# mv hadoop-3.3.1/ hadoop

image-20230323165029222

2.2.4 配置Hadoop环境变量

[root@hello1 ~]# vim /etc/profile

.........省略...........
#jdk environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH

#hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin


:wq

[root@hello1 ~]# source /etc/profile

2.3 Hadoop的配置文件

我们需要通过配置若干配置文件,来实现Hadoop集群的配置信息。需要配置的文件有:
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml

在Hadoop安装完成后,会在$HADOOP_HOME/share路径下,有若干个*-default.xml文件,这些文件中记录了默认的配置信息。同时,在代码中,我们也可以设置Hadoop的配置信息。
这些位置配置的Hadoop,优先级为: 代码设置 > *-site.xml > *-default.xml
 集群规划:
+--------------+---------------------+
|     Node     | Applications        |
+--------------+---------------------+
|  hello1      | NameNode            |
|              | DataNode            |
|              | ResourceManager     |
|              | NodeManagere        |
+--------------+---------------------+
|  hello2      | SecondaryNameNode   |
|              | DataNode            |
|              | NodeManager         |
+--------------+---------------------+
|  hello3      | DataNode            |
|              | NodeManager         |
+--------------+---------------------+

2.3.1 core-site.xml

[root@hello1 hadoop]# pwd
/usr/local/hadoop/etc/hadoop
[root@hello1 hadoop]# vim core-site.xml


<configuration>

<!-- hdfs的地址名称:schame,ip,port-->
    <!-- 在Hadoop1.x的版本中,默认使用的端口是9000。在Hadoop2.x的版本中,默认使用端口是8020 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hello1:8020</value>
    </property>
    <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>

</configuration>

2.3.2 hdfs-site.xml

[root@hello1 hadoop]# vim hdfs-site.xml 


<configuration>
    <!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property>
    <!-- 块的副本数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 块的大小(128M),下面的单位是字节-->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    
    
    
    <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hello2:9868</value>
    </property>
	<!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
	<property>
		<name>dfs.namenode.http-address</name>
		<value>hello1:9870</value>
	</property>
</configuration>

2.3.3 mapred-site.xml

[root@hello1 hadoop]# vim mapred-site.xml 

<configuration>
    <!-- 指定mapreduce使用yarn资源管理器-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置作业历史服务器的地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hello1:10020</value>
    </property>
    <!-- 配置作业历史服务器的http地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hello1:19888</value>
    </property>:
</configuration>

2.3.4 yarn-site.xml

[root@hello1 hadoop]# vi yarn-site.xml
<configuration>
    <!-- 指定yarn的shuffle技术-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定resourcemanager的主机名-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hello1</value>
    </property> 
   
	<!--配置resourcemanager的web ui 的监控页面-->
	<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>hello1:8088</value>
	</property>
     <!-- 环境变量的继承 -->
     <property>
        <name>yarn.nodemanager.env-whitelist</name>
     <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
	</property>

</configuration>

2.3.5 hadoop-env.sh

[root@hello1 hadoop]# vi hadoop-env.sh
.........
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root


.........

2.3.6 workers

此文件用于指定datanode守护进程所在的机器节点主机名

[root@hello1 hadoop]# vim workers
hello1
hello2
hello3

2.3.7编写集群分发脚本xsync

  rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法
rsync    -av       $pdir/$fname             $user@$host:$pdir/$fname
命令   选项参数   要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称
	  选项参数说明
选项	功能
-a	归档拷贝
-v	显示复制过程
(2)案例实操
	(a)删除hello3中/opt/module/hadoop-3.1.3/wcinput
[root@hello3 hadoop-3.1.3]$ rm -rf wcinput/
	(b)同步hello2中的/opt/module/hadoop-3.1.3到hello3
[root@hello2 module]$ rsync -av hadoop-3.1.3/ root@hello3:/opt/module/hadoop-3.1.3/


  xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
	(2)需求分析:
(a)rsync命令原始拷贝:
rsync  -av     /opt/module  		 root@hello3:/opt/
(b)期望脚本:
xsync要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[root@hello2 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/root/.local/bin:/home/root/bin:/opt/module/jdk1.8.0_212/bin
(3)脚本实现
(a)在/home/root/bin目录下创建xsync文件
[root@hello2 opt]$ cd /home/root
[root@hello2 ~]$ mkdir bin
[root@hello2 ~]$ cd bin
[root@hello2 bin]$ vim xsync
在该文件中编写如下代码



#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hello1 hello2 hello3
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送

    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

# 同步jdk Hadoop到另外两台节点
[root@hello1 ~]# cd /usr/local
[root@hello2 local]# scp -r jdk hello2:$PWD
[root@hello2 local]# scp -r jdk hello3:$PWD


[root@hello2 local]# scp -r hadoop hello2:$PWD
[root@hello2 local]# scp -r hadoop hello3:$PWD

# 同步profile到另外两台节点
[root@hello1 ~]# scp /etc/profile hello2:/etc
[root@hello1 ~]# scp /etc/profile hello3:/etc

#生效
[root@hello2 ~]# source /etc/profile
[root@hello3 ~]# source /etc/profile

# 检查workers节点上的jdk是否已安装
# 检查是否同步了/etc/hosts文件

3 格式化与启动

3.1 格式化集群

**1)**在注意:

(1)如果集群是第一次启动,需要在hello2节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)hello1机器上运行命令



[root@hello1 ~]# hdfs namenode -format

**2)**格式化的相关信息解读

--1. 生成一个集群唯一标识符:clusterid
--2. 生成一个块池唯一标识符:blockPoolId
--3. 生成namenode进程管理内容(fsimage)的存储路径:
	默认配置文件属性hadoop.tmp.dir指定的路径下生成dfs/name目录
--4. 生成镜像文件fsimage,记录分布式文件系统根路径的元数据

--5. 其他信息都可以查看一下,比如块的副本数,集群的fsOwner等。

参考图片

image-20170323143549977

3) 目录里的内容查看

image-20170323143927669

3.2启动集群

1) 启动脚本和关闭脚本介绍

1. 启动脚本
	-- start-dfs.sh			:用于启动hdfs集群的脚本
	-- start-yarn.sh		:用于启动yarn守护进程
	-- start-all.sh			:用于启动hdfs和yarn
2. 关闭脚本
	-- stop-dfs.sh			:用于关闭hdfs集群的脚本
	-- stop-yarn.sh			:用于关闭yarn守护进程
	-- stop-all.sh			:用于关闭hdfs和yarn
3. 单个守护进程脚本
	# hdfs --daemon start 单独启动⼀个进程
hdfs --daemon start namenode # 只开启NameNode
hdfs --daemon start datanode # 只开启DataNode
hdfs --daemon start secondarynamenode # 只开启SecondaryNameNode
 
 
# hdfs --daemon stop 单独停⽌⼀个进程
hdfs --daemon stop namenode # 只停⽌NameNode
hdfs --daemon stop datanode # 只停⽌DataNode
hdfs --daemon stop secondarynamenode # 只停⽌SecondaryNameNode
 
 
# hdfs --workers --daemon start 启动所有的指定进程
hdfs --workers --daemon start namenode
hdfs --workers --daemon start datanode # 开启所有节点上的DataNode
hdfs --workers --daemon start secondarynamenode 
 
# hdfs --workers --daemon stop 停止所有的指定进程
hdfs --workers --daemon stop namenode
hdfs --workers --daemon stop datanode # 停⽌所有节点上的DataNode
hdfs --workers --daemon stop secondarynamenode

  1. jps查看进程

image-20170323135944632

--1. 在hello1上运行jps指令,会有如下进程
5712 ResourceManager
7441 DataNode
5858 NodeManager
5175 NameNode
7960 Jps
--2. 在hello2上运行jps指令,会有如下进程
3890 DataNode
4052 Jps
3500 SecondaryNameNode
3582 NodeManager
--3. 在hello3上运行jps指令,会有如下进程
3235 NodeManager
3516 DataNode
3628 Jps  

4)webui查看

Web端查看HDFS的NameNode
HDFS: http://192.168.10.110:9870

Web端查看YARN的ResourceManager
YARN: http://192.168.10.110:8088

image-20170323145617083

image-20170323145644313

4 HDFS的Shell命令

HDFS其实就是一个分布式的文件系统,我们可以使用一些命令来操作这个分布式文件系统上的文件。
- 访问HDFS的命令:
  hadoop fs 
  hdfs dfs
  
- 小技巧
  1. 在命令行中输入hdfs,回车后,就会提示hdfs后可以使用哪些命令,其中有一个是dfs。
  2. 在命令行中输入hdfs dfs,回车后,就会提示dfs后可以添加的一些常用shell命令。
  
- 注意事项
  分布式文件系统的路径在命令行中,要从/开始写,即绝对路径。
端口名称Hadoop2.xHadoop3.x
NameNode内部通信端口8020 / 90008020 / 9000/9820
NameNode HTTP UI500709870
MapReduce查看执行任务端口80888088
历史服务器通信端口1988819888
2)-help:输出这个命令参数

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -help rm

3)创建/sanguo文件夹

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /sanguo

4.1 上传

1)-moveFromLocal:从本地剪切粘贴到HDFS

[root@hadoop102 hadoop-3.1.3]$ vim shuguo.txt

输入:

shuguo

 

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./shuguo.txt /sanguo

2)-copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去

[root@hadoop102 hadoop-3.1.3]$ vim weiguo.txt

输入:

weiguo

 

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal weiguo.txt /sanguo

3)-put:等同于copyFromLocal,生产环境更习惯用put

[root@hadoop102 hadoop-3.1.3]$ vim wuguo.txt

输入:

wuguo

 

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -put ./wuguo.txt /sanguo

4)-appendToFile:追加一个文件到已经存在的文件末尾

[root@hadoop102 hadoop-3.1.3]$ vim liubei.txt

输入:

liubei

 

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt

4.2 下载

1)-copyToLocal:从HDFS拷贝到本地

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo.txt ./

2)-get:等同于copyToLocal,生产环境更习惯用get

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt

4.3 HDFS直接操作

1)-ls: 显示目录信息

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /sanguo

2)-cat:显示文件内容

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo.txt

3)-chgrp、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo.txt

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -chown root:root  /sanguo/shuguo.txt

4)-mkdir:创建路径

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo

5)-cp:从HDFS的一个路径拷贝到HDFS的另一个路径

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo

6)-mv:在HDFS目录中移动文件

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/wuguo.txt /jinguo

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/weiguo.txt /jinguo

7)-tail:显示一个文件的末尾1kb的数据

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/shuguo.txt

8)-rm:删除文件或文件夹

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /sanguo/shuguo.txt

9)-rm -r:递归删除目录及目录里面内容

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /sanguo

10)-du统计文件夹的大小信息

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo

27 81 /jinguo

 

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo

14 42 /jinguo/shuguo.txt

7  21  /jinguo/weiguo.txt

6  18  /jinguo/wuguo.tx

​    说明:27表示文件大小;81表示27*3个副本;/jinguo表示查看的目录

11)-setrep:设置HDFS中文件的副本数量

[root@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /jinguo/shuguo.txt



这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

image-20230406230146136

END