03 hdfs 文件操作(导入/导出)

本文详细介绍了如何在Hadoop环境下进行数据的导入、导出,包括文件上传、load和insert操作,以及HDFS的shell命令使用。还涵盖了分布式和集群的区别,以及Hadoop技术栈的核心组件HDFS、MapReduce和YARN的作用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

hdfs的shell命令格式1: hadoop fs -命令 参数
hdfs的shell命令格式2: hdfs dfs -命令 参数

查看目录下内容:  hdfs df
linux本地上传文件到hdfs中: hdfs dfs -put linux本地要上传的目录或者文件路径  hfds中目标位置绝对路径
hdfs中下载文件到liunx本地: hdfs dfs -get hfds中要下载的目录或者文件的绝对路径 linux本地目标位置路径 

数据导入和导出

文件数据加载导入

1.直接上传文件
window页面上传

需求: 已知emp1.txt文件在windows/mac系统,要求使用hdfs保存此文件
并且使用hivesql建表关联数据

-- 1.先在hive上根据数据建表,然后在window/mac上传文件到hdfs表路径中
create table emp1(
    id int,
    name string,
    sal double,
    dept string
)row format delimited
fields terminated by ',';

-- windows使用hdfs页面上传文件
-- node1:9870访问页面把emp1.txt上传到/user/hive/warehouse/hive02.db/emp1路径下
-- 查询数据
select * from emp1;

linux本地put上传

需求: 已知emp2.txt文件在linux系统,要求使用hdfs保存此文件
并且使用hivesql建表关联数据

-- 2.先在hive上根据数据建表,然后在linux上传文件到hdfs表路径中
create table emp2(
    id int,
    name string,
    sal double,
    dept string
)row format delimited
fields terminated by ',';

-- linux使用hdfs命令上传文件
-- [root@node1 ~]# hdfs dfs -put emp2.txt /user/hive/warehouse/hive02.db/emp2

-- 查看数据
select * from emp2;

2.load加载文件:
从hdfs路径把文件移动到表对应存储路径中: load data inpath 'HDFS文件路径' [overwrite] into table 表名;

从linux本地把文件上传到表对应存储路径中: load data local inpath 'Linux文件路径' [overwrite] into table 表名;
load移动HDFS文件:
-- 数据导入
-- 需求1: load加载hdfs中文件到表路径中
-- 1.根据斌哥资料中search_log.txt数据创建表
create table search_log(
    dt string,
    uid string,
    name string,
    url string
)row format delimited fields terminated by '\t';
-- 2.把windows中search_log.txt文件上传hdfs其他路径,例如:/src中
-- 3.使用load把hdfs的/src中的文件移动到search_log对应hdfs表存储路径中
load data inpath '/src/search_log.txt' into table search_log;
-- 4.查询数据
select * from search_log;
load上传Linux文件
-- 需求2: 直接把linux中最新的search_log.txt文件上传到search表对应hdfs路径中
-- 先把资料中search_log.txt文件传到linux中,例如:/root
-- load命令上传文件
load data local inpath '/root/search_log.txt' overwrite into table search_log;

-- 查看最终数据
select * from search_log;
3.insert插入数据
从其他表查询数据'追加'插入到当前表中: insert into [table] 表名 select 语句;

从其他表查询数据'覆盖'插入到当前表中: insert overwrite table 表名 select 语句;
insert追加数据
-- 需求1:创建一个search_log_copy表,然后从search_log查询数据插入到新表中
create table search_log_copy(
    dt string,
    uid string,
    word string,
    url string
)row format delimited
fields terminated by '\t';

-- 从search_log表中查所有数据,直接插入到search_log_copy表
insert into table search_log_copy select * from search_log;
-- 查看数据
select * from search_log_copy;

insert覆盖数据
-- 需求2: 假设search_log表中数据改变了,要求把最新的数据更新到search_log_copy表中
insert overwrite table search_log_copy select * from search_log;
-- 查看数据
select * from search_log_copy;

文件数据导出

1.直接下载文件
HDFSweb页面下载

在这里插入图片描述

get命令下载文件
[root@node1 binzi]# hdfs dfs -get /user/hive/warehouse/hive02.db/search_log/search_log.txt /binzi
2.insert导出数据
查询数据导出到hdfs其他路径: insert overwrite directory 'hfds存储该数据路径' select语句;

