1. 程式人生 > >Hbase與Mapreduce整合的案例

Hbase與Mapreduce整合的案例

【需求】將info列簇中的name這一列匯入到另外一張表中去

建表:
create 'test:stu_info','info','degree','work'
插入資料:6個rowkey 3個列簇
put 'test:stu_info','20170222_10001','degree:xueli','benke'
put 'test:stu_info','20170222_10001','info:age','18'
put 'test:stu_info','20170222_10001','info:sex','male'
put 'test:stu_info','20170222_10001','info:name','tom'
put 'test:stu_info','20170222_10001','work:job','bigdata'
put 'test:stu_info','20170222_10002','degree:xueli','gaozhong'
put 'test:stu_info','20170222_10002','info:age','22'
put 'test:stu_info','20170222_10002','info:sex','female'
put 'test:stu_info','20170222_10002','info:name','jack'
put 'test:stu_info','20170222_10003','info:age','22'
put 'test:stu_info','20170222_10003','info:name','leo'
put 'test:stu_info','20170222_10004','info:age','18'
put 'test:stu_info','20170222_10004','info:name','peter'
put 'test:stu_info','20170222_10005','info:age','19'
put 'test:stu_info','20170222_10005','info:name','jim'
put 'test:stu_info','20170222_10006','info:age','20'
put 'test:stu_info','20170222_10006','info:name','zhangsan'

create 't5' , {NAME=>'info'}

