Apache Drill в контейнере Docker: java.net.BindException: адрес уже используется
Я использую Apache Drill для преобразования данных CSV в паркет.
Я хочу сделать это распределенным способом, поэтому я раскручиваю контейнер Docker, запускаю код, подобный приведенному ниже, для преобразования в CSV.
Когда я запускаю один экземпляр за раз, это работает хорошо. Но когда я раскручиваю несколько контейнеров одновременно, операция часто завершается неудачно с этой трассировкой стека:
Error: Failure in starting embedded Drillbit: java.net.BindException: Address already in use (state=,code=0)
java.sql.SQLException: Failure in starting embedded Drillbit: java.net.BindException: Address already in use
at org.apache.drill.jdbc.impl.DrillConnectionImpl.<init>(DrillConnectionImpl.java:131)
at org.apache.drill.jdbc.impl.DrillJdbc41Factory.newDrillConnection(DrillJdbc41Factory.java:72)...
Я не знаю много о Drill - я не использовал его ни для чего до этого. Я понял, что несколько экземпляров Drill не могут работать одновременно, но эти контейнеры Docker не должны знать друг о друге.
Общее у них то, что они пишут в общую (общую) выходную папку. Но каждое имя файла уникально.
Может кто-нибудь пролить некоторый свет на это?
Есть ли параметры конфигурации, на которые я должен обратить внимание?
Код, который я запускаю, похож на этот:
alter session set `store.format`='parquet';
CREATE TABLE dfs.tmp.`/fp9gr34f/parquet_tmp_output` AS
SELECT
CASE when columns[0]='source_file' or columns[0]='' then CAST(NULL AS VARCHAR(100)) else CAST(columns[0] as VARCHAR(100)) end as `source_file`,
CASE when columns[1]='column1' or columns[1]='' then CAST(NULL AS INT) else CAST(columns[1] as INT) end as `msg_command`,
CASE when columns[2]='column2' or columns[2]='' then CAST(NULL AS INT) else CAST(columns[2] as INT) end as `msg_length`
FROM dfs.`/path/to/my/file.csv`
OFFSET 1