나는 돌연변이 대를 사용하는 데이터 로딩 방법에 대해 토론 할 수있는 토론이 시작되기를 바랍니다. 'LOAD DATA INFILE'을 통해 플랫 파일을 사용하여로드.HyperTable : 뮤 테이터 Vs. LOAD DATA INFILE
(배치 크기 = 1000 또는 10000 또는 100K 등을 사용하여) 뮤 테이터를 사용하여 엄청난 성능 향상을 얻지 못했습니다.
내 프로젝트에는 실시간 분석을 위해 HyperTable에 4 억 행의 소셜 미디어 데이터를로드하는 작업이 포함되었습니다. 1 백만 행의 데이터 만로드하는 데 3 일이 걸렸습니다 (아래 코드 샘플). 각 행은 약 32 바이트입니다. 그래서 2-3 주 동안 많은 데이터를로드하는 것을 피하기 위해 행이있는 플랫 파일을 준비하고 DATA LOAD INFILE 메서드를 사용했습니다. 성능 향상은 놀랍습니다. 이 방법을 사용하여 로딩 속도는 368336 세포/초이었다.
See below for actual snapshot of action:
hypertable> LOAD DATA INFILE "/data/tmp/users.dat" INTO TABLE users;
Loading 7,113,154,337 bytes of input data...
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Load complete.
Elapsed time: 508.07 s
Avg key size: 8.92 bytes
Total cells: 218976067
Throughput: 430998.80 cells/s
Resends: 2210404
hypertable> LOAD DATA INFILE "/data/tmp/graph.dat" INTO TABLE graph;
Loading 12,693,476,187 bytes of input data...
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
Load complete.
Elapsed time: 1189.71 s
Avg key size: 17.48 bytes
Total cells: 437952134
Throughput: 368118.13 cells/s
Resends: 1483209
이유는 두 방법 사이의 성능 차이가 너무 광대인가? 뮤 테이터 성능을 향상시키는 가장 좋은 방법은 무엇입니까? 샘플 뮤 테이터 코드는 다음과 같습니다.
my $batch_size = 1000000; # or 1000 or 10000 make no substantial difference
my $ignore_unknown_cfs = 2;
my $ht = new Hypertable::ThriftClient($master, $port);
my $ns = $ht->namespace_open($namespace);
my $users_mutator = $ht->mutator_open($ns, 'users', $ignore_unknown_cfs, 10);
my $graph_mutator = $ht->mutator_open($ns, 'graph', $ignore_unknown_cfs, 10);
my $keys = new Hypertable::ThriftGen::Key({ row => $row, column_family => $cf, column_qualifier => $cq });
my $cell = new Hypertable::ThriftGen::Cell({key => $keys, value => $val});
$ht->mutator_set_cell($mutator, $cell);
$ht->mutator_flush($mutator);
이 입력에 감사드립니다. 엄청난 양의 HyperTable 경험이 없습니다.
감사합니다.
\ Doug - 추천대로 mutator_set_cells() 또는 mutator_set_cells_as_arrays()를 사용하려고했지만이 오류가 발생합니다. ./lib/Hypertable/ThriftGen/ClientService.pm의 ARRAY 참조가 아닙니다. 나는 확실하다, 유형 또는 논쟁은 원인이다. 나는 계속 노력할 것입니다. 그러나 당신은 그것이 버그 일 수 있다고 생각합니다. 저에게 알려주십시오. 덕. 고마워. 정말 감사합니다. – NullException
일단 플러시를 제거하면 일괄 삽입에서 엄청난 성능 향상을 달성 할 수있었습니다. 이후로는 수백만 행 (각 ~ 32 바이트)을 얻었으므로 해당 컴퓨터의 RAM을 기반으로 1 백만 개의 그룹으로 배치했습니다. 대답을 수락합니다. – NullException