scp -r 拷貝文件夾 會忽略 軟連接

今天使用noah上線單上線,將 hadoop客戶端  文件夾 批量 拷貝到 線上機器 的 對應目錄。

結果在測試運行時,執行hive命令,select * from  rcfile格式的表,會報錯:


hive>  select * from log_bd_show_info where  pdate='2014-06-11' and hour='1145' limit 10;
OK
Failed with exception java.io.EOFException:null
Time taken: 3.506 seconds


其他textfile格式的表,一切正常。

懷疑是 壓縮lib包的問題,跟蹤 hive的log日誌:   hive-log4j.properties裏面指定的日誌文件,發現裏面 會有詳細的java 警告:


 WARN  util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(52)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable


可見 hive 是 找不到 hadoop的  lzo lzma 壓縮庫。


故 結合很早前 排查過類似問題,定位原因是: 缺乏 軟連接 文件導致。  而線下機器 是正常的,如下圖所示:



但線上 機器  對應的文件夾下 卻沒有這些 軟連接,豈不怪哉?

我是通過 noah web上線單的 scp -r 命令 將 文件夾 整體 拷貝到 線上機器的。

故問題 就出現在 這裏!

scp命令 是 不會拷貝 軟連接的。 故 解決方法是 手工在 線上機器 創建 這些軟連接,寫個shell腳本,通過noah web單 批量 在各臺機器執行:


#!/bin/sh
#ln命令  + 真實文件+ 軟連接 。

cd /home/work/hadoop/hadoop-client-1.2.4/hadoop-client/hadoop/lib/native/Linux-amd64-64/
ln -s liblzo2.so.2 liblzo2.so
ln -s libhadoop.so.1.0.0 libhadoop.so
ln -s libhadoop.so.1.0.0 libhadoop.so.1

cd /home/work/hadoop/hadoop-client-1.2.4/hadoop-client/hadoop/
ln -s hadoop-2-core.jar hadoop-2-velo.jar
cd /home/work/hadoop/hadoop-client-1.2.4/hadoop-client/hadoop/libhdfs/
ln -s libhdfs.so.3.1.0-SNAPSHOT libhdfs.so



如何想要拷貝 軟連接,該如何辦呢?


方法1 : 先tar 打包,然後再 scp 文件, 最後解壓縮。

方法2 :rsync 加  -l參數可以實現






發佈了46 篇原創文章 · 獲贊 13 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章