hadoop shell操作HDFS文件

一.常用的 hadoop shell

文件路径需要自己有才行,示例中的文件路径是本人自己的文件路径,不是公共文件路径,如何建立自己的数仓,查看本人 大数据单机学习环境搭建 相关文章

1.1查看 创建 删除

# 列出当前hdfs所存贮的文件
hadoop fs -ls /
# user下的所有内容
hadoop fs -ls -R /user
# user下级目录的内容
hadoop fs -ls -h /user

# 创建文件
hadoop fs -mkdir /abc
# 创建多级目录
hadoop fs -mkdir -p /abc/mm/ff

# 把/abc目录下面的123.txt文件删除掉
hadoop fs -rm -r /abc/123.txt

1.2上传 查看 下载

# 上传/home/caw/demo_test_data.txt文件到/user/hive/warehouse/demo.db/test文件夹下
hadoop fs -put /home/caw/demo_test_data.txt /user/hive/warehouse/demo.db/test
# 小文件合并,本地2.txt 3.txt,合并上传到hdfs的1.txt
hadoop fs -appendToFile 2.txt 3.txt /1.txt

# 查看文件000000_0的内容
hadoop fs -cat /user/hive/warehouse/demo.db/test/000000_0

# 文件下载到/home/caw/桌面/test.txt
hadoop fs -get /user/hive/warehouse/demo.db/test/000000_0 /home/caw/桌面/test.txt
# test下面有两个文件分别为000000_0 和demo_test_data.txt ,我们想同时下载两个文件,并且下载到本地的时候自动将两个文件合并
hadoop fs -getmerge /user/hive/warehouse/demo.db/test/000000_0 /user/hive/warehouse/demo.db/test/demo_test_data_copy_1.txt /home/caw/桌面/test.txt

1.3修改 复制

# abc目录下面的abc1.txt移动到/abc/mm下面
hadoop fs -mv /abc/abc1.txt /abc/mm
# 把demo_test_data_copy_1.txt.txt改个名字叫000000_1
hadoop fs -mv /user/hive/warehouse/demo.db/test/demo_test_data_copy_1.txt /user/hive/warehouse/demo.db/test/000000_1
# 把刚才的/abc/mm/123.txt给复制到/abc下面
hadoop fs -cp /abc/mm/123.txt /abc

1.4权限修改

# 修改文件的权限 
hadoop fs chmod 文件权限 文件 
hadoop fs -chmod -R 777 /user/hive/warehouse/tms_app.db/cust_id_tb

1.5文件监听

# 监听文件
hadoop fs -tail -f 
# 监听的必须是文件不能是文件夹
hadoop fs -tail -f /user/hive/warehouse/null_demo/null_demo.txt

1.6更多方法

hadoop fs -help查看更多用法

hadoop fs [generic options]
        [-appendToFile  ... ]
        [-cat [-ignoreCrc]  ...]
        [-checksum [-v]  ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] [,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-concat    ...]
        [-copyFromLocal [-f] [-p] [-l] [-d] [-t ] [-q ]  ... ]
        [-copyToLocal [-f] [-p] [-crc] [-ignoreCrc] [-t ] [-q ]  ... ]
        [-count [-q] [-h] [-v] [-t [type>]] [-u] [-x] [-e] [-s]  ...]
        [-cp [-f] [-p | -p[topax]] [-d] [-t ] [-q ]  ... ]
        [-createSnapshot  []]
        [-deleteSnapshot  ]
        [-df [-h] [ ...]]
        [-du [-s] [-h] [-v] [-x]  ...]
        [-expunge [-immediate] [-fs ]]
        [-find  ...  ...]
        [-get [-f] [-p] [-crc] [-ignoreCrc] [-t ] [-q ]  ... ]
        [-getfacl [-R] ]
        [-getfattr [-R] {-n name | -d} [-e en] ]
        [-getmerge [-nl] [-skip-empty-file]  ]
        [-head ]
        [-help [cmd ...]]
        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [ ...]]
        [-mkdir [-p]  ...]
        [-moveFromLocal [-f] [-p] [-l] [-d]  ... ]
        [-moveToLocal  ]
        [-mv  ... ]
        [-put [-f] [-p] [-l] [-d] [-t ] [-q ]  ... ]
        [-renameSnapshot   ]
        [-rm [-f] [-r|-R] [-skipTrash] [-safely]  ...]
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
        [-setfacl [-R] [{-b|-k} {-m|-x } ]|[--set  ]]
        [-setfattr {-n name [-v value] | -x name} ]
        [-setrep [-R] [-w]   ...]
        [-stat [format]  ...]
        [-tail [-f] [-s <sleep interval>] ]
        [-test -[defswrz] ]
        [-text [-ignoreCrc]  ...]
        [-touch [-a] [-m] [-t TIMESTAMP (yyyyMMdd:HHmmss) ] [-c]  ...]
        [-touchz  ...]
        [-truncate [-w]   ...]
        [-usage [cmd ...]]

