복붙노트

[HADOOP] 아파치 돼지 UDF를 통해 자바 스크립트 파일을 읽기

HADOOP

아파치 돼지 UDF를 통해 자바 스크립트 파일을 읽기

나는 약간 (아주 단순화가) 여기에 코드를 nodejs 있습니다 :

var fs = require('fs');

var derpfile = String(fs.readFileSync( './derp.txt', 'utf-8' ));
var derps    = derpfile.split( '\n' );
for (var i = 0; i < derps.length; ++i) {
    // do something with my derps here
}

문제는 내가 돼지 UDF의에 노드를 사용할 수 없다 (내가 알고 오전, 내가이 할 수 있다면, 알려 주시기 바랍니다). 내가 자바 스크립트에서 '파일 IO'을 보면, 내가 보는 모든 자습서는 브라우저 샌드 박스를 다시하고 있습니다. 나는 HDFS와 같은 파일 시스템 떨어져 파일을 읽을 필요가 : 나는 CWD에있을 것입니다 보장 할 수 없습니다,하지만 난 얻을 수있는 권한이 할 ///foo/bar/baz/jane/derps.txt을. 이러한 모든 자습서 비동기 읽기와 관련된 것으로 보인다. 이 파일을 읽을 때까지 돼지 작업을 시작할 수 없기 때문에 정말 여기 차단 호출이 필요합니다. 다른 사이트에서 URL을 아래로 당겨하는 방법에 대한 설명을 많이도 있습니다.

이 종류의 믿을 수 없을만큼 좌절이 작업을 위해 자바를 사용하여 같은 것은 끔찍한 과잉을, 그리고 자바 스크립트는 정말 작업에 적합한 도구 (물론, 좋아, 펄,하지만 나는 그것을 선택하지 않는 ...), 그리고 난 기본 파일 IO 같은 간단한에 묶였다. :(

해결법

  1. ==============================

    1.나는 그것으로 UDF를 작성 적이 있기 때문에, 자바 스크립트의 사용에 말할 수 있지만, 일반적으로 파일 액세스 당신이 HDFS에 뭔가를 액세스하려고 특히 경우에는 UDF의 내부에서 수행되지 않습니다. 당신은 운이 있습니다 당신은 데이터 노드에서 실행되면 있도록 HDFS의 파일은, 네임 노드를 통해 액세스 할 수 있습니다. 당신은 분산 캐시에있는 파일을 배치해야합니다.

    나는 그것으로 UDF를 작성 적이 있기 때문에, 자바 스크립트의 사용에 말할 수 있지만, 일반적으로 파일 액세스 당신이 HDFS에 뭔가를 액세스하려고 특히 경우에는 UDF의 내부에서 수행되지 않습니다. 당신은 운이 있습니다 당신은 데이터 노드에서 실행되면 있도록 HDFS의 파일은, 네임 노드를 통해 액세스 할 수 있습니다. 당신은 분산 캐시에있는 파일을 배치해야합니다.

    돼지는 JOIN을 수행하여 당신을 위해이 작업을 수행 할 수 있습니다. 파일이 메모리에 들어가는 경우, 당신은이 분산 캐시를 활용할 것이다 가입 복제 할 수 있습니다. 나는 관계로 파일을로드 하나의 가방에 그걸 얻기 위해 모든 그룹 관계를 사용하고 관심의 관계에있는 모든 레코드와이 가방을 십자가에 돼지를 사용합니다. 그럼 당신은 당신이 원하는 UDF를이 가방을 전달할 수 있습니다. 뭔가 같은 :

    a = LOAD 'a' AS ...;
    f = LOAD '/the/file/you/want' AS ...;
    
    /* Put everything into a single bag */
    f_bag = FOREACH (GROUP f ALL) GENERATE f;
    /* Now you have a relation with one record;
       that record has one field: the bag, f */
    a2 = CROSS a, f_bag;
    /* Now you have duplicated a and appended
       the bag f to each record */
    
    b = FOREACH a2 GENERATE yourUDF(field1, field2, f)
    
  2. from https://stackoverflow.com/questions/19841375/reading-a-file-in-javascript-via-apache-pig-udf by cc-by-sa and MIT license