1、MapReduce计数器。
2、hadoop fs 和hadoop dfs的区别?(注意还有一个hadoop dfsadmin)
粗略的讲,fs是个比较抽象的层面,在分布式环境中,fs就是dfs;但在本地环境中,fs是local file system,这个时候dfs就不能用。
3、将hadoop的jar包添加到classpath,举例walker在/etc/profile中添加了:
export CLASSPATH=.:/home/walker/hadoop-1.2.1/*:/home/walker/hadoop-1.2.1/lib/*
5、从python角度理解map/reduce:Python内建函数之——filter,map,reduce 。
6、MapReduce Job(摘自《Hadoop实战(第2版)——3.2 MapReduce 计算模型》)
在Hadoop中,每个MapReduce任务都被初始化为一个Job。每个Job又可以分为两个阶段:Map阶段和Reduce阶段。这个两个阶段分别用两个函数来表示,即Map函数和Reduce函数。Map函数接收一个<key, value>形式的输入,然后产生同样为<key, value>形式的中间输出,Hadoop会负责将所有具有相同中间key值的value集合到一起传递给Reduce函数,Reduce函数接收一个如<key, (list of values)>形式的输入,然后对这个value集合进行处理并输出结果,Reduce的输出也是<key, value>形式的。
7、如果copyFromLocalFile过程中出现下面类似错误,可能是local文件系统上crc文件原因。abc.txt文件的crc文件为.abc.txt.crc,注意最前面有个点。参考:HADOOP中的CRC数据校验文件
2015-11-25 14:21:14,743 INFO org.apache.hadoop.fs.FSInputChecker: Found checksum error: b[0, 16384]=53514c69746520666f726d61742 org.apache.hadoop.fs.ChecksumException: Checksum error: /usr/local/.../xxx.txt at 0 at org.apache.hadoop.fs.FSInputChecker.verifySum(FSInputChecker.java:350) at org.apache.hadoop.fs.FSInputChecker.readChecksumChunk(FSInputChecker.java:294) at org.apache.hadoop.fs.FSInputChecker.read1(FSInputChecker.java:228) at org.apache.hadoop.fs.FSInputChecker.read(FSInputChecker.java:195) at java.io.DataInputStream.read(DataInputStream.java:83) at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:56) at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:110) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:263) at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1632) at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1610) at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1582)
8、Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputFormat的map任务数量)
9、关于输入压缩文件
(0)、查看当前支持哪些格式,在hadoop/conf/core-site.xml配置文件中,查找配置项io.compression.codecs的值。
(1)、可以在SetMRInfo中这样设置:
job.getConfiguration().set("io.compression.codecs", "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec");
(2)、Hadoop 压缩实现分析
(3)、GZIP、LZO、Zippy/Snappy压缩算法应用场景小结
(4)、hadoop对于压缩文件的支持
10、设置输出gzip压缩格式。(hadoop深入研究:(九)——mapreduce中的压缩)
import org.apache.hadoop.io.compress.GzipCodec; TextOutputFormat.setCompressOutput(job, true); TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
11、mapred.reduce.slowstart.completed.maps (map完成多少百分比时,开始shuffle)。例如:
job.getConfiguration().setFloat("mapred.reduce.slowstart.completed.maps", 0.9f);
12、grep查找hdfs文件内容。(对HDFS上多个文件并行执行grep操作)
hadoop fs -ls /我是/HDFS/目录 | \ awk '{print $8}' | \ xargs -n 1 -I {} -P 10 bash -c "hadoop fs -cat {} | zgrep '要查找的字符串' && echo {}"
13、HDFS查看目录大小。
# 单位Byte: bin/hadoop fs -du / | sort -n # 单位MB: bin/hadoop fs -du / | awk -F ' ' '{printf "%.2fMB\t\t%s\n", $1/1024/1024,$2}' | sort -n # 单位GB,大于1G: bin/hadoop fs -du / | awk -F ' ' '{num=$1/1024/1024/1024; if(num>1){printf "%.2fGB\t\t%s\n", num, $2} }' | sort -n # 总大小 bin/hadoop fs -du -s -h /
14、关于BytesWritable。
1、两个坑。
(1)、getBytes()返回的byte数组后面可能有无效内容。(Hadoop使用ByteWritable时的一个注意事项)
(2)、像下面这样在Reduce中遍历迭代器时,并没有重新new对象,只是用set方法替换内容。(Hadoop BytesWritable的一些有趣发现)
for (BytesWritable item : values) { //item是同一个对象 }
2、反序列化BytesWritable。
for (BytesWritable item : values) { XXXXObject xObj = new XXXXObject(); byte[] bs = new byte[item.getLength()]; System.arraycopy(item.getBytes(), 0, bs, 0, item.getLength()); VipcloudUtil.DeserializeObject(bs, xObj); }
15、Hadoop 2.x 用户名设置。
//代码里面 System.setProperty("HADOOP_USER_NAME", "walker"); //环境变量 HADOOP_USER_NAME=qhy
16、临时切换 HDFS 用户。
export HADOOP_USER_NAME=hdfsuser
18、HDFS 同组成员权限问题也许可以这样解决:
fs.permissions.umask-mode=002
19、Hadoop 2.x 设置单进程物理内存占用。
# 默认值(mapreduce.properties) mapreduce.map.memory.mb=3072 mapreduce.reduce.memory.mb=3072 # 单独设置(Java 代码) JobConfUtil.setTaskPerMapMemory(job, 3072); JobConfUtil.setTaskPerReduceMemory(job, 3072);
20、Hadoop 2.x 设置 MR 程序运行的队列。(mapreduce.properties)
mapreduce.job.queuename=default
*** walker ***