一個region就是一個maptask任務
在hadoop中的hadoop-env.sh檔案中新增相關的jar,進行整合依賴
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/moduels/hbase-0.98.6-hadoop2/lib/*

JAVA程式碼如下:

package com.bigdata.hadoop.mapreduce;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class TestDriver2 extends Configured implements Tool{

	public int run(String[] args) throws Exception {
		Configuration conf = this.getConf();
		Job job=Job.getInstance(conf,"mr-hbase2");
		job.setJarByClass(TestDriver2.class);     // class that contains mapper and reducer
		Scan scan = new Scan();
		// set other scan attrs
		TableMapReduceUtil.initTableMapperJob(
		  "test:stu_info",        // input table
		  scan,               // Scan instance to control CF and attribute selection
		  TestHbaseMap.class,     // mapper class
		  ImmutableBytesWritable.class,         // mapper output key
		  Put.class,  // mapper output value
		  job);
		TableMapReduceUtil.initTableReducerJob(
				  "test:info_name",        // output table
				  null,    // reducer class
				  job);
		job.setNumReduceTasks(1); 
		return job.waitForCompletion(true)? 0:1;
	}

	
	public static void main(String[] args) {

		Configuration conf=HBaseConfiguration.create();
		try {
			int status=ToolRunner.run(conf, new TestDriver2(), args);
			System.exit(status);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	
	

}
package com.bigdata.hadoop.mapreduce;

import java.io.IOException;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;

public class TestHbaseMap extends TableMapper<ImmutableBytesWritable, Put>{
	
	@Override
	protected void map(ImmutableBytesWritable key, Result value,Context context)
			throws IOException, InterruptedException {
		Put put=new Put(key.get());
		for(Cell cell:value.rawCells()){
			if("info".equals(Bytes.toString(CellUtil.cloneFamily(cell)))){
				//匹配info列簇的資料
				if("name".equals(Bytes.toString(CellUtil.cloneQualifier(cell)))){
					//匹配name列這列的資料
					put.add(cell);
				}
			}
		}
		
		context.write(key, put);
	}
}

打成jar包 mr-hbase.jar上傳linux

hbase目錄下執行如下程式碼
/opt/moduels/hadoop-2.5.0/bin/yarn jar /opt/datas/mr-hbase.jar

 20170222_10001                 column=info:name, timestamp=1497059738675, value=tom                                      
 20170222_10002                 column=info:name, timestamp=1497059738956, value=jack                                     
 20170222_10003                 column=info:name, timestamp=1497059739013, value=leo                                      
 20170222_10004                 column=info:name, timestamp=1497059739121, value=peter                                    
 20170222_10005                 column=info:name, timestamp=1497059739254, value=jim                                      
 20170222_10006                 column=info:name, timestamp=1497059740585, value=zhangsan 



 importtsv格式化匯入
Usage: importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
-》選項:-D表示指明某一個引數,key=value

-》將檔案上傳到HDFS

/opt/moduels/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex stu_info /test.tsv

-》如果不是預設的\t,就要在語句中指定輸入的分隔符
/opt/moduels/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar importtsv -Dimporttsv.separator=, -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex stu_info /test2.csv

第一步:轉換Hfile  ->其實就是storefile
/opt/moduels/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex    -Dimporttsv.bulk.output=/testHfile stu_info /test3.tsv
第二步:匯入hbase 這一步不是 mapreduce程式 把storefile檔案移動到 hbase對應表的目錄下
官網事例:/opt/moduels/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar completebulkload
usage: completebulkload /path/to/hfileoutputformat-output tablename
completebulkload

/opt/moduels/hadoop-2.5.0/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar completebulkload /testHfile stu_info


注:利用Sqoop可以實現將資料從關係型資料庫匯入到Hbase中

相關推薦

HbaseMapreduce整合案例

【需求】將info列簇中的name這一列匯入到另外一張表中去 建表: create 'test:stu_info','info','degree','work' 插入資料:6個rowkey 3個列簇 put 'test:stu_info','20170222_10001',

HBaseMapReduce整合操作

1、目的:將HBase中stu_info表中的name放到表user_info中 2、TestHbaseMapper: package com.zzw.hbase.mapreduce; import java.io.IOException; import org.apache.had

HBase權威指南學習記錄(五、hbaseMapReduce整合

新增依賴: <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifact

HBaseMapReduce整合2-Hdfs2HBase

 2)File中解析資料到HBase表中(import)  Hdfs2HBase 檔案格式的資料->HBase表中Mapreduce* input: hdfs files    Mapper:OutputKey/OutputValue* output: hbase t

HBase新版本MapReduce整合

1.MapReduce從hbase讀取資料 //讀取hbase表資料 public class HbaseAndMapReduce { public static void main(String[] args) throws Exception

FlumeKafka整合案例詳解

環境配置 名稱 版本 下載地址 Centos 7.0 64x 百度 Zookeeper 3.4.5 Flume 1.6.0 Kafka 2.1.0 配置Flu

hbaseflume整合程式設計

1、官網下載src包,解壓,需要匯入的——》flume-ng-sinks——》flume-ng-hbase-sink 2、編輯SimpleAsyncHbaseEventSerializer:複製一份重新命名為MySimpleAsyncHbaseEventSerializer

hbasemapreduce同時執行的問題

      在hbase資料寫入和mapreduce同時執行時出現hbase regionserver掛掉的問題,同時hdfs上的檔案塊出現miss。      目前看來mapreduce和hbase同時執行時出現的一個問題就是記憶體競爭,hbase的regionserver

HBaseHive的整合案例

1.案例需求 在 HBase 中已經儲存了某一張表hbase_hive,然後在Hive中建立一個外部表來關聯HBase中的hbase_hive這張表,使之可以藉助 Hive來分析 HBase 這張表中的資料,案例二是緊接著案例一進行的,所以在做案例二之前應該先進行案例一 2.在Hive中建立

HBaseHive的整合案例

1.Hive與HBase的對比    Hive     1)資料倉庫 Hive 的本質其實就相當於將 HDFS 中已經儲存的檔案在 Mysql 中做了一個雙射關係,以方便使用 HQL 去管理查詢     2)用於資料分析、清洗

基於LAMP php7.1搭建owncloud雲盤 ceph對象存儲S3借口整合案例

lamp owncloud ceph ownCloud簡介: 是一個來自 KDE 社區開發的免費軟件,提供私人的 Web 服務。當前主要功能包括文件管理(內建文件分享)、音樂、日歷、聯系人等等,可在PC和服務器上運行。 簡單來說就是一個基於Php的自建網盤。基本上是私人使用這樣,因為

spring bootjdbcTemplate的整合案例2

database bean n) ret struct mapping rri ott mode 簡單入門了spring boot後,接下來寫寫跟數據庫打交道的案例。博文采用spring的jdbcTemplate工具類與數據庫打交道。 下面是搭建的springbo

HBaseSqoop的整合

之前學習Sqoop的時候都是Hadoop,Hive和RDBMS之間進行資料的匯入與匯出,並沒有與HBase整合,下面就來講解HBase與Sqoop的整合 需求: 利用 Sqoop 在 HBase 和 RDBMS 中進行資料的轉儲,將 RDBMS(Mysql) 中的資料抽取到 HBase 中

HBase-Hive的區別、Sqoop的整合

1、HBase 與 Hive 的對比 Hive: 1)、資料倉庫 Hive 的本質其實就相當於將 HDFS 中已經儲存的檔案在 Mysql 中做了一個雙射關係,以方 便使用 HQL 去管理查詢。 2)、用於資料分析、清洗 Hive 適用於離線的資料分析和清洗,延遲較高。 3)

HBase建表高階屬性,hbase應用案例看行鍵設計,HBasemapreduce結合,從Hbase中讀取資料、分析,寫入hdfs,從hdfs中讀取資料寫入Hbase,協處理器和二級索引

1. Hbase高階應用 1.1建表高階屬性 下面幾個shell 命令在hbase操作中可以起到很到的作用,且主要體現在建表的過程中,看下面幾個create 屬性 1、 BLOOMFILTER 預設是NONE 是否使用布隆過慮及使用何種方式 布隆

hbasesolr的架構整合

大資料架構-使用HBase和Solr將儲存與索引放在不同的機器上 摘要:HBase可以通過協處理器Coprocessor的方式向Solr發出請求,Solr對於接收到的資料可以做相關的同步:增、刪、改索引的操作,這樣就可以同時使用HBase儲存量大和Solr檢索效能高的優

【Spark深入學習 -12】Spark程序設計企業級應用案例02

提升 算子 lin count() roi println groupby 工作問題 衍生 ----本節內容------- 1.遺留問題答疑 1.1 典型問題解答 1.2 知識點回顧 2.Spark編程基礎 2.1 Spark開發四部曲 2.2 RDD典型實例

Mybatis中Mapper代理形式開發spring整合

can sna 修改 jar xid oca pac user cal 1.導入jar包 2.分包 cogfig:存放配置文件 mapper:存放映射與接口 pojo:存放實體類 test:測試代碼 3.編寫配置文件 SqlMapConfig.xml <?

SpringMybatis整合

base package div classpath conf data pac 是否 ner 一 概述 1.整合的目的 將Mapper映射器的創建任務交給Spring容器。 二 具體實現 1.創建sqlSessionFactory: <bean id="sql

Atitit.angular.js 使用最佳實踐 原理常見問題解決列表顯示案例 attilax總結

依賴 實現 http dsi 概念 模板 style ctr net Atitit.angular.js 使用最佳實踐 原理與常見問題解決與列表顯示案例 attilax總結 1. 本文範圍 1 2. Angular的長處 1 2.1. 雙向數據綁定 1 2.2. d