Mapreduce 从HBase提取数据的最快方法是什么
我在HBase中有大约5TB的数据分布在30个不同的表中。 我的用例是,基于每个表中的两个特定列,即年份和国家,我必须创建5K个不同的文本文件。 为此,我集成了HIVE和HBase,但从HIVE中提取需要很长时间。 我必须在10小时内完成这项工作。 寻找你的想法如何实现这一点。 关于这一点,我有一些问题Mapreduce 从HBase提取数据的最快方法是什么,mapreduce,hive,hbase,impala,phoenix,Mapreduce,Hive,Hbase,Impala,Phoenix,我在HBase中有大约5TB的数据分布在30个不同的表中。 我的用例是,基于每个表中的两个特定列,即年份和国家,我必须创建5K个不同的文本文件。 为此,我集成了HIVE和HBase,但从HIVE中提取需要很长时间。 我必须在10小时内完成这项工作。 寻找你的想法如何实现这一点。 关于这一点,我有一些问题 HIVE HBase集成是好方法吗 使用mapreduce从HBase提取数据是个好主意吗 我不能使用ApachePhoenix,因为它没有与HBase一起发布 黑斑羚也使用高内存,所以我的集群
我在HBase中的数据如下
���U"9����|Japan|2012 48433172245 1001371402 FundamentalSeries NULL NULL 139 238474518 1.65494205533344 Price2SFCFLPsr NULL False 3011645 1000190205 False True I Japan 2012
C��t�I�\���7|ThirdPartyPrivate|2009 48934711562 1001371402 FundamentalSeries NULL NULL 9 5631268 21.2315827835749 STCA_PoP NULL False 3011645 1000193170 False True I ThirdPartyPrivate 2009
�����^Z4Ga�|Japan|2013 48433158708 1001371402 FundamentalSeries NULL NULL 507 160531379 1.1248E10 STAX_TTM 500186 False 3011646 1000193168 False False I Japan 2013
G\�=�HO�S�|Japan|2008 48433173983 1001371402 FundamentalSeries NULL NULL 153 1961706488 0.500256556630127 RIBEIT_TTM NULL False 3011646 1000193016 False False I Japan 2008
�G��G�i0�]|Japan|2012 48433336633 1001371402 FundamentalSeries NULL NULL 894 3112047463 14.3904580667924 Ev2SEBIT_Avg5 NULL False 3011645 1000190030 False True I Japan 2012
���r����/8|Japan|2015 48433251137 1001371402 FundamentalSeries NULL NULL 200 2907364871 -46.9431625157866 SNOPA_YoY NULL False 3011646 1000423629 False False I Japan 2015
�)H�<�����t|Japan|2008 48433139729 1001371402 FundamentalSeries NULL NULL 1170 2604636883 0.267980759053007 PPE2ANOA NULL False 3011646 1001262486 False False I Japan 2008
'H�&�g���|Japan|2005 48433195827 1001371402 FundamentalSeries NULL NULL 147 450289107 0.540110660915134 Ev2SEBIT NULL False 3011645 1000190028 False True I Japan 2005
c�\��17ɟ�|Japan|2013 48433160145 1001371402 FundamentalSeries NULL NULL 885 2010667500 -19.6553084635268 SAMI_TTM_YoY NULL False 3011646 1000190297 False False I Japan 2013
j���}��||Japan|2010 48433159175 1001371402 FundamentalSeries NULL NULL 214 420693538 -17.3468681844827 SCOR_YoY NULL False 3011646 1000192789 False False I Japan 2010
���U“9����|日本| 2012 48433172245 1001371402基础系列空值139 238474518 1.65494205533344价格2SFCFLPSR空值假值3011645 1000190205假值日本2012
C��T�我�\���7 |第三方私人| 2009 48934711562 1001371402基础系列空值9 5631268 21.2315827835749 STCA|U PoP空值假值3011645 1000193170假值我第三方私人2009
�����^Z4Ga�|日本| 2013 48433158708 1001371402基础系列空空507 160531379 1.1248E10 STAX|U TTM 500186假301646 1000193168假假日本2013
G\�=�总公司�s�|日本| 2008 48433173983 1001371402基础系列空值1531961706488 0.500256556630127 RIBEIT_TTM空值假值301646 1000193016假值假值日本2008
�G��G�i0�]|日本| 2012 48433336633 1001371402基础系列空值894 3112047463 14.3904580667924 Ev2SEBIT_Avg5空值假值301645 1000190030假值真值日本2012
���R����/8 |日本| 2015 48433251137 1001371402基础系列空值200 2907364871-46.9431625157866 SNOPA|YOU空值假值301646 1000423629假值假值假值假值日本2015
�)H� 选项1:请注意,配置单元hbase集成和查询配置单元也将在幕后使用mapreduce
但是您对hive执行的mapreduce没有细粒度控制
选项3:您还排除了选项3,即您提到的凤凰城
选项4:黑斑羚更快,但你有一定的限制。所以排除了
选项2:根据我使用hbase的经验,我将提供使用mapreduce从hbase提取数据的功能。即,您的选项2将对作业的执行提供更精确的控制
但在这种方法中,你也必须调整你的工作
scan.setCaching(500);
scan.setCacheBlocks(false);
- 最重要的是,您必须设计rowkey以避免并使用高效过滤器(例如
FuzzyRowFilter
),以确保快速访问
- 尽量避免使用列值过滤器,以确保不发生完全表扫描
- 请注意,表的区域数等于为该特定作业启动的映射程序数。因此,请将表预拆分为某个范围(例如0-9),以便所有行都位于这些特定区域下(当然,它可以进一步拆分为多个区域,但如果确保区域数量较少,因此所有映射者都可以获得足够数量的记录进行处理,则这是一种方法…)
如果我理解正确。您希望生成多个序列文件
请查看使用MultipleOutput的使用模式
是的,实际上它很有用。我正在实施它。我有一个疑问,我必须根据键中的扫描过滤器创建不同的文本文件。我怎么做?我也用实现更新了我的问题。我知道你正在尝试根据扫描结果创建序列文件。你想做什么?你能给我一些建议吗示例数据?我已经更新了我的行。在第一列中是我的行键。我有130个区域,还没有聚光灯。根据当年行键中的最后两个元素和文件ie Japan/ThirdParty,我必须创建文本文件。FuzzyRowFilter
当您在行键。在本例中,Fixedpart为Japan,后跟year或ThirdParty,后跟year。变量部分剩余。我知道您正在基于rowfilter进行扫描。关于上述检查链接。
scan.setCaching(500);
scan.setCacheBlocks(false);
Job job = new Job();
FileInputFormat.setInputPath(job, inDir);
FileOutputFormat.setOutputPath(job, outDir);
job.setMapperClass(MOMap.class);
job.setReducerClass(MOReduce.class);
...
// Defines additional single text based output 'text' for the job
MultipleOutputs.addNamedOutput(job, "text", TextOutputFormat.class,
LongWritable.class, Text.class);
// Defines additional sequence-file based output 'sequence' for the job
MultipleOutputs.addNamedOutput(job, "seq",
SequenceFileOutputFormat.class,
LongWritable.class, Text.class);
...
job.waitForCompletion(true);
...