복붙노트

[HADOOP] `hadoop`에서`find` 명령과 동일한 명령이 있습니까?

HADOOP

`hadoop`에서`find` 명령과 동일한 명령이 있습니까?

터미널에서 다음과 같은 파일을 찾을 수있는 명령을 찾을 수 있습니다.

find . -type d -name "*something*" -maxdepth 4 

그러나, 내가 hadoop 파일 시스템에있을 때, 나는 이것을 할 방법을 찾지 못했습니다.

hadoop fs -find ....

오류가 발생합니다.

사람들이 hadoop에서 파일을 어떻게 트래버스합니까? 나는 hadoop 2.6.0-cdh5.4.1을 사용하고 있습니다.

해결법

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

    1.hadoop fs -find는 Apache Hadoop 2.7.0에서 소개되었습니다. 대부분 이전 버전을 사용하고 있으므로 아직 가지고 있지 않습니다. 자세한 내용은 HADOOP-8989를 참조하십시오.

    hadoop fs -find는 Apache Hadoop 2.7.0에서 소개되었습니다. 대부분 이전 버전을 사용하고 있으므로 아직 가지고 있지 않습니다. 자세한 내용은 HADOOP-8989를 참조하십시오.

    그 동안 당신은

    hdfs dfs -ls -R <pattern>
    

    예 : hdfs dfs -ls -R /demo/order*.*

    물론 '찾기'만큼 강력하지는 않으며 기본이 부족합니다. 내가 아는 바로는 사람들은이 문제를 해결하기 위해 스크립트를 작성했습니다.

  2. ==============================

    2.Cloudera 스택을 사용하는 경우 찾기 도구를 사용해보십시오.

    Cloudera 스택을 사용하는 경우 찾기 도구를 사용해보십시오.

    org.apache.solr.hadoop.HdfsFindTool
    

    명령을 bash 변수로 설정하십시오.

    COMMAND='hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool'
    

    사용법은 다음과 같습니다.

    ${COMMAND} -find . -name "something" -type d ...
    
  3. ==============================

    3.사용할 수있는 cloudera 소포가 없으므로 awk를 사용할 수 있습니다.

    사용할 수있는 cloudera 소포가 없으므로 awk를 사용할 수 있습니다.

    hdfs dfs -ls -R /some_path | awk -F / '/^d/ && (NF <= 5) && /something/' 
    

    그것은 find와 거의 같습니다. - 유형 d - 이름 "* 뭔가 *"- maxdepth 4 명령.

  4. ==============================

    4..bash_profile에서 별칭으로 HdfsFindTool을 추가하면 항상 쉽게 사용할 수 있습니다.

    .bash_profile에서 별칭으로 HdfsFindTool을 추가하면 항상 쉽게 사용할 수 있습니다.

    - 프로필 아래에 추가 별칭 hdfsfind = 'hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.HdfsFindTool' 별칭 hdfs = 'hadoop fs'

    - u는 다음과 같이 사용할 수 있습니다 : (여기에서는 find 도구를 사용하여 HDFS 소스 폴더를 현명하게 파일 이름과 레코드 수를 얻습니다.)

    $> cnt = 1; hdfsfind에서 ff에 대해 - find /dev/abc/*/2018/02/16/*.csv -type f; do pp = echo $ {ff} | awk -F "/" '{print $ 7}'; fn = basename $ {ff}; fcnt = hdfs -cat $ {ff} | wc -l; echo "$ {cnt} = $ {pp} = $ {fn} = $ {fcnt}"; cnt = expr $ {cnt} + 1; 끝난

    - 폴더 / 파일 세부 정보를 얻기 위해 간단합니다 : $> hdfsfind -find / dev / abc / -type f -name "* .csv" $> hdfsfind -find / dev / abc / -type d -name "장난감"

  5. from https://stackoverflow.com/questions/32896393/is-there-the-equivalent-for-a-find-command-in-hadoop by cc-by-sa and MIT license