hadoop程序运行

hadoop命令的使用:

Usage: hadoop [--config confdir] COMMAND

这里COMMAND为下列其中一个:

<span style="font-size:16px;">namenode -format        格式化DFS文件系统  
secondarynamenode       运行DFS的第二个namenode  
namenode                    运行DFS的namenode  
datanode                    运行一个DFS的datanode  
dfsadmin            运行一个DFS的admin 客户端  
fsck                运行一个DFS文件系统的检查工具  
fs                  运行一个普通的文件系统用户客户端  
balancer            运行一个集群负载均衡工具  
jobtracker          运行MapReduce的jobTracker节点  
pipes               运行一个Pipes作业  
tasktracker     运行一个MapReduce的taskTracker节点  
job                 处理MapReduce作业  
version         打印版本  
jar <jar>       运行一个jar文件  
distcp <srcurl> <desturl>   递归地复制文件或者目录  (采用分布式复制方法,一般用于两个HDFS集群中)
archive -archiveName NAME <src>* <dest> 生成一个Hadoop档案       (将har当作一个新的文件系统,《权威指南3.8节》)
daemonlog               获取或设置每个daemon的log级别  
或CLASSNAME              运行名为CLASSNAME的类大多数命令会在使用w/o参数  
                        时打出帮助信息。</span>
  • hadoop程序的编译:(我是用的hadoop版本为hadoop-0.20.203.0)

1.注意的是要将hadoop的core包加入到classpath中,命令如下:

javac -classpath ~/hadoop-0.20.203.0/hadoop-core-0.20.203.0.jar  FileSystemDoubleCat.java

(这里还有一个疑问:我用通配符添加jar包时一直失败(使用 *.jar),提示找不到类??????)

  • 运行hadoop程序的方法如下:

1.直接使用hadoop CLASSNAME 【args】 运行,

    ( 注意此时需设置环境变量 HADOOP_CLASSPATH中包含当前类。其中当前目录中应该包含.class文件,这个可以通过在eclipse中的bin文件下取得,或用上面的方法进行编译)

如:hadoop FileSystemDoubleCat hdfs://localhost:9000/user/kqiao/uploadFile

2.将程序打包成jar包,然后使用hadoop jar命令运行。

     这只相当于将上面中的.class文件打包,然后运行该jar文件。(注意,如果以集群模式下运行hadoop,则只能使用这种方法,因为需要在各网络节点上分发jar包)并且主程序中要有:

job.setJarByClass(MaxTemperature.class)这句,用于设定jar类

命令如下:jar -cvf FileSystemDoubleCat.jar FileSystemDoubleCat.class
                    hadoop jar FileSystemDoubleCat.jar FileSystemDoubleCat hdfs://localhost:9000/user/kqiao/uploadFile

3.安装eclipse的hadoop插件,直接在eclipse中编辑程序,然后运行

     这应该算是最简单的运行方法了吧。。。。

   在run configuration下完成配置,然后 run on hadoop即可。

-----------------------------------------------------------------------------------------------------------------------------------

  以后记录我在运行中遇到的问题~

(1)-D mapred.reduce.tasks=2   或  job.setNumReduceTasks(2) 设置reducer的数量  

    (换了一个hadoop版本,不知道为什么,使用-D  选项设置reducer数量失败了,没有报错,但是reducer保持为1,只能使用job.set来设置?未解决。。)

  (2)如果已经确定有某类的存在,却一直提示找不到该类,一般是因为class_path的设置问题。

  (3)如果自定义的mapper类是主类的内部类时,一定记得将其定义为static。

  (4)hadoop程序,如果有运行错误,主要通过查看job或task的日志解决:看看抛出了什么样的异常,在哪个阶段,哪个任务抛出了异常。

   如果是运行结果与预期不符,则通过查看计数器判断那部分出错,另一方面可以在程序中加入输出语句,System.out.println("****");然后在web页面中的job下查看各个job的task日志,看看 stdout log, stderr log进行分析排序。

posted @ 2013-03-08 20:17  dandingyy  阅读(4871)  评论(0编辑  收藏  举报