查询数据导出到linux本地中: insert overwrite local directory 'linux存储该数据路径' select语句;

注意:  overwrite默认是覆盖重写,所以在指定存储该数据路径的时候尽量指定一个空的目录

注意: 导出数据的时候不指定分隔符采用默认分隔符SOH,0001,?...

导出数据指定分隔符添加: row format delimited fields terminated by '分隔符'
insert导出到hdfs
-- 演示insert overwrite导出数据到文件
-- 语法:  insert overwrite [local] directory 文件存储路径 [指定分隔符] select语句;
-- 导出数据到hfds
-- 注意: 如果是根目录/,会自动创建-ext-10000目录存储生成的000000_0文件
-- 但是其他目录,会自动清空所有内容,再生成一个000000_0文件,所以注意导出目录尽量是一个新的空目录
-- 默认分隔符
insert overwrite  directory '/source' select * from search_log1;
-- 指定分隔符
insert overwrite  directory '/output'
    row format delimited fields terminated by ','
select * from search_log1;
insert导出linux
-- 2.2导出到linux
-- [root@node1 ~]# mkdir /output
-- 导出到linux的/output目录下,自动生成000000_0文件存储查询结果
-- 默认分隔符
insert overwrite local directory '/output' select * from search_log1;
-- 指定分隔符
insert overwrite local directory '/output'
    row format delimited fields terminated by ','
select * from search_log1;
3.hive_shell命令
hive命令执行sql语句:  hive -e "sql语句" > 存储该结果数据的文件路径

hive命令执行sql脚本:  hive -f sql脚本文件 > 存储该结果数据的文件路径
hql语句导出
# 以下命令都是在linux的shell命令行执行
# 3.1使用hive -e sql语句方式导出数据
[root@node1 ~]# hive -e 'select * from hive02.search_log;' > /home/hs1.txt
[root@node1 ~]# cat hs1.txt
hql脚本导出
# 3.2使用hive -f 脚本文件方式导出数据
[root@node1 ~]# echo 'select * from hive02.search_log;' > /home/export.sql
[root@node1 ~]# hive -f export.sql > /home/hs2.txt
[root@node1 ~]# cat hs2.txt

练习:

1.linux本地远程查看hdfs根目录文件列表

[root@node1 ~]# hdfs dfs -ls /
Found 3 items
drwxr-xr-x   - root supergroup          0 2023-08-18 21:44 /source
drwxrwx---   - root supergroup          0 2023-08-12 17:52 /tmp
drwxr-xr-x   - root supergroup          0 2021-10-24 02:25 /user

2.linux本地远程在hdfs根目录中创建目录,最后验证是否创建成功

[root@node1 ~]# hdfs dfs -mkdir /ingha
您在 /var/spool/mail/root 中有新邮件
[root@node1 ~]# hdfs dfs -ls /
Found 4 items
drwxr-xr-x   - root supergroup          0 2023-08-26 21:41 /ingha
drwxr-xr-x   - root supergroup          0 2023-08-18 21:44 /source
drwxrwx---   - root supergroup          0 2023-08-12 17:52 /tmp
drwxr-xr-x   - root supergroup          0 2021-10-24 02:25 /user
s -ls 目录的绝对路径
创建目录: hdfs dfs -mkdir 目录的绝对路径
创建文件: hdfs dfs -touch 文件的绝对路径
移动目录/文件: hdfs dfs -mv 要移动的目录或者文件的绝对路径  目标位置绝对路径
复制目录/文件: hdfs dfs -cp 要复制的目录或者文件的绝对路径  目标位置绝对路径
删除目录/文件: hdfs dfs -rm [-r] 要删除的目录或者文件的绝对路径

把本地文件内容追加到hdfs指定文件中: hdfs dfs -appendToFile 本地文件 hdfs文件绝对路径
查看文件的内容: hdfs dfs -cat 要查看的文件的绝对路径          注意: 除了cat还有head,tail也能查看

查看hdfs其他shell命令帮助: hdfs dfs --help
注意: hdfs有相对路径,如果操作目录或者文件的时候没有以根目录/开头,就是相对路径,默认操作的是/user/root

3.linux本地远程在hdfs根目录中创建a.txt和b.txt文件,最后验证是否创建成功

