常用命令
选项名称 | 使用格式 | 含义 |
---|---|---|
-ls | -ls <路径> | 查看指定路径的当前目录结构 |
-lsr | -lsr <路径> | 递归查看指定路径的目录结构 |
-du | -du <路径> | 统计目录下个文件大小 |
-dus | -dus <路径> | 汇总统计目录下文件(夹)大小 |
-count | -count [-q] <路径> | 统计文件(夹)数量 |
-mv | -mv <源路径> <目的路径> | 移动 |
-cp | -cp <源路径> <目的路径> | 复制 |
-rm | -rm [-skipTrash] <路径> | 删除文件/空白文件夹 |
-rmr | -rmr [-skipTrash] <路径> | 递归删除 |
-put | -put <多个linux上的文件> <hdfs路径> | 上传文件 |
-copyFromLocal | -copyFromLocal <多个linux上的文件> <hdfs路径> | 从本地复制 |
-moveFromLocal | -moveFromLocal <多个linux上的文件> <hdfs路径> | 从本地移动 |
-getmerge | -getmerge <源路径> <linux路径> | 合并到本地 |
-cat | -cat <hdfs路径> | 查看文件内容 |
-text | -text <hdfs路径> | 查看文件内容 |
-copyToLocal | -copyToLocal [-ignoreCrc] [-crc] [hdfs源路径] [linux目的路径] | 拷贝到本地 |
-moveToLocal | -moveToLocal [-crc] <hdfs源路径> <linux目的路径> | 移动到本地 |
-mkdir | -mkdir <hdfs路径> | 创建空白文件夹 |
-setrep | -setrep [-R] [-w] <副本数> <路径> | 修改副本数量 |
-touchz | -touchz <文件路径> | 创建空白文件 |
-stat | -stat [format] <路径> | 显示文件统计信息 |
-tail | -tail [-f] <文件> | 查看文件尾部信息 |
-chmod | -chmod [-R] <权限模式> [路径] | 修改权限 |
-chown | -chown [-R] [属主][:[属组]] 路径 | 修改属主 |
-chgrp | -chgrp [-R] 属组名称 路径 | 修改属组 |
-help | -help [命令选项] | 帮助 |
常用参数
配置项 | 含义 |
---|---|
mapred.job.name | 作业名 |
mapred.job.priority=HIGH | 作业优先级 |
mapred.job.map.capacity=800 | 最多同时运行的 map 数量 |
mapred.job.reduce.capacity=800 | 最多同时运行的 reduce 数量 |
mapred.compress.map.output=true | map的输出是否压缩 |
mapred.output.compress=true | reduce的输出是否压缩 |
mapred.map.output.compression.codec= org.apache.hadoop.io.compress.GzipCodec |
map的输出压缩方式 |
mapred.output.compression.codec= org.apache.hadoop.io.compress.GzipCodec |
reduce的输出压缩方式 |
hadoop.job.ugi | 作业执行权限 |
stream.map.output.field.separator=. | 指定分隔符 |
stream.num.map.output.key.fields=2 | 指定key的范围 |
map.output.key.field.separator=. | 指定第二次分隔的分隔符 |
mapred.text.key.partitioner.options=-k1,2 | 基于第一个分隔指定partition key |
mapred.min.split.size=1073741824 | 影响splitSize的大小和任务数 |
mapred.min.split.size=3221225472 | 影响splitSize的大小和任务数 |
mapred.reduce.memory.limit=800 | 限制内存为800M |
dfs.replication=3 | 副本数量 |
-outputformat org.apache.hadoop.mapred.lib.SuffixMultipleTextOutputFormat |
多路输出 |
mapred.map.tasks | 期望的 map 数 |
mapred.reduce.tasks | 期望的reduce数 |
如何确定 map 数
相关名词解释
- block_size : hdfs的文件块大小,可以通过参数 dfs.block.size 设置
- total_size : 输入文件整体的大小
- input_file_num : 输入文件的个数
1 计算 splitSize
注意:与mapred.min.split.size、mapred.max.split.size、block_size和minSplitSize几个值有关。
minSize=max{minSplitSize,mapred.min.split.size}
maxSize=mapred.max.split.size
splitSize=max{minSize,min{maxSize,blockSize}}
# minSplitSize 大小默认为 1B
# maxSplitSize 大小默认为 Long.MAX_VALUE = 9223372036854775807
如果只设置mapred.min.split.size,计算方式可以简化为:
splitSize = max(mapred.min.split.size, block_size);
2 计算默认 map 个数
如果不进行任何设置,默认的map个数是和blcok_size相关的。 default_num = total_size / block_size
3 期望 map 数
可以通过参数mapred.map.tasks来设置程序员期望的map个数,但是这个个数只有在大于default_num的时候,才会生效。 goal_num = mapred.map.tasks
4 计算 split_num
可以通过mapred.min.split.size 设置每个task处理的文件大小,但是这个大小只有在大于block_size的时候才会生效。
split_size = max(mapred.min.split.size, block_size);
split_num = total_size / split_size;
计算的map个数
通过公式compute_map_num = min(split_num, max(default_num, goal_num))
可以计算出 map 数。除了这些配置以外,mapreduce还要遵循一些原则。 mapreduce的每一个map处理的数据是不能跨越文件的,也就是说min_map_num >= input_file_num。 所以,最终的map个数应该为:final_map_num = max(compute_map_num, input_file_num)
6 总结
实际上只设置 mapred.map.tasks 和 mapred.min.split.size 这两个参数,如果想增加map个数,则设置mapred.map.tasks 为一个较大的值,如果想减少 map 数,则设置mapred.min.split.size 为一个较大的值。
网友评论