我正在使用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