代码改变世界

hadoop笔记2012-05

2012-06-02 11:48  金融与IT的极速狂想曲  阅读(193)  评论(0)    收藏  举报

2012.5.2
http://tdcq.iteye.com/blog/1338777;列出了hadoop的常见异常。
2012.5.3
1。如果replication为3,如果不修改,datanode少于三台就会报错。
2。echo “Hello World Bye World” > file01,快速建文件,活学活用啊。

2012.5.4
1.在单机模式或者是伪分布模式,System.out.println()是有效的。但是在全分布模式中,System.out.println()却是无效的,里面的信息是在stdout.log和stderr.log中。

2012.5.8.
1.http://blog.csdn.net/chenxinl/article/details/6899193.
mapper的output.collect有两个分支,如果setReduceNumTask(0),outputformat的recordwriter直接把key-value写入磁盘。这些过程,都在MapTask.java和ReduceTask.java.

2012.5.9
1.hadoop默认一个reducer对应于一个文件,Part-0000,part-0001。但有时候可能需要重命名输出文件名,或者让hadoop输出多个文件。 hadoop有多个输出的类,叫MultipleOutputFormat和MultipleOutput类。
2.最好让集群来决定为作业的分区数:集群的reducer任务槽越多,作业就完成的越快。有两个比较特殊的情况,那就是reducernum=0,或reducernum=1的情况。

3.MultipleOutputs,http://my.oschina.net/u/146658/blog/49521,这个是新的hadoop0.20的api,可惜是chd3的。

4.记住一点,在没有执行到job.run()之前,都是在JobClient执行的。见网址http://hi.baidu.com/dtzw/blog/item/64a6f3f2dff0511eb17ec5b0.html.

5.https://builds.apache.org/,是一个编译好的所有apache项目的网站。

2012.5.10
1.hadoop处理多个输入,就用multipleInputs.
2.对于chained jobs,会产生许多中间结果。一定要在job完成的时候释放所有中间结果。 FileSystem.get(conf).delete(new Path(outputPath), true);
3.copyFromLocal和put的区别。
copyFromLocal:他的源文件仅仅是一个本地文件。而put可以是文件,目录和标准输入。http://zhidao.baidu.com/question/357895121.html。

2012.5.15
1.hadoop,压缩格式配置文件的设置:http://mail-archives.apache.org/mod_mbox/hadoop-mapreduce-user/201204.mbox/%3C06006DDA5A27D541991944AC4117E7A94D3AF9B7@szxeml524-mbs.china.huawei.com%3E。
在mapred-site.xml中,主要是设置一个属性值,hadoop0.23之后的版本,设置mapreduce.output.fileoutputformat.compression.type属性,RECORD和BLOCK。
之前的版本,设置mapred.output.compression.type属性,RECORD和BLOCK。

如果想注册一个外部的压缩格式如(LZO),在core-site.xml中,在属性io.compression.type添加相应值即成。

2.FileOutputFormat.setOutputCompressorClass(job,GzipCodec.class);//为输出文件压缩,新版本hadoop0.20.

3.对MapReduce来说,类型的比较是非常的重要,因为它决定了基于键的排序情况。如果想改变排序方法,就是自定义comparator.每一种类型都有相应的比较器,例如IntWritable和Text,它都有相应的比较器。

4.大多数Writable实现了set()和get().Text类型与String区别大的,是Text是可变的,而String是最终类。

5.16
1.IOUtils.closeStream(writer);关闭输出流。
2.hadoop fs -text,可以查看压缩文件的内容,当然首先该压缩文件必须是文件文件。可以看顺序文件,也就是二进制文件。
3.hadoop的log4j.properties控制所有的日志的元信息。其中的HADOOP_ROOT_LOGGER=DEBUG,console,将它的调试信息输出来。具体可见:http://linzhanghui.iteye.com/blog/723455。
4.想不到java也有c类似的输出语句。System.out.printf().. System.out.printf("[%s%s]\t%s\t%s\n", position, syncSeen, key, value);
5.hadoop -r 1,设置reducer的数量为1。
6.hadoop中的默认是不压缩数据的,如果设置输出文件是压缩的,默认的压缩方式是记录压缩,但是压缩效率不高,所以最好改为块压缩方式。

5.22
1.一般来说,想自定义Comparator,一般继承WritableComparator,而不是RawComparator.因为RawComparator它是一个接口,而WritableComparator是RawComparator的一个实现。
2.Writable,与Java Serialization的区别,就是Writable并没有将classname写进stream.详见:p101.
3.在conf.xml中,如果属性被定义了final后,那么这个属性不不可被其他的覆盖。作用很简单,就是防止别人篡改默认值。
4.hadoop默认的用户就是linux中的whoami.
5.如果想合理的在多个hadoop环境中切换,那么你的做法就是:为每个环境新建一个conf,并且不要将他放在hadoop的安装包里的conf文件夹,而是要移出来,运行hadoop的程序时,可以在命令行中,加入-conf来切换配置文件。
6.最好在程序中实现Tool这个接口。

5.28
1.当遇到一些莫名的错误时候,开始hadoop的调试信息是个不错的选择,让你可以看到更多的信息。通过这些额外的debug信息,更加准确的定位问题所在。
开启debug信息

export HADOOP_ROOT_LOGGER=DEBUG,console

2.ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys. localhost

scp ~/.ssh/id_rsa.pub remoteHost:~/.ssh/
ssh remoteHost
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys


2.Nectar : Next generation predictive modeling framework on Apache Hadoop.有一部分hadoop应用的东西。