您的位置:首页 > 运维架构 > Shell

hadoop shell 操作复制

2014-07-28 11:45 92 查看
hadoop fs
列出所有的命令
hadoop fs -help ls
列出某个命令的详细信息
hadoop dfs -mkdir /data/weblogs
hadoop dfs -mkdir /data/dir1 /data/dir2 ...
创建文件夹,可以递归创建,可同时创建多个目录
echo "Hello world" > weblog_entries.txt
创建新的本地文件(无则新建)
hadoop fs -copyFromLocal weblog_entries.txt /data/weblogs
hadoop fs -put weblog_entries.txt /data/weblogs,put可以对整个文件夹进行复制(1.0版之后)
从本地文件系统复制数据到hdfs上
hadoop dfs -ls /data/weblogs
列出文件夹下的文件信息
hadoop dfs -cat /data/weblogs/*
hadoop dfs -cat /data/weblogs/* | head -1
hadoop dfs -cat /data/weblogs/* | tail -1
查看文件内容
hadoop dfs -copyToLocal /data/weblogs/* /
hadoop dfs -get /data/weblogs/* /
hadoop dfs -getmerge /data/weblogs/* /合并后的文件名称 (可将多个文件合并成一个文件下载到本地,其中合并后的文件名称需要指定)
hadoop dfs -get -ignorecrc ..... 复制到本地时不进行数据校验(CRC),一般是在数据损坏时复制损坏的数据到本地才使用的
hadoop dfs -get -crc ....复制数据,同时复制crc校验文件
从hdfs复制文件到本地
需保证本地文件系统空间可用,和网络传输速度
几十个TB的数据,传输速率为1Gbit,消耗23个小时
get无法完成对整个文件夹的复制,put在1.0之后可以完成
-----
原理:
fs FileSystem,各个命令对应这个类的不同方法
默认系统为core-site.xml配置的fs.default.name这个属性,如hdfs://hostname:9000即默认使用hdfs系统,也就是hadoop fs和hadoop dfs是一样的。

mapreduce输出文件的个数,是由mapred.reduce.tasks的值决定的,可在编程时通过job.setNumReduceTasks(int num)来进行设置,这是客户端参数,非集群参数,对不同的job设置不同的reduce个数。
默认值为1
推荐两个数:
0.95*集群中datanode个数*mapred.tasktracker.reduce.tasks.maximum(配置每个jobtracker可使用的reduce的插槽最大个数)
或者
1.75*集群中jobtracker个数*mapred.taskreacker.reduce.tasks.maximum
原因:
0.95可保证在map结束后可立即启用所有的reduce进行map结果的处理,只需要一波就可以完成作业。
1.75 使得运行快的reduce能够再次执行第二波的reduce,保证两拨reduce就能完作业,使作业整体的负载均衡。

--使用pig演示getmerge
首先创建文件test,内容为
1 hello
2 world
3 url
4 test
5 haha
上传到hdfs的/data/weblogs目录下

test.pig脚本内容
weblogs = load '/data/weblogs/*' as
(
md5:chararray,
url:chararray
);#默认分割方式为tab
md5_grp = group weblogs by md5 parallel 4;#依据md5进行分组,同时设置reduce个数为4
store md5_grp into '/data/weblogs/md5_group.bcp'; #设置reduce的输出目录,此目录下将包含4个reduce输出文件

-----
使用getmerge命令合并reduce的四个输出文件,下载到本地
hadoop dfs -getmerge /data/weblogs/md5_group.bcp 本机文件名(一定要指定文件名)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: