2016-12-15 2 views
0

У меня есть куча небольших текстовых файлов (1KB до 1MB), хранящихся в Amazon S3, которые я хотел бы обработать с использованием Hadoop Amazon EMR.EMR Hadoop обрабатывает весь файл S3

Каждая запись, предоставленная картографу, должна содержать все содержимое текстового файла, а также способ определения имени файла, поэтому я не могу использовать TextInputFormat по умолчанию.

Каков наилучший способ для этого? Есть ли что-нибудь еще, что я могу сделать (например, копирование файлов с S3 в hdfs) для повышения производительности?

ответ

0

У меня была та же проблема. Пожалуйста, напишите следующие вопросы.

Если у вас нет каких-либо больших файлов, но есть много файлов, то достаточно использовать s3cmd get --recursive s3://<url> . команду. После извлечения файлов в экземпляр EMR вы можете создавать таблицы с помощью Hive. Например, вы можете загрузить целые файлы с помощью инструкции LOAD DATA с разделом.

образец

Это пример кода

#!/bin/bash 

s3cmd get --recursive s3://your.s3.name . 

# create table with partitions 
hive -e "SET mapred.input.dir.recursive=true; DROP TABLE IF EXISTS import_s3_data;" 
hive -e "CREATE TABLE import_s3_data(rawdata string) 
     PARTITIONED BY (tier1 string, tier2, string, tier3 string);" 

LOAD_SQL="" 

# collect files as array 
FILES=(`find . -name \*.txt -print`) 

for FILE in ${FILES[@]} 
do 
    DIR_INFO=(`echo ${FILE##./} | tr -s '/' ' '`) 
    T1=${DIR_INFO[0]} 
    T2=${DIR_INFO[1]} 
    T3=${DIR_INFO[2]} 
    LOAD_SQL="${LOAD_SQL} LOAD DATA LOCAL INPATH '${FILE}' INTO TABLE 
       import_s3_data PARTITION (tier1 = '${T1}', tier2 = '${T2}', tier3 = '${T3}');" 
done 
hive -e "${LOAD_SQL}" 

другой вариант

Я думаю, что есть некоторые еще варианты для извлечения небольших данных S3

  • S3DistCp ... он объединит небольшой файл как большой, чтобы иметь дело с Hadoop
  • Hive - External Tables ... он создаст внешнюю таблицу, ссылающуюся на хранилища s3. Тем не менее, он имеет почти такую ​​же производительность по сравнению с случаем использования s3cmd get. Это может быть более эффективным в таком случае, на S3 есть много больших файлов с сырым или gziped.
Смежные вопросы