二.一个小案例

本节内容以SQL使用技巧(5)NULL值和空值的重要说明的数据构造为例,展示hadoop shell的 查看ls、上传put、删除rm 、内容展示cat 等 hadoop fs 操作

2.1Hive建表

location位置非常关键,直接决定Hive能否通过metastore的源信息找到HDFS文件并成功解析

create table null_demo(
  id bigint, 
  name string, 
  age int, 
  city string, 
  address string, 
  notes string)
row format DELIMITED
    fields terminated by ',' 
;

验证建表
hadoop fs -ls /user/hive/warehouse
hadoop shell操作HDFS文件_第1张图片

2.2上传数据

将数据put到hadoop,存为HDFS
hadoop fs -put /home/null_demo.txt /user/hive/warehouse/null_demo
在这里插入图片描述
select * from null_demo;
hadoop shell操作HDFS文件_第2张图片

2.3sed流编辑器替换

替换文本中的单引号 sed -i "s?'??g" /home/null_demo.txt
hadoop shell操作HDFS文件_第3张图片

2.4删除错误数据的文件

删除错误数据,重新上传替换单引号后的文件
hadoop fs -rm -r /user/hive/warehouse/null_demo/null_demo.txt
hadoop fs -ls /user/hive/warehouse
hadoop shell操作HDFS文件_第4张图片
重新上传修改后的文本
hadoop fs -put /home/null_demo.txt /user/hive/warehouse/null_demo

2.5查看HDFS文件内容

hadoop fs -cat /user/hive/warehouse/null_demo/null_demo.txt
hadoop shell操作HDFS文件_第5张图片

2.6Hive查询结果验证

select * from null_demo;
hadoop shell操作HDFS文件_第6张图片

2.7小文件的get方法

2.7.1增加文件数量

单独新增一条数据,多出了一个HDFS文件

insert into null_demo(id,name) select 5,'公子';

hadoop shell操作HDFS文件_第7张图片
再单独新增一条数据,观察HDFS文件变化

insert into null_demo(id,name) select 6,'钟三';

最后一次新增多条数据,再观察HDFS文件变化

insert into null_demo(id,name) 
select 7,'徐四' union all
select 8,'程五' union all
select 9,'肇六' union all
select 10,'邹七';

hadoop shell操作HDFS文件_第8张图片
数据结果验证select * from null_demo;
hadoop shell操作HDFS文件_第9张图片

2.7.2合并文件保存为1个或多个

正常数据业务中形成很多个文件是很平常的,并不是什么特例
set mapred.reduce.tasks=1设置的是最后保存的文件数量,这里设置为1
insert overwrite会替换掉原有的结果
format delimited fields terminated by '|'确认文件分隔符,因为保存数据是为了其他人或其他环境再次使用,所以这个是重要的
cluster by id这里指定按照id字段进行 distribute by 划分 和 sort by 排序。当不知道使用哪个字段划分合适,且无需排序时,可以使用distribute by rand()进行随机划分。这种分配的好处是,当数据规模较大时 tasks 的设置大于1,数据会分配的相对均匀,不至于数据分配到同一个reducer中导致数据倾斜。

-- sql执行,我这里是放在DBeaver中执行的,不过多展示了
set mapred.reduce.tasks=1;
insert overwrite directory '/user/hive/warehouse/unload/null_demo_unload/' row format delimited fields terminated by '|'
select * from null_demo cluster by id;

数据库管理工具中执行完上述代码后,可以到 directory 文件对应位置查看结果
hadoop shell操作HDFS文件_第10张图片
也可以通过命令hadoop fs -ls /user/hive/warehouse/unload/null_demo_unload/000000_0
在这里插入图片描述
get获取HDFS文件到本地
hadoop fs -get /user/hive/warehouse/unload/null_demo_unload/000000_0 /home/null_demo_cluster.txt
并查看数据结果,确认已排序cat /home/null_demo_cluster.txt
hadoop shell操作HDFS文件_第11张图片
至此,数据获取完成,只需要get一个文件即可完成所有数据的获取。


声明:本文所载信息不保证准确性和完整性。文中所述内容和意见仅供参考,不构成实际商业建议,可收藏可转发但请勿转载,如有雷同纯属巧合

你可能感兴趣的:(大数据,hadoop,大数据)