Hadoop在安裝snappy過程中的問題


環境介紹:

  • Linux2.6.32-504.el6
  • hadoop-2.7.3
  • openjdk-1.7

問題:

  測試機中已經有一套搭建好了的Hadoop集群,所以在往生產環境部署Hadoop集群時,直接將測試機中編譯好的Hadoop版本上傳到生產環境中即可,然后修改下配置文件集群就搭建成功了。但由於當時在搭建集群時沒有考慮使用snappy來對文件壓縮,所以在Hadoop的動態庫中就沒有Snappy的庫,導致在運行hadoop checknative -a檢查集群是否支持snappy時出現了如下情況:

  可以明顯看到,在snappy那一項中顯示false。所以即使把snappy安裝好,Hadoop還是無法支持snappy

原因:

  查找了很多博客,大多數都是說在Hadoop進行源碼編譯時沒有添加對snappy的支持。查看了下測試機上的Hadoop編譯好的版本,在lib目錄下是有snappy庫的,但在線上的版本就是無法支持snappy。最后發現原來測試機以前在部署好后也是沒有添加snappy的庫。snappy庫是最后安裝才添加的,而我當時拷貝的是以前編譯好的版本,所以就沒有snappy庫,無法支持sanppy。

解決方法:

  1、安裝snappy

  到官網http://code.google.com/p/snappy/ 或者到https://github.com/google/snappy下載源碼。目前最新的版本是1.1.7.由於測試環境中使用的是1.1.1,所以下載對應的1.1.1版本就好。

  2、解壓安裝

  解壓tar -zxvf snappy-1.1.1.tar.gz.然后用root用戶執行以下三步進行編譯安裝:

./configure
make
make install

  默認安裝到/usr/local/lib/下。查看該目錄如下:

 

  編譯過程中沒有報錯,並且可以看見以上動態庫,則表示snappy編譯安裝成功了。

  3、重新編譯Hadoop動態庫

  重新編譯Hadoop動態庫來支持snappy(在安裝snappy之后進行編譯),把重新編譯生成的Hadoop動態庫替換原來的動態庫。命令如下:

mvn package -Pdist,native -DskipTests -Dtar  -Drequire.snappy

  說明:-Drequire.snappy=/xxx/xxx/xxx 后面可以跟snappy安裝后的路徑。如果沒有指定路徑,則默認在/usr/local/lib下。

  由於測試機上有已經編譯好了的動態庫所以拷貝到線上環境就好。拷貝到$HADOOP_HOME/lib目錄下。

  4、檢測

  執行hadoop checknative -a 看現在是否支持snappy,結果如下:

  結束!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM