From a822ae172ab69a7a603887b39d0bd6c873df6d28 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Fri, 12 Oct 2012 11:26:49 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20flowchart=EC=9D=98=20traceIndex=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B5=9C=EC=A0=81=ED=99=94=20120ms?= =?UTF-8?q?=EC=97=90=EC=84=9C=2017ms=EC=A0=95=EB=8F=84=EB=A1=9C=20?= =?UTF-8?q?=EC=84=B1=EB=8A=A5=ED=96=A5=EC=83=81=EC=9D=B4=20=EC=9E=88?= =?UTF-8?q?=EB=8A=94=EA=B2=83=EC=9C=BC=EB=A1=9C=20=EB=B3=B4=EC=9E=84.=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B5=9C=EC=A0=81=ED=99=94=EA=B0=80=20?= =?UTF-8?q?=EC=95=84=EB=8B=88=EB=9D=BC=20cache=20size=EB=95=8C=EB=AC=B8?= =?UTF-8?q?=EC=97=90=20=EA=B7=B8=EB=9F=B4=EC=88=98=EB=8F=84=20=EC=9E=88?= =?UTF-8?q?=EC=9D=8C.=20hbasetemplate2=EC=97=90=20multi=20scan=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20api=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-commons/trunk@783 84d0f5b1-2673-498c-a247-62c4ff18d310 --- pom.xml | 36 ++++++++++++++++- .../common/hbase/HbaseOperations2.java | 6 +++ .../profiler/common/hbase/HbaseTemplate2.java | 26 +++++++++++- .../hbase/RowMapperResultsExtractor.java | 40 +++++++++++++++++++ .../com/profiler/common/util/BytesUtils.java | 14 +++++++ .../profiler/common/util/BytesUtilsTest.java | 7 ++++ 6 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java diff --git a/pom.xml b/pom.xml index bb243c9aa..99e7c8fbf 100644 --- a/pom.xml +++ b/pom.xml @@ -260,6 +260,40 @@ + + + org.codehaus.jackson + jackson-core-asl + 1.9.9 + true + + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.9 + true + + + + + org.codehaus.jackson + jackson-xc + 1.9.9 + true + + + + + org.codehaus.jackson + jackson-jaxrs + 1.9.9 + true + + + + org.slf4j @@ -283,7 +317,7 @@ test - + junit junit diff --git a/src/main/java/com/profiler/common/hbase/HbaseOperations2.java b/src/main/java/com/profiler/common/hbase/HbaseOperations2.java index 1665d2f07..569d99fe2 100644 --- a/src/main/java/com/profiler/common/hbase/HbaseOperations2.java +++ b/src/main/java/com/profiler/common/hbase/HbaseOperations2.java @@ -3,7 +3,9 @@ package com.profiler.common.hbase; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Put; +import org.apache.hadoop.hbase.client.Scan; import org.springframework.data.hadoop.hbase.HbaseOperations; +import org.springframework.data.hadoop.hbase.ResultsExtractor; import org.springframework.data.hadoop.hbase.RowMapper; import java.util.List; @@ -63,4 +65,8 @@ public interface HbaseOperations2 extends HbaseOperations { void delete(String tableName, final Delete delete); void delete(String tableName, final List deletes); + + List find(String tableName, final List scans, final ResultsExtractor action); + + List> find(String tableName, final List scans, final RowMapper action); } diff --git a/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java b/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java index 22fc83404..3d408d97f 100644 --- a/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java +++ b/src/main/java/com/profiler/common/hbase/HbaseTemplate2.java @@ -2,6 +2,7 @@ package com.profiler.common.hbase; import org.apache.hadoop.hbase.client.*; import org.springframework.data.hadoop.hbase.HbaseTemplate; +import org.springframework.data.hadoop.hbase.ResultsExtractor; import org.springframework.data.hadoop.hbase.RowMapper; import org.springframework.data.hadoop.hbase.TableCallback; @@ -12,7 +13,6 @@ import java.util.List; * */ public class HbaseTemplate2 extends HbaseTemplate implements HbaseOperations2 { -// private HTablePool tablePool; @Override public T get(String tableName, byte[] rowName, RowMapper mapper) { @@ -145,4 +145,28 @@ public class HbaseTemplate2 extends HbaseTemplate implements HbaseOperations2 { }); } + @Override + public List find(String tableName, final List scans, final ResultsExtractor action) { + return execute(tableName, new TableCallback>() { + @Override + public List doInTable(HTable htable) throws Throwable { + List result = new ArrayList(scans.size()); + for (Scan scan : scans) { + ResultScanner scanner = htable.getScanner(scan); + try { + T t = action.extractData(scanner); + result.add(t); + } finally { + scanner.close(); + } + } + return result; + } + }); + } + + @Override + public List> find(String tableName, List scans, RowMapper action) { + return find(tableName, scans, new RowMapperResultsExtractor(action)); + } } diff --git a/src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java b/src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java new file mode 100644 index 000000000..f0d2a7e0c --- /dev/null +++ b/src/main/java/com/profiler/common/hbase/RowMapperResultsExtractor.java @@ -0,0 +1,40 @@ +package com.profiler.common.hbase; + +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.ResultScanner; +import org.springframework.data.hadoop.hbase.ResultsExtractor; +import org.springframework.data.hadoop.hbase.RowMapper; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; + +/** + * spring꺼가 package라서 그냥 복사해옴. + * Adapter encapsulating the RowMapper callback. + * + * @author Costin Leau + */ +class RowMapperResultsExtractor implements ResultsExtractor> { + + private final RowMapper rowMapper; + + /** + * Create a new RowMapperResultSetExtractor. + * + * @param rowMapper the RowMapper which creates an object for each row + */ + public RowMapperResultsExtractor(RowMapper rowMapper) { + Assert.notNull(rowMapper, "RowMapper is required"); + this.rowMapper = rowMapper; + } + + public List extractData(ResultScanner results) throws Exception { + List rs = new ArrayList(); + int rowNum = 0; + for (Result result : results) { + rs.add(this.rowMapper.mapRow(result, rowNum++)); + } + return rs; + } +} diff --git a/src/main/java/com/profiler/common/util/BytesUtils.java b/src/main/java/com/profiler/common/util/BytesUtils.java index fe15660fe..74c625678 100644 --- a/src/main/java/com/profiler/common/util/BytesUtils.java +++ b/src/main/java/com/profiler/common/util/BytesUtils.java @@ -1,6 +1,8 @@ package com.profiler.common.util; +import org.apache.hadoop.hbase.util.Bytes; + public class BytesUtils { public static byte[] longLongToBytes(long value1, long value2) { @@ -132,4 +134,16 @@ public class BytesUtils { buf[14] = (byte) (value >> 8); buf[15] = (byte) (value); } + + public static byte[] add(String prefix, long postfix) { + byte[] agentByte = Bytes.toBytes(prefix); + return add(agentByte, postfix); + } + + public static byte[] add(byte[] preFix, long fostfix) { + byte[] buf = new byte[preFix.length + 8]; + System.arraycopy(preFix, 0, buf, 0, preFix.length); + writeLong(fostfix, buf, preFix.length); + return buf; + } } diff --git a/src/test/java/com/profiler/common/util/BytesUtilsTest.java b/src/test/java/com/profiler/common/util/BytesUtilsTest.java index 6febeac84..b7b5b229f 100644 --- a/src/test/java/com/profiler/common/util/BytesUtilsTest.java +++ b/src/test/java/com/profiler/common/util/BytesUtilsTest.java @@ -41,4 +41,11 @@ public class BytesUtilsTest { BytesUtils.writeLong(least, bBytes, 8); Assert.assertArrayEquals(add, bBytes); } + + @Test + public void testAddStringLong() throws Exception { + byte[] testAgents = BytesUtils.add("testAgent", 11L); + byte[] buf = Bytes.add(Bytes.toBytes("testAgent"), Bytes.toBytes(11L)); + Assert.assertArrayEquals(testAgents, buf); + } }