Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Forever310
druid
提交
b85c54d8
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,发现更多精彩内容 >>
提交
b85c54d8
编写于
11月 28, 2012
作者:
E
Eric Tschetter
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of github.com:metamx/druid
上级
4de6ef50
5902ccd0
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
76 addition
and
13 deletion
+76
-13
merger/src/main/java/com/metamx/druid/merger/common/index/YeOldePlumberSchool.java
...metamx/druid/merger/common/index/YeOldePlumberSchool.java
+2
-0
merger/src/main/java/com/metamx/druid/merger/common/task/IndexGeneratorTask.java
...m/metamx/druid/merger/common/task/IndexGeneratorTask.java
+11
-0
server/src/main/java/com/metamx/druid/master/DruidMasterSegmentMerger.java
...ava/com/metamx/druid/master/DruidMasterSegmentMerger.java
+13
-13
server/src/test/java/com/metamx/druid/master/DruidMasterSegmentMergerTest.java
...com/metamx/druid/master/DruidMasterSegmentMergerTest.java
+50
-0
未找到文件。
merger/src/main/java/com/metamx/druid/merger/common/index/YeOldePlumberSchool.java
浏览文件 @
b85c54d8
...
...
@@ -81,10 +81,12 @@ public class YeOldePlumberSchool implements PlumberSchool
// There can be only one.
final
Sink
theSink
=
new
Sink
(
interval
,
schema
);
// Temporary directory to hold spilled segments.
final
File
persistDir
=
new
File
(
tmpSegmentDir
,
theSink
.
getSegment
().
withVersion
(
version
).
getIdentifier
()
);
// Set of spilled segments. Will be merged at the end.
final
Set
<
File
>
spilled
=
Sets
.
newHashSet
();
return
new
Plumber
()
...
...
merger/src/main/java/com/metamx/druid/merger/common/task/IndexGeneratorTask.java
浏览文件 @
b85c54d8
...
...
@@ -163,6 +163,17 @@ public class IndexGeneratorTask extends AbstractTask
plumber
.
persist
(
firehose
.
commit
());
plumber
.
finishJob
();
// Output metrics
log
.
info
(
"Task[%s] took in %,d rows (%,d processed, %,d unparseable, %,d thrown away) and output %,d rows"
,
getId
(),
metrics
.
processed
()
+
metrics
.
unparseable
()
+
metrics
.
thrownAway
(),
metrics
.
processed
(),
metrics
.
unparseable
(),
metrics
.
thrownAway
(),
metrics
.
rowOutput
()
);
// Done
return
TaskStatus
.
success
(
getId
(),
ImmutableList
.
copyOf
(
pushedSegments
));
}
...
...
server/src/main/java/com/metamx/druid/master/DruidMasterSegmentMerger.java
浏览文件 @
b85c54d8
...
...
@@ -108,16 +108,16 @@ public class DruidMasterSegmentMerger implements DruidMasterHelper
segmentsToMerge
.
add
(
timelineObjects
.
get
(
i
));
if
(
segmentsToMerge
.
get
MergedSize
()
>
params
.
getMergeBytesLimit
()
||
segmentsToMerge
.
size
()
>=
params
.
getMergeSegmentsLimit
())
if
(
segmentsToMerge
.
get
ByteCount
()
>
params
.
getMergeBytesLimit
()
||
segmentsToMerge
.
getSegmentCount
()
>=
params
.
getMergeSegmentsLimit
())
{
i
-=
segmentsToMerge
.
backtrack
(
params
.
getMergeBytesLimit
());
if
(
segmentsToMerge
.
size
()
>
1
)
{
if
(
segmentsToMerge
.
getSegmentCount
()
>
1
)
{
count
+=
mergeSegments
(
segmentsToMerge
,
entry
.
getKey
());
}
if
(
segmentsToMerge
.
size
()
==
0
)
{
if
(
segmentsToMerge
.
getSegmentCount
()
==
0
)
{
// Backtracked all the way to zero. Increment by one so we continue to make progress.
i
++;
}
...
...
@@ -128,7 +128,7 @@ public class DruidMasterSegmentMerger implements DruidMasterHelper
// Finish any timelineObjects to merge that may have not hit threshold
segmentsToMerge
.
backtrack
(
params
.
getMergeBytesLimit
());
if
(
segmentsToMerge
.
size
()
>
1
)
{
if
(
segmentsToMerge
.
getSegmentCount
()
>
1
)
{
count
+=
mergeSegments
(
segmentsToMerge
,
entry
.
getKey
());
}
}
...
...
@@ -182,13 +182,13 @@ public class DruidMasterSegmentMerger implements DruidMasterHelper
// (timeline object, union interval of underlying segments up to this point in the list)
private
final
List
<
Pair
<
TimelineObjectHolder
<
String
,
DataSegment
>,
Interval
>>
timelineObjects
;
private
long
mergedSize
;
private
long
byteCount
;
private
SegmentsToMerge
()
{
this
.
timelineObjects
=
Lists
.
newArrayList
();
this
.
segments
=
HashMultiset
.
create
();
this
.
mergedSize
=
0
;
this
.
byteCount
=
0
;
}
public
List
<
DataSegment
>
getSegments
()
...
...
@@ -233,7 +233,7 @@ public class DruidMasterSegmentMerger implements DruidMasterHelper
for
(
final
PartitionChunk
<
DataSegment
>
segment
:
timelineObject
.
getObject
())
{
segments
.
add
(
segment
.
getObject
());
if
(
segments
.
count
(
segment
.
getObject
())
==
1
)
{
mergedSize
+=
segment
.
getObject
().
getSize
();
byteCount
+=
segment
.
getObject
().
getSize
();
}
}
...
...
@@ -275,12 +275,12 @@ public class DruidMasterSegmentMerger implements DruidMasterHelper
}
}
public
long
get
MergedSize
()
public
long
get
ByteCount
()
{
return
mergedSize
;
return
byteCount
;
}
public
int
size
()
public
int
getSegmentCount
()
{
return
timelineObjects
.
size
();
}
...
...
@@ -303,14 +303,14 @@ public class DruidMasterSegmentMerger implements DruidMasterHelper
Preconditions
.
checkArgument
(
maxSize
>=
0
,
"maxSize >= 0"
);
int
removed
=
0
;
while
(!
isComplete
()
||
mergedSize
>
maxSize
)
{
while
(!
isComplete
()
||
byteCount
>
maxSize
)
{
removed
++;
final
TimelineObjectHolder
<
String
,
DataSegment
>
removedHolder
=
timelineObjects
.
remove
(
timelineObjects
.
size
()
-
1
).
lhs
;
for
(
final
PartitionChunk
<
DataSegment
>
segment
:
removedHolder
.
getObject
())
{
segments
.
remove
(
segment
.
getObject
());
if
(
segments
.
count
(
segment
.
getObject
())
==
0
)
{
mergedSize
-=
segment
.
getObject
().
getSize
();
byteCount
-=
segment
.
getObject
().
getSize
();
}
}
}
...
...
server/src/test/java/com/metamx/druid/master/DruidMasterSegmentMergerTest.java
浏览文件 @
b85c54d8
...
...
@@ -101,6 +101,22 @@ public class DruidMasterSegmentMergerTest
);
}
@Test
public
void
testMergeNoncontiguous
()
{
final
List
<
DataSegment
>
segments
=
ImmutableList
.
of
(
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-01/P1D"
)).
version
(
"2"
).
size
(
10
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-03/P1D"
)).
version
(
"2"
).
size
(
10
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-04/P1D"
)).
version
(
"2"
).
size
(
10
).
build
()
);
Assert
.
assertEquals
(
ImmutableList
.
of
(
ImmutableList
.
of
(
segments
.
get
(
0
),
segments
.
get
(
1
),
segments
.
get
(
2
))
),
merge
(
segments
)
);
}
@Test
public
void
testMergeSeriesByteLimited
()
{
...
...
@@ -176,6 +192,40 @@ public class DruidMasterSegmentMergerTest
);
}
@Test
public
void
testOverlappingMergeWithGapsAlignedStart
()
{
final
List
<
DataSegment
>
segments
=
ImmutableList
.
of
(
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-01/P8D"
)).
version
(
"2"
).
size
(
80
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-01/P1D"
)).
version
(
"3"
).
size
(
8
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-04/P1D"
)).
version
(
"3"
).
size
(
8
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-09/P1D"
)).
version
(
"3"
).
size
(
8
).
build
()
);
Assert
.
assertEquals
(
ImmutableList
.
of
(
ImmutableList
.
of
(
segments
.
get
(
1
),
segments
.
get
(
0
),
segments
.
get
(
2
))
),
merge
(
segments
)
);
}
@Test
public
void
testOverlappingMergeWithGapsNonalignedStart
()
{
final
List
<
DataSegment
>
segments
=
ImmutableList
.
of
(
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-01/P8D"
)).
version
(
"2"
).
size
(
80
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-02/P1D"
)).
version
(
"3"
).
size
(
8
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-04/P1D"
)).
version
(
"3"
).
size
(
8
).
build
(),
DataSegment
.
builder
().
dataSource
(
"foo"
).
interval
(
new
Interval
(
"2012-01-09/P1D"
)).
version
(
"3"
).
size
(
8
).
build
()
);
Assert
.
assertEquals
(
ImmutableList
.
of
(
ImmutableList
.
of
(
segments
.
get
(
0
),
segments
.
get
(
1
),
segments
.
get
(
2
))
),
merge
(
segments
)
);
}
@Test
public
void
testOverlappingMerge1
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录