hadoop随手笔记
1.Hadoop Streaming
是为了方便不太熟悉java用户编写MR程序的工具。用户可以将任何可执行文件(C++)或者脚本(python,ruby)作为Mapper/Reducer, 提高了效率。Hadoop Steaming 要求用户编写的Mapper/Reducer从【标准输入】中读取数据,并将结果写到【标准输出】中。这个有点类似于linux的管道机制。
hadoop jar /*/hadoop-streaming-2.2.0.jar -mapper map.py -reducer 'wc -|' -input /data/test.log -output /data/result
2.ChainMapper/ChainReducer
同样类似于linux管道重定向机制,前一个map的输出直接作为下一个map的输入,形成一个流水线。设想这样一个场景:在Map阶段,数据经过mapper01和mapper02处理;在Reduce阶段,数据经过shuffle和sort后,交给对应的reducer处理,reduer处理后并没有直接写入到Hdfs,,而是交给了另一个mapper03处理,它产生的结果最终写到HDFS的输出目录中。但是要注意,对任一MR作业,Map和Reduce阶段可以有无限个mapper,但reduer只能有一个。详见MR案例:链式ChainMapper
3.Hadoop如何Kill指定用户的所有Job
- 列出RM上所有的作业:
hadoop/mapred job -list
- 使用hadoop job -kill杀掉指定的jobid:
hadoop job -kill job_id
组合以上两条命令就可以实现kill掉指定用户的job:for i in `hadoop job -list | grep -w username| awk '{print $1}' | grep job_`; do hadoop job -kill $i; done
4.理解hadoop fsck、fs -dus、-count -q的大小输出
- 逻辑空间:即分布式文件系统上真正的文件大小
- 物理空间:即存在分布式文件系统上该文件实际占用的空间
- 物理空间 = 逻辑空间 * block备份数
4.1.hadoop fsck 和 hadoop fs -dus 显示的文件大小表示的是文件占用的逻辑空间
[root@ncst logs]# hadoop fsck /test
Total size: 92 B //这里是关键【逻辑空间】
Total dirs: 2
Total files: 3
****
FSCK ended at Fri Aug 21 22:22:00 CST 2015 in 2 milliseconds
The filesystem under path '/test' is HEALTHY
[root@ncst logs]# hadoop fs -dus /test
92 /test //这里是关键【逻辑空间】
4.2.hadoop fs -count -q 可以看到这个目录真正的物理空间使用情况【由于设置的副本数为1】
[root@ncst logs]# hadoop fs -count -q /test
命名空间的quota 剩余的quota 物理空间的quota 剩余的物理空间 目录数 文件数 目录逻辑空间总大小 路径
QUOTA REMAINING_QUOTA SPACE_QUOTA REMAINING_SPACE_QUOTA DIR_COUNT FILE_COUNT CONTENT_SIZE FILE_NAME
none inf none inf 2 3 92 /test
5.Hadoop相关协议
JT相关
TT与JT:InterTrackerProtocol
TT与子进程:TaskUmbilicalProtocol
Client与JT:JobSubmissionProtocol
NN相关
Client与NN:ClientProtocol
主要方法:getBlockLocations(),setReplication(),createSnapshot(),append(),setPermission(),setSafeMode(),mkdirs()等
DN与NN:DatanodeProtocol
主要方法:registerDatanode(),sendHeartbeat(),blockReport()等
SNN与NN:NamenodeProtocol
主要方法:registerSubordinateNamenode(),getEditLogManifest(),startCheckpoint(),endCheckpoint()等
DN相关
Client与DN:ClientDatanodeProtocol
主要方法:getBlockLocalPathInfo(),getHdfsBlocksMetadata(),deleteBlockPool()等
DN与DN:InterDatanodeProtocol
主要方法:initReplicaRecovery(),updateReplicaUnderRecovery()等
RM相关
Client与RM:ApplicationClientProtocol
主要方法:submitApplication(),getQueueInfo(),getNewApplication(),getApplications(),forceKillApplication()等
AM与RM:ApplicationMasterProtocol
主要方法:registerApplicationMaster(),allocate(),finishApplicationMaster()等
NM相关
AM与NM:ContainerManagementProtocol
主要方法:startContainers(),getContainerStatuses(),stopContainers等