
Alex
16.10.2018
04:18:02
свежий хадуп только в сдх6, да и то не 3.1 а 3.0
плюс на нем уже нарвались на несколько багов =\
ну и еще минусы: норм поддержка докера на хадупе в cdh так и не сделали
поэтому что будет с дистрами хзхз =)

Akceptor
16.10.2018
06:36:36
когда я в спарке делаю create temporary view? оно в какой БД деляет его? Точно не default, т.как потом ругается на Table or view not found: default.table1539671279988

Stanislav
16.10.2018
06:56:34
Ни в какой

Google

Stanislav
16.10.2018
06:56:56
Если хочешь выйти за пределы сессии, задай глобальный темп вью

Andrey
16.10.2018
07:02:27

Akceptor
16.10.2018
07:02:57
ок, спс

Иван
16.10.2018
07:21:20

Akceptor
16.10.2018
07:22:23

Pavel
16.10.2018
08:08:24
День добрый. Есть ли у кого опыт поднятия kafka connect?

Сергей
16.10.2018
09:56:14

Pavel
16.10.2018
09:56:39
@proKafka
Спасибо! Я там уже спросил и там уже ответили)

Сергей
16.10.2018
09:58:00
Моя очередь спрашивать) Подскажите, пожалуйста, в спарке 1.6 есть возможность писать в паркет?

Daria
16.10.2018
09:58:36
df.write.parquet

Alex
16.10.2018
09:59:11
да, паркет поддерживается где-то 1.3 если не изменяет память
клоудеровский 1.6 точно умеет это все делать

Daria
16.10.2018
10:00:35
если в табличку -

Google

Daria
16.10.2018
10:00:39
df.write.mode(SaveMode.Overwrite).format("parquet").saveAsTable("tab1")
df - собственно ваш DataFrame

Сергей
16.10.2018
10:01:03
Вот у меня и задачка как раз про это. В cdh 5.13 укладывать записи из базы в паркет. Пока только написал hello World)
В доках 1.6 про паркет не нашёл ничего пока.

Daria
16.10.2018
10:02:16
Посмотрите внимательнее- оно там есть
https://spark.apache.org/docs/1.6.1/sql-programming-guide.html#hive-metastore-parquet-table-conversion

Сергей
16.10.2018
10:02:57
Мне ещё нужно размером файлов управлять, чтобы по возможности сразу укладываться в хадупный размер блока

Stanislav
16.10.2018
10:05:02

Сергей
16.10.2018
10:06:36
Или напутал?

Alex
16.10.2018
10:10:20
в идеале да, в этом случае у тебя все может оказаться локально в пределах одной машинки
один таск-одинблок-однамашинка
если паркет блок будет больше хдфсного то там сетевой трафик может еще вылезти
но я бы пока на твоем месте сразу попытался решить задачу сразу
а потом уже занимался оптимизациями

Stanislav
16.10.2018
10:12:38
И по умолчанию разве не будет использоваться стандартная настройка из параметров хдфс?

Alex
16.10.2018
10:15:46
смотри, для тебя как потребителя файл это один сплошной поток
для hdfs это набор кусков (те же кластера на hdd)
когда скедулер решает куда закидывать задачу он уточняет где лежит указанная часть файла и пытается кинуть его на ту же машинку
в итоге тот же спарк екзекутор запрашивает через hdfs клиент у datanode нужный файл и получает по shortpath целиком файловый дескриптор (если данные на одной ноде) и читает очень быстро
если у тебя файл состоит из 2х блоков
то один блок ты еще локально прочитаешь, а второй уже будешь запрашивать с другой ноды по сети

Сергей
16.10.2018
10:15:49

Alex
16.10.2018
10:15:51
это если совсем грубо

Daria
16.10.2018
10:16:22

Google

Сергей
16.10.2018
10:16:49

Daria
16.10.2018
10:17:11
вопрос скорее а надо ли ?

Alex
16.10.2018
10:17:31
@barloc в одном случае у тебя чистый ио с файловым дескриптором, во втором работа с сетью, что может быть не очень хорошо

Stanislav
16.10.2018
10:18:23

Alex
16.10.2018
10:18:39
почему в минусы?

Stanislav
16.10.2018
10:18:43
Тем не менее, размер блока не влияет на локальность

Сергей
16.10.2018
10:19:22

Alex
16.10.2018
10:19:54
скедулер пытается добиться локальности, но конечно не гарантирует
в случае если у тебя файл разбит на 2 равных блока ты 100% локальность почти никогда и не получишь
по мне хадуп и хдфс с самого начала это было про локальность данных
спарк тоже вкладывается много в локальность данных, будь то hbase, es, kafka
везде пытаются минимизировать трафик между машинками в коннекторах спарка
Short Circuit Local Reads On HDFS спецом для этого и разрабатывали =) чтобы минимизировать доп прослойки
но чтобы его утилизировать нужна локальность “this is only possible in cases where the client is co-located with the data.”

Daria
16.10.2018
10:23:10

Stanislav
16.10.2018
10:25:08
Смотри какая штука про локальность без ссд
Есть у тебя в сервере 8-12 дисков сата 7200, которые могут 70-100 иопс каждый

