Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Forever310
druid
提交
36fc8573
D
druid
项目概览
Forever310
/
druid
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
druid
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
36fc8573
编写于
7月 08, 2014
作者:
N
nishantmonu51
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add ShardSpec Lookup
Optimize choosing shardSpec for Hash Partitions
上级
b8347cf4
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
110 addition
and
17 deletion
+110
-17
indexing-hadoop/src/main/java/io/druid/indexer/HadoopDruidIndexerConfig.java
.../main/java/io/druid/indexer/HadoopDruidIndexerConfig.java
+39
-17
server/src/main/java/io/druid/timeline/partition/HashBasedNumberedShardSpec.java
.../druid/timeline/partition/HashBasedNumberedShardSpec.java
+20
-0
server/src/main/java/io/druid/timeline/partition/LinearShardSpec.java
...ain/java/io/druid/timeline/partition/LinearShardSpec.java
+16
-0
server/src/main/java/io/druid/timeline/partition/NumberedShardSpec.java
...n/java/io/druid/timeline/partition/NumberedShardSpec.java
+16
-0
server/src/main/java/io/druid/timeline/partition/SingleDimensionShardSpec.java
...io/druid/timeline/partition/SingleDimensionShardSpec.java
+19
-0
未找到文件。
indexing-hadoop/src/main/java/io/druid/indexer/HadoopDruidIndexerConfig.java
浏览文件 @
36fc8573
...
@@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
...
@@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.api.client.util.Maps
;
import
com.google.common.base.Function
;
import
com.google.common.base.Function
;
import
com.google.common.base.Joiner
;
import
com.google.common.base.Joiner
;
import
com.google.common.base.Optional
;
import
com.google.common.base.Optional
;
...
@@ -30,6 +31,7 @@ import com.google.common.base.Preconditions;
...
@@ -30,6 +31,7 @@ import com.google.common.base.Preconditions;
import
com.google.common.base.Splitter
;
import
com.google.common.base.Splitter
;
import
com.google.common.base.Throwables
;
import
com.google.common.base.Throwables
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.Lists
;
import
com.google.inject.Binder
;
import
com.google.inject.Binder
;
import
com.google.inject.Injector
;
import
com.google.inject.Injector
;
import
com.google.inject.Key
;
import
com.google.inject.Key
;
...
@@ -51,6 +53,7 @@ import io.druid.segment.indexing.granularity.GranularitySpec;
...
@@ -51,6 +53,7 @@ import io.druid.segment.indexing.granularity.GranularitySpec;
import
io.druid.server.DruidNode
;
import
io.druid.server.DruidNode
;
import
io.druid.timeline.DataSegment
;
import
io.druid.timeline.DataSegment
;
import
io.druid.timeline.partition.ShardSpec
;
import
io.druid.timeline.partition.ShardSpec
;
import
io.druid.timeline.partition.ShardSpecLookup
;
import
org.apache.hadoop.conf.Configuration
;
import
org.apache.hadoop.conf.Configuration
;
import
org.apache.hadoop.fs.FileSystem
;
import
org.apache.hadoop.fs.FileSystem
;
import
org.apache.hadoop.fs.Path
;
import
org.apache.hadoop.fs.Path
;
...
@@ -60,6 +63,7 @@ import org.joda.time.DateTime;
...
@@ -60,6 +63,7 @@ import org.joda.time.DateTime;
import
org.joda.time.Interval
;
import
org.joda.time.Interval
;
import
org.joda.time.format.ISODateTimeFormat
;
import
org.joda.time.format.ISODateTimeFormat
;
import
javax.annotation.Nullable
;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.nio.charset.Charset
;
import
java.nio.charset.Charset
;
...
@@ -169,6 +173,8 @@ public class HadoopDruidIndexerConfig
...
@@ -169,6 +173,8 @@ public class HadoopDruidIndexerConfig
private
volatile
HadoopIngestionSpec
schema
;
private
volatile
HadoopIngestionSpec
schema
;
private
volatile
PathSpec
pathSpec
;
private
volatile
PathSpec
pathSpec
;
private
volatile
ColumnConfig
columnConfig
;
private
volatile
ColumnConfig
columnConfig
;
private
volatile
Map
<
DateTime
,
ShardSpecLookup
>
shardSpecLookups
=
Maps
.
newHashMap
();
private
volatile
Map
<
ShardSpec
,
HadoopyShardSpec
>
hadoopShardSpecLookup
=
Maps
.
newHashMap
();
@JsonCreator
@JsonCreator
public
HadoopDruidIndexerConfig
(
public
HadoopDruidIndexerConfig
(
...
@@ -178,6 +184,30 @@ public class HadoopDruidIndexerConfig
...
@@ -178,6 +184,30 @@ public class HadoopDruidIndexerConfig
this
.
columnConfig
=
columnConfig
;
this
.
columnConfig
=
columnConfig
;
this
.
schema
=
schema
;
this
.
schema
=
schema
;
this
.
pathSpec
=
jsonMapper
.
convertValue
(
schema
.
getIOConfig
().
getPathSpec
(),
PathSpec
.
class
);
this
.
pathSpec
=
jsonMapper
.
convertValue
(
schema
.
getIOConfig
().
getPathSpec
(),
PathSpec
.
class
);
for
(
Map
.
Entry
<
DateTime
,
List
<
HadoopyShardSpec
>>
entry
:
schema
.
getTuningConfig
().
getShardSpecs
().
entrySet
())
{
if
(
entry
.
getValue
()
==
null
||
entry
.
getValue
().
isEmpty
())
{
continue
;
}
final
ShardSpec
actualSpec
=
entry
.
getValue
().
get
(
0
).
getActualSpec
();
shardSpecLookups
.
put
(
entry
.
getKey
(),
actualSpec
.
getLookup
(
Lists
.
transform
(
entry
.
getValue
(),
new
Function
<
HadoopyShardSpec
,
ShardSpec
>()
{
@Nullable
@Override
public
ShardSpec
apply
(
@Nullable
HadoopyShardSpec
input
)
{
return
input
.
getActualSpec
();
}
}
)
)
);
for
(
HadoopyShardSpec
hadoopyShardSpec
:
entry
.
getValue
())
{
hadoopShardSpecLookup
.
put
(
hadoopyShardSpec
.
getActualSpec
(),
hadoopyShardSpec
);
}
}
}
}
@JsonProperty
@JsonProperty
...
@@ -306,14 +336,9 @@ public class HadoopDruidIndexerConfig
...
@@ -306,14 +336,9 @@ public class HadoopDruidIndexerConfig
return
Optional
.
absent
();
return
Optional
.
absent
();
}
}
final
List
<
HadoopyShardSpec
>
shards
=
schema
.
getTuningConfig
().
getShardSpecs
().
get
(
timeBucket
.
get
().
getStart
());
final
ShardSpec
actualSpec
=
shardSpecLookups
.
get
(
timeBucket
.
get
().
getStart
()).
getShardSpec
(
inputRow
);
if
(
shards
==
null
||
shards
.
isEmpty
())
{
final
HadoopyShardSpec
hadoopyShardSpec
=
hadoopShardSpecLookup
.
get
(
actualSpec
);
return
Optional
.
absent
();
}
for
(
final
HadoopyShardSpec
hadoopyShardSpec
:
shards
)
{
final
ShardSpec
actualSpec
=
hadoopyShardSpec
.
getActualSpec
();
if
(
actualSpec
.
isInChunk
(
inputRow
))
{
return
Optional
.
of
(
return
Optional
.
of
(
new
Bucket
(
new
Bucket
(
hadoopyShardSpec
.
getShardNum
(),
hadoopyShardSpec
.
getShardNum
(),
...
@@ -321,10 +346,7 @@ public class HadoopDruidIndexerConfig
...
@@ -321,10 +346,7 @@ public class HadoopDruidIndexerConfig
actualSpec
.
getPartitionNum
()
actualSpec
.
getPartitionNum
()
)
)
);
);
}
}
throw
new
ISE
(
"row[%s] doesn't fit in any shard[%s]"
,
inputRow
,
shards
);
}
}
public
Optional
<
Set
<
Interval
>>
getSegmentGranularIntervals
()
public
Optional
<
Set
<
Interval
>>
getSegmentGranularIntervals
()
...
...
server/src/main/java/io/druid/timeline/partition/HashBasedNumberedShardSpec.java
浏览文件 @
36fc8573
...
@@ -25,12 +25,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
...
@@ -25,12 +25,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.api.client.repackaged.com.google.common.base.Throwables
;
import
com.google.api.client.repackaged.com.google.common.base.Throwables
;
import
com.google.common.collect.ImmutableMap
;
import
com.google.common.hash.HashFunction
;
import
com.google.common.hash.HashFunction
;
import
com.google.common.hash.Hashing
;
import
com.google.common.hash.Hashing
;
import
io.druid.data.input.InputRow
;
import
io.druid.data.input.InputRow
;
import
io.druid.data.input.Rows
;
import
io.druid.data.input.Rows
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
public
class
HashBasedNumberedShardSpec
extends
NumberedShardSpec
public
class
HashBasedNumberedShardSpec
extends
NumberedShardSpec
{
{
...
@@ -74,4 +76,22 @@ public class HashBasedNumberedShardSpec extends NumberedShardSpec
...
@@ -74,4 +76,22 @@ public class HashBasedNumberedShardSpec extends NumberedShardSpec
'}'
;
'}'
;
}
}
@Override
public
ShardSpecLookup
getLookup
(
final
List
<
ShardSpec
>
shardSpecs
)
{
final
ImmutableMap
.
Builder
<
Integer
,
ShardSpec
>
shardSpecsMapBuilder
=
ImmutableMap
.
builder
();
for
(
ShardSpec
spec
:
shardSpecs
)
{
shardSpecsMapBuilder
.
put
(
spec
.
getPartitionNum
(),
spec
);
}
final
Map
<
Integer
,
ShardSpec
>
shardSpecMap
=
shardSpecsMapBuilder
.
build
();
return
new
ShardSpecLookup
()
{
@Override
public
ShardSpec
getShardSpec
(
InputRow
row
)
{
return
shardSpecMap
.
get
((
long
)
hash
(
row
)
%
getPartitions
());
}
};
}
}
}
\ No newline at end of file
server/src/main/java/io/druid/timeline/partition/LinearShardSpec.java
浏览文件 @
36fc8573
...
@@ -24,6 +24,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
...
@@ -24,6 +24,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import
com.google.common.base.Preconditions
;
import
com.google.common.base.Preconditions
;
import
io.druid.data.input.InputRow
;
import
io.druid.data.input.InputRow
;
import
java.util.List
;
import
java.util.Set
;
public
class
LinearShardSpec
implements
ShardSpec
public
class
LinearShardSpec
implements
ShardSpec
{
{
private
int
partitionNum
;
private
int
partitionNum
;
...
@@ -42,6 +45,19 @@ public class LinearShardSpec implements ShardSpec
...
@@ -42,6 +45,19 @@ public class LinearShardSpec implements ShardSpec
return
partitionNum
;
return
partitionNum
;
}
}
@Override
public
ShardSpecLookup
getLookup
(
final
List
<
ShardSpec
>
shardSpecs
)
{
return
new
ShardSpecLookup
()
{
@Override
public
ShardSpec
getShardSpec
(
InputRow
row
)
{
return
shardSpecs
.
get
(
0
);
}
};
}
@Override
@Override
public
<
T
>
PartitionChunk
<
T
>
createChunk
(
T
obj
)
{
public
<
T
>
PartitionChunk
<
T
>
createChunk
(
T
obj
)
{
return
new
LinearPartitionChunk
<
T
>(
partitionNum
,
obj
);
return
new
LinearPartitionChunk
<
T
>(
partitionNum
,
obj
);
...
...
server/src/main/java/io/druid/timeline/partition/NumberedShardSpec.java
浏览文件 @
36fc8573
...
@@ -25,6 +25,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
...
@@ -25,6 +25,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import
com.google.common.base.Preconditions
;
import
com.google.common.base.Preconditions
;
import
io.druid.data.input.InputRow
;
import
io.druid.data.input.InputRow
;
import
java.util.List
;
import
java.util.Set
;
public
class
NumberedShardSpec
implements
ShardSpec
public
class
NumberedShardSpec
implements
ShardSpec
{
{
@JsonIgnore
@JsonIgnore
...
@@ -52,6 +55,19 @@ public class NumberedShardSpec implements ShardSpec
...
@@ -52,6 +55,19 @@ public class NumberedShardSpec implements ShardSpec
return
partitionNum
;
return
partitionNum
;
}
}
@Override
public
ShardSpecLookup
getLookup
(
final
List
<
ShardSpec
>
shardSpecs
)
{
return
new
ShardSpecLookup
()
{
@Override
public
ShardSpec
getShardSpec
(
InputRow
row
)
{
return
shardSpecs
.
get
(
0
);
}
};
}
@JsonProperty
(
"partitions"
)
@JsonProperty
(
"partitions"
)
public
int
getPartitions
()
public
int
getPartitions
()
{
{
...
...
server/src/main/java/io/druid/timeline/partition/SingleDimensionShardSpec.java
浏览文件 @
36fc8573
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
package
io.druid.timeline.partition
;
package
io.druid.timeline.partition
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.metamx.common.ISE
;
import
io.druid.data.input.InputRow
;
import
io.druid.data.input.InputRow
;
import
java.util.List
;
import
java.util.List
;
...
@@ -94,6 +95,24 @@ public class SingleDimensionShardSpec implements ShardSpec
...
@@ -94,6 +95,24 @@ public class SingleDimensionShardSpec implements ShardSpec
return
partitionNum
;
return
partitionNum
;
}
}
@Override
public
ShardSpecLookup
getLookup
(
final
List
<
ShardSpec
>
shardSpecs
)
{
return
new
ShardSpecLookup
()
{
@Override
public
ShardSpec
getShardSpec
(
InputRow
row
)
{
for
(
ShardSpec
spec
:
shardSpecs
)
{
if
(
spec
.
isInChunk
(
row
))
{
return
spec
;
}
}
throw
new
ISE
(
"row[%s] doesn't fit in any shard[%s]"
,
row
,
shardSpecs
);
}
};
}
public
void
setPartitionNum
(
int
partitionNum
)
public
void
setPartitionNum
(
int
partitionNum
)
{
{
this
.
partitionNum
=
partitionNum
;
this
.
partitionNum
=
partitionNum
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录