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/*


4、HBase中为什么要有Column Family?


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函数接收一个形式的输入,然后产生同样为形式的中间输出,Hadoop会负责将所有具有相同中间key值的value集合到一起传递给Reduce函数,Reduce函数接收一个如形式的输入,然后对这个value集合进行处理并输出结果,Reduce的输出也是形式的。


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


17、hdfs dfs -du -h 输出三列数据的含义


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 ***