[root@node1 ~]# hdfs dfs -touch /a.txt /b.txt 
您在 /var/spool/mail/root 中有新邮件
[root@node1 ~]# hdfs dfs -ls /
Found 6 items
-rw-r--r--   3 root supergroup          0 2023-08-26 21:43 /a.txt
-rw-r--r--   3 root supergroup          0 2023-08-26 21:43 /b.txt
drwxr-xr-x   - root supergroup          0 2023-08-26 21:41 /ingha
drwxr-xr-x   - root supergroup          0 2023-08-18 21:44 /source
drwxrwx---   - root supergroup          0 2023-08-12 17:52 /tmp
drwxr-xr-x   - root supergroup          0 2021-10-24 02:25 /user

4.linux本地远程把hdfs根目录的a.txt移动到目录中

[root@node1 ~]# hdfs dfs -mv /a.txt /ingha

5.linux本地远程把hdfs根目录的b.txt复制到目录中

[root@node1 ~]# hdfs dfs -cp /b.txt /ingha

6.linux本地远程查看hdfs根目录观察移动和复制后文件列表

[root@node1 ~]# hdfs dfs -ls /
Found 5 items
-rw-r--r--   3 root supergroup          0 2023-08-26 21:43 /b.txt
drwxr-xr-x   - root supergroup          0 2023-08-26 21:44 /ingha
drwxr-xr-x   - root supergroup          0 2023-08-18 21:44 /source
drwxrwx---   - root supergroup          0 2023-08-12 17:52 /tmp
drwxr-xr-x   - root supergroup          0 2021-10-24 02:25 /user

7.linux本地远程把根目录的b.txt删除

[root@node1 ~]# hdfs dfs -rm /b.txt
Deleted /b.txt

8.在linux本地创建一个h.txt文件,存储内容为’hello hadoop’

[root@node1 ~]# echo 'hello hadoop' > /root/h.txt
[root@node1 ~]# ls
anaconda-ks.cfg  h.txt    

9.把linux本地h.txt文件内容追加到hdfs的a.txt文件中

[root@node1 ~]# hdfs dfs -appendToFile /root/h.txt /ingha/a.txt
[root@node1 ~]# hdfs dfs -cat /ingha/a.txt
hello hadoop

10.把linux本地h.txt文件上传到hdfs的目录中,并验证是否上传成功

[root@node1 ~]# hdfs dfs -put /root/h.txt /ingha
[root@node1 ~]# hdfs dfs -ls /ingha
Found 3 items
-rw-r--r--   3 root supergroup         13 2023-08-26 21:48 /ingha/a.txt
-rw-r--r--   3 root supergroup          0 2023-08-26 21:44 /ingha/b.txt
-rw-r--r--   3 root supergroup         13 2023-08-26 21:49 /ingha/h.txt

11.把hdfs的目录下a.txt文件下载到linux本地root目录中,并验证是否下载成功

[root@node1 ~]# ls /root
anaconda-ks.cfg  h.txt a.txt 

问题1:简述下分布式和集群的区别?

集群的所有节点跑的是同样的任务,集群本质是多台服务器联合起来做相同的但各自独立的任务(多个服务器分担客户端发来的请求) 。
分布式系统的节点跑的是分解后的任务,分布式本质是多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)

问题2:简述hadoop技术栈的组成?

首先hadoop技术栈由HDFS , MapReduce ,YARN三大组件组成
其次三大组件核心知识如下:
HDFS是(分布式文件系统),解决海量数据存储
元数据是描述核心数据的数据
NameNode是集群当中的主节点,主要用于管理集群当中的各种数据
SecondaryNameNode是主要能用于辅助NameNode进行文件块元数据存储
DataNode是集群当中的从节点,主要用于存储真实的海量的业务数据
YARN是(作业调度和集群资源管理的框架),解决资源任务调度
ResourceManager是接收用户的计算请求任务,并负责集群的资源管理和分配
NodeManager是 负责执行主节点分配的任务(给MR的计算程序提供资源)
MapReduce是(分布式运算编程框架),解决海量数据计算
核心思想就是分而治之 Map负责分解,Reduce负责合并
最后概括下MapReduce计算需要的数据和产生的结果需要HDFS来进行存储,MapReduce的运行需要由Yarn集群来提供资源调度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值