복붙노트

[HADOOP] HBase 단일 행 트랜잭션 지원에서의 행 잠금

HADOOP

HBase 단일 행 트랜잭션 지원에서의 행 잠금

HBase에서는 단일 행 트랜잭션 지원을 제공하기 위해 행 잠금 개념을 사용합니다. 예를 들어

p = new Put ( "/ * 행 키 * /"); 이 문장은 행을 잠급니다.

우리가 완성 할 때까지

잠금이 해제되지 않습니다.

따라서 새로운 풋을 시작하면 그 사이에

행이 이미 잠겨 있기 때문에 p1 put이 작동하지 않아야하지만 HBase 0.94에서 작동하려고 시도했습니다.

행 잠금 링크 정보 행 잠금에 대해 본 위치 이해에 문제가 있습니까? 단일 행 트랜잭션 지원이 행 잠금으로 작동하는 방법이 아닌 경우.

해결법

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

    1.HBase가 작동하는 방식은 Puts가 적용될 때 행이 원자 블록으로 작성되도록 보장하지만 스냅 샷 격리를 제공하지 않는 경우 (클라이언트가 아닌) 리전 서버에 잠금이 유지되는 것입니다. 당신은 그것을 원합니다).

    HBase가 작동하는 방식은 Puts가 적용될 때 행이 원자 블록으로 작성되도록 보장하지만 스냅 샷 격리를 제공하지 않는 경우 (클라이언트가 아닌) 리전 서버에 잠금이 유지되는 것입니다. 당신은 그것을 원합니다).

    두 개의 풋이 동일한 클라이언트에서 전송되지 않은 경우 (이 경우 동일한 트랜잭션의 일부일 수 있음) HBase가 중단되거나 풋 사이의 어딘가에 시간 초과가 발생하지 않는 한 (압축으로 인해). 두 개의 풋은 HBase에 도착한 순서에 따라 순차적으로 적용됩니다.

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

    2.table.put (p) 명령을 실행할 때까지 행이 잠기지 않았다고 생각합니다. Put을 사용할 때 p = new Put ( "row key"); 쓰기에 대한 정보를 보유 할 오브젝트를 작성하고 있지만 실제로 데이터베이스와 아직 통신하지는 않습니다. 데이터베이스 쓰기를 시도 할 준비가되면 table.put (p)를 입력하십시오. 두 개의 put () 작업이 같은 행에서 동시에 발생하면 그 중 하나가 실패 할 수 있습니다. 그러나 잠금은 HBase 내에서 발생하고 외부에서 제어 할 수 없기 때문에 매우 오랫동안 행 잠금을 유지할 수 있다고 생각하지 않습니다. 따라서 프로세스는 다음과 같습니다.

    table.put (p) 명령을 실행할 때까지 행이 잠기지 않았다고 생각합니다. Put을 사용할 때 p = new Put ( "row key"); 쓰기에 대한 정보를 보유 할 오브젝트를 작성하고 있지만 실제로 데이터베이스와 아직 통신하지는 않습니다. 데이터베이스 쓰기를 시도 할 준비가되면 table.put (p)를 입력하십시오. 두 개의 put () 작업이 같은 행에서 동시에 발생하면 그 중 하나가 실패 할 수 있습니다. 그러나 잠금은 HBase 내에서 발생하고 외부에서 제어 할 수 없기 때문에 매우 오랫동안 행 잠금을 유지할 수 있다고 생각하지 않습니다. 따라서 프로세스는 다음과 같습니다.

    즉, 두 사람이 같은 행에 put ()을 보내려고하면 한 사람 만 성공하고 HBase는 다른 클라이언트에게 오류 메시지를 보냅니다.

    두 클라이언트가 같은 행 키를 동시에 put ()하려고한다고 가정하십시오.

    이전 질문의 IP 주소 및 로그인 시간 예에 따르면, 누군가 다른 IP 주소에서 동시에 두 번 로그인하면 하나의 IP 만 데이터베이스에 작성되지만 타임 스탬프는 작성된 IP와 일치합니다. .

    나는 이것을 완전히 이해하지 못할 수도 있지만 이것이 나의 현재 이해입니다. 도움이 되길 바랍니다.

  3. from https://stackoverflow.com/questions/14907762/row-locking-in-hbase-single-row-transaction-support by cc-by-sa and MIT license