2016-09-13 2 views
0

У меня есть таблица Hive X, которая имеет несколько файлов на HDFS. Местоположение таблицы X на HDFS есть/data/hive/X. Файлы:Spark HiveContext: Таблицы с несколькими файлами на HDFS

/data/hive/X/f1 
/data/hive/X/f2 
/data/hive/X/f3 ... 

Теперь, я бегу следующие команды:

df=hiveContext.sql("SELECT count(*) from X") 
df.show() 

Что происходит внутри? Каждый файл рассматривается как отдельный раздел и обрабатывается отдельным узлом, а затем результаты сопоставляются?

Если да, есть ли способ проинструктировать Spark, чтобы загрузить все файлы в 1 раздел, а затем обработать данные?

Заранее спасибо.

+0

Каков формат файлов, только CSV/TSV? Вы также можете открыть интерфейс Spark и взглянуть на визуализацию DAG. –

+0

Hi Fokko - это текстовые файлы, разделенные каналами. – user3031097

ответ

1

Spark свяжется с метафорой улья, чтобы выяснить (a) Расположение данных (b) Как читать данные. На низком уровне Spark получит входные разделители на основе входных форматов, используемых в улье для хранения данных. Как только Splits будут решены, Spark будет читать данные 1 split/partition. В Spark один физический узел может запускать один или несколько исполнителей. Каждый исполнитель будет иметь один или несколько разделов. Как только данные считываются в память, искра будет запускать счетчик, который будет (a) подсчитывать по локальной карте на карте (b) глобальный счет после тасования. то в результате он возвращается к драйверу.

+0

Это правильно. Но если это на HDFS, может быть, что один файл становится несколькими разделами. Это происходит только тогда, когда Hadoop может разделить файл. Это просто для линейных форматов, таких как CSV/TSV, но становится более сложным, когда используется сжатие (http://stackoverflow.com/questions/14820450/best-splittable-compression-for-hadoop-input-bz2). Эти расщепления выполняются на уровне размера блока HDFS, поэтому, если у вас есть файл размером 300 Мб, а размер блока HDFS установлен на 128, тогда вы получаете 3 блока по 128 МБ, 128 МБ и 44 МБ соответственно. –

+0

Спасибо Аян и Фокко. У файлов, которые у меня есть, есть небольшие файлы, поэтому он обязательно будет 1 файл/раздел. В любом случае, мы можем сказать Spark о переделке всех файлов на 1 раздел? – user3031097

+1

rdd.repartition (1) –