2012-03-16 46 views
0

字符串我有2個問題:如何機器間傳輸文件在Hadoop和搜索使用豬

我有記錄的大文件,有幾百萬的。我需要將這個文件從一臺機器傳輸到hadoop羣集機器。我想在hadoop中沒有scp命令(或者在那裏?)如何將文件傳輸到hadoop機器?另外,一旦文件在我的hadoop集羣上,我想搜索包含特定字符串的記錄,比如'XYZTechnologies'。如何做到這一點是豬?一些示例代碼將會給我一個很好的啓動。

這是我第一次使用Hadoop/Pig。所以請原諒我,如果這是一個「太基本」的問題。

編輯1

我試了一下Jagaran建議,我得到了以下錯誤:

2012-03-18 04:12:55,655 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1000: Error during parsing. Encountered " "(" "("" at line 3, column 26. 
Was expecting: 
    <QUOTEDSTRING> ... 

而且,請注意,我想在記錄中的任何地方搜索字符串,所以我正在使用PigStorage('\ n')AS(Y:chararray)讀取選項卡分隔的記錄作爲一個列:

A = load'/ user/abc/part-00000'

+0

複製到HDFS:http://stackoverflow.com/q/1533330/179529 豬並不意味着對搜索,用於掃描大量的數據進行操作(ETL) – Guy 2012-03-17 08:55:54

回答

1

用於複製到Hadoop。 1.您可以在另一臺機器上安裝Hadoop的客戶端,然後做 從命令行 2. -copyFromLocal Hadoop的DFS你可以簡單的寫,將使用文件系統API一個java代碼複製到Hadoop的。

豬。 假設你知道2場可能包含XYZTechnologies

A = load '<input-hadoop-dir>' using PigStorage() as (X:chararray,Y:chararray); 
-- There should not be "(" and ")" after 'matches' 
B = Filter A by Y matches '.*XYZTechnologies.*'; 
STORE B into 'Hadoop=Path' using PigStorage(); 
+0

感謝Jagaran,我嘗試了你的建議,但是我在這樣做的時候遇到了一個錯誤,我用** EDIT 1 **更新了這些問題。請再看一遍,再次感謝 – Bhushan 2012-03-18 08:16:25

+0

不應該在(')'周圍(')休息很好 – Bhushan 2012-03-23 20:48:26

+0

所以它現在工作:) – Jagaran 2012-03-27 13:37:07

2

關於第一個問題,我想那傢伙已經回答了。 至於第二個問題,它看起來像,如果你只是想搜索包含一個特定的字符串,bash腳本是更好的記錄,但如果你堅持豬,這是我的建議:

A = load '/user/abc/' using PigStorage(',') AS (Y:chararray); 
B = filter A by CONTAINS(A, 'XYZTechnologies'); 
store B into 'output' using PigStorage() 

請記住,PigStorage默認的分隔符是標籤,所以放一個沒有出現在文件中的分隔符。 那麼你應該寫一個UDF用於包含返回一個布爾值,像這樣:

public class Contains extends EvalFunc<Boolean> { 
@Override 
public Boolean exec(Tuple input) throws IOException 
{ 
    return input.get(0).toString().contains(input.get(1).toString()); 
} 
} 

我沒有測試這一點,但是這是我想嘗試的方向。

0

嗨,你可以使用hadoop grep函數來找到文件中的特定字符串。 例如我的文件包含一些數據如下

嗨,我自己xyz。我喜歡hadoop。 012ohadoop很好。 我正在練習。

所以Hadoop的命令是 -text '與路徑文件名' Hadoop的FS | grep的 '字串被發現'

豬殼: --load文件數據轉換成使用PigStorage()作爲(文本豬可變

**數據= LOAD '文件與路徑':chararray );

- 找到所需要的文本由

的txt = FILTER數據($ 0匹配 '串被發現');

- 顯示數據。

dump txt; ---或使用說明txt; 。

- 將其存儲在另一個文件 STORE TXT入「路徑」使用PigStorage();