Alex
16.10.2018
10:26:57
@barloc
задачи у всех один =) быстро читать-писать
это без локальности не будет зачастую
для тебя это прозрачно полностью, ты работаешь с hdfs client который тебе инпут стрим возращает
весь Short Circuit Local Reads проходит внутри него под капотом

Сергей
16.10.2018
10:27:15
Уверен, что есть более красивый способ.

Stanislav
16.10.2018
10:28:08
У хбейза очень мощный кеш и сериализация

Google


Alex
16.10.2018
10:32:50
ну давай представим что у тебя таблица из 100 файлов по 1ГБ и блоком на хдфс в 1ГБ
дальше есть 100 машинок
предположим что задачи разлетелись равномерно и локалити сработало
дальше каждая с локального диска подняла по дескриптору, прочитала, выполнила и послала в драйвер результаты
(вернее подымет датанода, но вернет тебе дескриптор и ты прозрачно с него читать будешь, не зная ничего в самом спарке)
теперь вторая ситуация:
ну давай представим что у тебя таблица из 100 файлов по 1ГБ и блоком на хдфс в 128МБ (файл получается состоит из 8 блоков)
дальше есть 100 машинок
то есть локальности ты можешь добиться только на первых 100 блоков, остальные 700 блоков должны гнаться по сети
это
1) нагрузка на datanode (она должна прочитать данные с диска, закинуть в память, сериализовать, отдать по сети клиенту). мы все знаем что тут начинается еще давление на gc в датаноде + количество хэндлеров на работу тоже не безлимитно
2) нагрузка на сеть, когда все начинают ломиться ко всем
вопрос: какая из двух ситуаций отработает быстрее
когда с паркетом работаешь зачастую это линейный скан страницы/чанка


Stanislav
16.10.2018
10:44:52
Интересный пример
А что будет при изменении данных в файле, полная перезапись?
С синхронизацией по всем репликам?

Alex
16.10.2018
10:46:06
а разве хдфс поддерживает изменения файлов?
только дозапись

Grigory
16.10.2018
10:48:41

Alex
16.10.2018
10:48:56
нету такого
файл immutable

Grigory
16.10.2018
10:49:15
я про это и говорю, читается мап файл, меняется, трется, записывается

Alex
16.10.2018
10:49:15
писать в середину нельзя, CoW hdfs тоже не поддерживает
и тут без разницы какой у тебя размер блока

Nikita Blagodarnyy
16.10.2018
10:49:55

Stanislav
16.10.2018
10:52:05
Ок. Тогда второй вопрос - у тебя уже прям чоткая законченная таблица в 100 гигабайт, точно распределённая по 100 серверам. Но мы же знаем, что так не бывает. Данные растут, постоянно выдерживать распределение?
Ну и ещё вопрос к файловой системе опреционки

Alex
16.10.2018
10:53:13
да, данные новые это новые файлы, пускай появляются, но желательно тоже одинарными блоками

Stanislav
16.10.2018
10:53:23
Размер 128 мегабайт - понимается, что ты на диске получишь линейную запись и чтение
Прям начиная с железки - потом ос - потом хдфс
Что будет с фрагментацией при 1 гбайте?

Google

Stanislav
16.10.2018
10:54:09
На железном уровне разброс записи куда попало?

Alex
16.10.2018
10:56:43
размер хдфс блока важен для самой hdfs и информирует когда нужно делать отсечку и начинать писать в другой блок
все понимают что 100ГБ одним блоком не записать, нужно как-то делить
для ос один hdfs блок это один файл,
hdfs держит набор dirs в пределах датаноды и пытается как-то выровнять их загрузку, но правило “1 блок hdfs = 1 файл на файловой системе” сохраняется
если ты пишешь линейно файл, то и ос постарается на железе заалоцировать это линейно

Sergey
16.10.2018
10:57:06
а давайте еще рассмотрим разные варианты с parquet.block.size ,

Alex
16.10.2018
10:57:08
но мы все понимаем, что никто гарантий не даст
parquet.block.size - в принципе это размер страйпа внутри паркет файла =) но выравнивать еще и их и держать выровненными по hdfs блоку намного сложнее

Stanislav
16.10.2018
10:58:55

Sergey
16.10.2018
10:59:39

Alex
16.10.2018
11:00:12
для hdfs клиент не знает ничего про диски под ними =)
хдфс не всегда имеет одинаковые ноды
в кластере может быть как говно по 1тб, так и 12тб
и на момент создания файла не всегда ты это знаешь, сколько же зальешь

Stanislav
16.10.2018
11:01:46

Sergey
16.10.2018
11:01:51

Alex
16.10.2018
11:02:30
если у тебя 100гбит сетка, везде ссд и датаноды кастомные (тот же мапр заявляет более шуструю работу их аналога hdfs), то может тебе и не нужно заботиться о локалити
во всех остальных нужно

Stanislav
16.10.2018
11:04:23
Ты очень критично смотришь на все, но вся система построена на компромиссах

Alex
16.10.2018
11:05:00
просто я видел как из-за кривой локалити загибались датаноды и сеть =)

Stanislav
16.10.2018
11:05:01
И размер блока тоже
В ситуации фрагментации файловой системы сервера твой 1 гигабайт будет раскидан по жёсткому диску в разных местах. В итоге для его чтения потребуется не 1 операция чтения, а допустим тысяча