Hadoop的一些經驗總結

1.編寫JAVA代碼出現如下問題:

[color=darkred][b]2012-4-20 19:36:55 org.apache.hadoop.util.NativeCodeLoader <clinit>
璀﹀憡: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable[/b]
[/color]

Hadoop是使用Java語言開發的,但是有一些需求和操作並不適合使用java,所以就引入了本地庫(Native Libraries)的概念,通過本地庫,Hadoop可以更加高效地執行某一些操作。
上述意思是說不能再如本地類庫,處理的方式也比較簡單:

在Hadoop的配置文件core-site.xml中可以設置是否使用本地庫:

<property>
<name>hadoop.native.lib</name>
<value>true</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>

2.HIVE的使用
HIVE中是等值JOIN的,也支持左右連接;
在使用寫有 Join 操作的查詢語句時有一條原則:應該將條目少的表/子查詢放在 Join 操作符的左邊。
原因是在 Join 操作的 Reduce 階段,位於 Join 操作符左邊的表的內容會被加載進內存,將條目少的表放在左邊,可以有效減少發生 OOM 錯誤的機率。


3.hadoop原生默認的壓縮文件的解析:
hadoop中的文件是默認壓縮的,在hadoop中的API中是根據文件後綴名成來判斷該文件的壓縮類型的
例如test.deflate文件,其hadoop的文件壓縮格式就是deflate,這種是默認的hadoop文件要所格式,當然還支持其他好幾種壓縮格式,比如Gzip,bzip2,zlib等
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory.getCodec(p);
if (codec == null) {
throw new IOException(
String.format(
"Can't find any suitable CompressionCodec to this file:%s",
p.toString()));
}
in = fs.open(p);
CompressionInputStream cin = codec.createInputStream(in);
br = new BufferedReader(new InputStreamReader(cin, encoding),
bufferSize);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章