2012-03-16 1 views
0

를 사용하여 문자열을 검색하는 방법은 2 가지 질문이 있습니다. 한 컴퓨터에서 hadoop 클러스터 컴퓨터로이 파일을 전송해야합니다. 나는 거기에 hadoop (또는 거기에 scp 명령이없는 것 같아요?) hadoop 컴퓨터에 파일을 전송하는 방법?하둡에서 컴퓨터간에 파일을 전송하고 돼지

또한 파일이 내 hadoop 클러스터에 있으면 특정 문자열이 포함 된 레코드를 검색하려고합니다 (예 : 'XYZTechnologies'). 어떻게하는 건 돼지 야? 일부 샘플 코드는 나에게 큰 기쁨을 줄 것입니다.

내가 Hadoop/Pig를 작업하는 것은 이번이 처음입니다. 그래서 그것이 "너무 기본적인"질문이라면 나를 용서해주십시오.

또한
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> ... 

, 그래서, 내가 레코드에 아무 곳이나 문자열을 검색하려면 다음 사항을 유의하시기 바랍니다 :

EDIT 1

나는 Jagaran 제안 나는 다음과 같은 오류를 가지고 무엇을하려고 하나의 단일 열로 탭 구분 레코드를 읽습니다.

A = PigStorage ('\ n')를 사용하여 '/ user/abc/part-00000'로드 AS (Y : chararray);

+0

복사를 HDFS로 : http://stackoverflow.com/q/1533330/179529 돼지는 의미하지 않습니다 검색. 많은 조작 데이터 (ETL)를 스캔하는 데 사용됩니다. – Guy

답변

1

하둡으로 복사하는 경우. 1. 다른 컴퓨터에 Hadoop Client를 설치 한 다음 hadoop dfs -copyFromLocal을 명령 행 에서 수행 할 수 있습니다. 2. FileSystem API를 사용하여 hadoop에 복사하는 간단한 Java 코드를 작성할 수 있습니다.

돼지의 경우. 당신을 가정 필드 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

+0

'일치'주위에()를 써서는 안됩니다. 나머지는 괜찮습니다. – Bhushan

+0

그래서 지금 작동 중입니다 :) – Jagaran

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 기본 delimeter는 탭이므로 파일에없는 delimeter를 넣으십시오. 는 다음 것을 함유에 대한 부울을 반환하는 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을 좋아한다. hadoop이 좋습니다. 나는 연습하고있다.

그래서 hadoop 명령은 입니다. hadoop fs -text '경로와 파일 이름'| 그렙 '문자열이 발견되는'

돼지 껍질 : chararray : --load (텍스트로 PigStorage()를 사용하여 변수 돼지

** 데이터 = LOAD '경로와 파일'에 파일 데이터);

-에 의해

TXT = FILTER 데이터를 필요한 텍스트 찾기 ($ 0 MATCHES '.. 문자열을 발견 할을');

- 데이터를 표시합니다.

덤프 txt; --- 또는 Illustrate txt를 사용하십시오. .

- PigStorage()를 사용하여 "경로 '로 다른 파일 상점 TXT에 저장,