>

나는 hadoop에 약간 익숙하다. 내 지식에 따라 양동이는 고정되어 있습니다. 하이브 테이블의 파티션과 하이브는 no를 사용합니다. 총 no.와 동일한 감속기 테이블을 생성하는 동안 정의 된 버킷 수 그래서 누구든지 총 수를 계산하는 방법을 말해 줄 수 있습니까? 하이브 테이블에 버킷. 총 버킷 수를 계산하는 공식이 있습니까?


  • 답변 # 1

    문서에서 링크

    와이즈 비즈

  • 답변 # 2

    In general, the bucket number is determined by the expression hash_function(bucketing_column) mod num_buckets. (There's a '0x7FFFFFFF in there too, but that's not that important). The hash_function depends on the type of the bucketing column. For an int, it's easy, hash_int(i) == i. For example, if user_id were an int, and there were 10 buckets, we would expect all user_id's that end in 0 to be in bucket 1, all user_id's that end in a 1 to be in bucket 2, etc. For other datatypes, it's a little tricky. In particular, the hash of a BIGINT is not the same as the BIGINT. And the hash of a string or a complex datatype will be some number that's derived from the value, but not anything humanly-recognizable. For example, if user_id were a STRING, then the user_id's in bucket 1 would probably not end in 0. In general, distributing rows based on the hash will give you a even distribution in the buckets.

    에서 몇 개의 버킷을 선택해야하는지 알고 싶다면  조항에 따르면 HDFS 블록 크기 이하의 버킷을 생성하는 숫자를 선택하는 것이 좋습니다.

    이것은 HDFS가 대부분 비어있는 파일에 메모리를 할당하지 않도록 도와줍니다.

    또한 2의 거듭 제곱 인 숫자를 선택하십시오.

    다음을 사용하여 HDFS 블록 크기를 확인할 수 있습니다.

    CLUSTER BY
    
    

  • 답변 # 3

    최적의 버킷 번호는 (B * HashTableSize of Table)/노드의 총 메모리, B = 1.01입니다

  • 답변 # 4

    테이블 크기가 2300MB 인 시나리오를 사용합니다. HDFS 블록 크기 : 128MB

    이제 나누기 2300/128 = 17.96

    이제 버킷 수는 항상 2의 거듭 제곱입니다.

    따라서 2 ^ n>17.96과 같은 n을 찾아야합니다

    n = 5

    따라서 2 ^ 5 = 32로 버킷 수를 사용하겠습니다

    희망, 그것은 당신의 일부를 도울 것입니다.

    hdfs getconf -confKey dfs.blocksize

  • 이전 c# - 웹 API에서 GET 요청에 쿼리 매개 변수를 추가하는 방법
  • 다음 정렬 된 집계 결과를 페이지 매김하는 Elasticsearch