2017-02-08 8 views
0

У меня есть огромная база данных новостей, но всякий раз, когда я пытаюсь sqoop, он пишет 2-3 файлы, а не весь 200.SQOOP размер неравномерным выходного файла

sqoop import -D mapred.map.max.attempts=4 \ 
    -D dfs.blocksize=1073741824 \ 
    -D oraoop.block.allocation=RANDOM \ 
    -D mapred.job.queue.name=default \ 
    -m 200 \ 
    --split-by AUTHOR_ID \ 
    --connect jdbc:oracle:thin:@$127.0.0.1:1521:SRDB \ 
    --username abc \ 
    --password 1234 \ 
    --table L.ARTICLE \ 
    --null-string '' \ 
    --null-non-string '' \ 
    --target-dir /data/output1.0 
    --outdir /tmp/output 

Но, когда я побежал, Я получал 202 файла вместо 200. И среди этих только 3 файлов есть данные, а остальные выходные файлы пустые.

Что я делаю неправильно? Любой намек был бы оценен!

Спасибо

ответ

3

Вы распределяете на AUTHOR_ID

Наиболее вероятной причиной -

AUTHOR_ID(на котором вы расщепление) не распределены равномерно.

Внутренне sqoop выбирает минимальные и максимальные значения для разделения столбцов.

SELECT MIN(AUTHOR_ID) and MAX(AUTHOR_ID) FROM L.ARTICLE 

Say выход выше запроса:

1,20000 

Теперь на основе этих значений будет сделать диапазон запросов, как:

SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=1 AND AUTHOR_ID<100 
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=100 AND AUTHOR_ID<200 
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=200 AND AUTHOR_ID<300 
. 
. 
. 
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=19900 AND AUTHOR_ID<20000 

(Вы можете наблюдать это в самой sqoop команды . Добавьте --verbose в свои команды sqoop, чтобы вы могли видеть расширенные журналы.)

Теперь, если данные распределены неравномерно, тогда только несколько карт получат запись, а другие пустые.

Скажем, например, если в ваших данных мы имеем следующий случай:

author_id record 
1 record1 
19900 record19900 
19901 record19901 
19902 record19902 
19903 record19903 
19904 record19904 
19905 record19905 
19906 record19906 

Преобразователь # 0 будет sqoop 1 запись и картографа # 199 будет sqoop 7 записей. Вы можете экстраполировать этот случай с огромным количеством записей.

+0

Большое вам спасибо! Очень приятно писать. – Gon

+0

В этом случае, как я могу убедиться, что тот же AUTHOR_ID не будет находиться в нескольких файлах? – Gon

+0

@ Пойдем, я не понял. Каждый файл создается некоторым запросом диапазона на AUTHOR_ID, и каждый запрос отличается, поэтому в разных файлах будет отличаться AUTHOR_ID. –

 Смежные вопросы

  • Нет связанных вопросов^_^