分享

关于hadoop日志讨论

howtodown 发表于 2014-6-25 21:57:50 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 9145

context.write写的文件part-r-00000怎么打开啊,很大,几百M
cat,text,都不太好,直接用记事本显示空白,打不开,太大了
日志是不是都需要输出,如果生产环境,对于日志有什么要求





已有(7)人评论

跳转到指定楼层
howtodown 发表于 2014-6-25 22:00:18
本帖最后由 howtodown 于 2014-6-25 22:02 编辑
直接用-text没有问题
考到win7下用记事本就有问题用读文件的方式一行一行去取还有乱码 只输出数字打开也有很多#,


想用http://ip:50070/dfshealth.jsp,但是不管用。







回复

使用道具 举报

nettman 发表于 2014-6-25 22:03:24
那不是乱码,是封装的Writable
在Linux下用strings看这个文件,如果有空格,会忽略掉。
空白,也是的
要看纯文本.输出格式得是Textoutputformat


回复

使用道具 举报

howtodown 发表于 2014-6-25 22:17:03

我用的这种格式

context.write(Text,PageRankNode)


这种格式的,PageRankNode是一个对象,但是输出下面有各种#等特殊符号


###########        13084322982
####999#999        13198417390
##379595568        13035650470
##89097#64#        13060108148
#03603363#2        15680916657
#0801#09500        13281177726
#1066666688        13037709702        13208149513        13183977086        13219142985
#1283104973        13228318562
#1348229078        13198357723
#1834962085        15608154552
#36#9969160        15680448118
#6##9#92#36        13208268187
#6601#92683        15680947136
#894286176#        13079192980
#9232225555        13086583238
*#*0*77058*        13183407198
*****#*#*#*        15681217948
**999999999        13198650755
*0#12345678        15583697011
*008271#93*        15520393479
*2562546987        13036657511
*30852*7474        13038107748
*7*76#01111        13258402429
*8752541475       
*9*9*9*9*9*       
*97*0#7*41#



回复

使用道具 举报

nettman 发表于 2014-6-25 22:18:47
howtodown 发表于 2014-6-25 22:17
我用的这种格式

context.write(Text,PageRankNode)
你这个对象没有序列化,所以会输出一些#之类的符号。把你的程序贴出来

回复

使用道具 举报

howtodown 发表于 2014-6-25 22:23:27



  1. public static class AdjGraphMapper extends Mapper<Object, Text, Text, Text> {  
  2.         @Override  
  3.         public void map(Object key, Text value, Context context) throws IOException, InterruptedException {  
  4.                 String[] arr = value.toString().split("\t");
  5.                 if(arr[0].trim().length() == 11){
  6.                         if(arr[1].trim().length() == 11){
  7.                                 context.write(new Text(arr[0]), new Text(arr[1]));  
  8.                         }else{
  9.                                 context.write(new Text(arr[0]),new Text());
  10.                         }
  11.                 }
  12.         }  
  13.     }  
  14.        
  15.         public static class AdjGraphReducer extends Reducer<Text,Text,Text,Text> {  
  16.                 @Override  
  17.         public void reduce(Text key, Iterable<Text> values,Context context) throws IOException, InterruptedException {
  18.                 HashSet<String> toIdSet = new HashSet<String>();
  19.                     Text result = new Text();  
  20.             for (Text val : values) {
  21.                     toIdSet.add(val.toString());
  22.             }  
  23.             result.set(toIdSet.toString().replaceAll("[\\[\\]]", "").replaceAll(", ", "\t"));  
  24.             context.write(key, result);  
  25.             System.out.println(key+","+result);
  26.         }  
  27.     }  
复制代码




  1. public static void main(String[] args) throws Exception {  
  2.         String input = "hdfs://192.168.0.106:9000/user/wsc/data/SM20140623.txt";  
  3.         String output = "hdfs://192.168.0.106:9000/user/wsc/data/result2";  
  4.   
  5.         Configuration conf = new Configuration();  
  6.         Job job = new Job(conf, "adj graph");  
  7.         job.setJarByClass(AdjGraph.class);  
  8.         job.setMapperClass(AdjGraphMapper.class);  
  9.         job.setCombinerClass(AdjGraphReducer.class);  
  10.         job.setReducerClass(AdjGraphReducer.class);  
  11.         
  12.         job.setOutputKeyClass(Text.class);  
  13.         job.setOutputValueClass(Text.class);  
  14.         FileInputFormat.addInputPath(job, new Path(input));  
  15.         FileOutputFormat.setOutputPath(job, new Path(output));  
  16.         System.exit(job.waitForCompletion(true) ? 0 : 1);  
  17.     }  
复制代码



回复

使用道具 举报

nettman 发表于 2014-6-25 22:28:26
你这个输出没有问题,但是out默认是控制台信息,会输出到日志文件,

由于hadoop 的job里面的log4j配置了接收控制台的日志,
所以真实环境上跑任务的时候要注释掉日志,不然磁盘会爆满

回复

使用道具 举报

x5136160 发表于 2014-7-15 20:21:29
很好很好,了解了解。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条