IT技术互动交流平台

Jsp显示HBase的数据

来源:IT165收集  发布日期:2015-06-01 21:35:49

Jsp显示HBase的数据

 

软件:

Jdk1.7、eclipse ee、vmware安装好的CentOs6.5、Hadoop-2.6.0、HBase-0.99.2

 

 

1、建一个普通的动态Web程序,用导jar包运行,不用maven和ant。

 

2、把HBase和Hadoop的相应的jar包导进工程中;

主要是运行HBase API,把指定表名和行键的内容读出来。

并添加 log4j.properties 文件。

 

3、创建一个servlet类,并创建jsp文件,把HBase的lib里的jar包拷进web的/web_ceshi2/WebContent/WEB-INF/lib 里面去。

 

项目目录结构:

 

代码:

Output_HBase.java:

 

package control;

import java.io.IOException;

import model.Article;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;



@SuppressWarnings("deprecation")
public class Output_HBase {
	
	HBaseAdmin admin=null;
	Configuration conf=null;
	/**
	 * 构造函数加载配置
	 */
	public Output_HBase(){
		conf = new Configuration();
		conf.set("hbase.zookeeper.quorum", "192.168.1.200:2181");
		conf.set("hbase.rootdir", "hdfs://192.168.1.200:9000/hbase");
		System.out.println("初始化完毕");
		try {
			admin = new HBaseAdmin(conf);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		Output_HBase o=new Output_HBase();
		o.get("article", "1");
	}
	public  Article  get(String tableName, String row) {
		System.out.println("get执行了1");
		@SuppressWarnings("resource")
		HTablePool hTablePool = new HTablePool(conf, 1000);
		HTableInterface table = hTablePool.getTable(tableName);
		System.out.println("get执行了2");
		Get get = new Get(row.getBytes());
		System.out.println("get执行了3");
		Article article = null;
		try {
			System.out.println("get执行了4");
			Result result = table.get(get);
			System.out.println("get执行了5");
			KeyValue[] raw = result.raw();
			System.out.println("get执行了6");
			if (raw.length == 5) {
				System.out.println("get执行了7");
				article = new Article();
				article.setId(new String(raw[3].getValue())); 
				article.setTitle(new String(raw[4].getValue()));
				article.setAuthor(new String(raw[0].getValue()));
				article.setDescribe(new String(raw[2].getValue()));
				article.setContent(new String(raw[1].getValue()));
			}
			//new Start(article.getId(), article.getTitle(), article.getAuthor(), article.getDescribe(), article.getContent());
			System.out.println("执行了啊--ID"+article.getId()+"
");
			System.out.println("执行了啊--标题"+article.getTitle()+"
");
			System.out.println("执行了啊--作者"+article.getAuthor()+"
");
			System.out.println("执行了啊--描述"+article.getDescribe()+"
");
			System.out.println("执行了啊--正文"+article.getContent()+"
");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return article;
	}
	
	/**
	 * 获取表的所有数据
	 * @param tableName
	 */
	public void getALLData(String tableName) {
		try {
			@SuppressWarnings("resource")
			HTable hTable = new HTable(conf, tableName);
			Scan scan = new Scan();
			ResultScanner scanner = hTable.getScanner(scan);
			for (Result result : scanner) {
				if(result.raw().length==0){
					System.out.println(tableName+" 表数据为空!");
				}else{
					for (KeyValue kv: result.raw()){
						System.out.println(new String(kv.getKey())+"	"+new String(kv.getValue()));
					}
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}


 

OutPrx.java:

 

package control;

import model.Article;

public class OutPrx {
	private String id;
	private String title;
	private String author;
	private String describe;
	private String content;
	
	public OutPrx() {
		
	}

	public void get(){
		System.out.println("这里这行了1");
		Output_HBase out1=new Output_HBase();
		System.out.println("这里这行了2");
		Article article=out1.get("article", "520");
		
		System.out.println("这里这行了3");
		this.id=article.getId();
		this.title=article.getTitle();
		this.author=article.getAuthor();
		this.describe=article.getDescribe();
		this.content=article.getContent();
	
		System.out.println("这里这行了4");
		
	}
	
	
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getDescribe() {
		return describe;
	}

	public void setDescribe(String describe) {
		this.describe = describe;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
	
}


 

Article:

 

package model;

public class Article {
	private String id;
	private String title;
	private String describe;
	private String content;
	private String author;
	
	public Article(){
		
	}
	
	public Article(String id,String title,String describe,String content,String author){
		this.id=id;
		this.title=title;
		this.describe=describe;
		this.content=content;
		this.author=author;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getDescribe() {
		return describe;
	}
	public void setDescribe(String describe) {
		this.describe = describe;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	
	public String toString(){
		return this.id+"	"+this.title+"	"+this.author+"	"+this.describe+"	"+this.content;
	}
}


 

 

(这个类跟显示无关,可以忽略)

Import_HBase:

 

package control;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;

public class Import_HBase {
	public static class MyMapper extends Mapper<LongWritable, Text, LongWritable, Text>{
		@Override
		protected void map(LongWritable key, Text value,
				Mapper<LongWritable, Text, LongWritable, Text>.Context context)
				throws IOException, InterruptedException {
			//设置行键+内容
			context.write(key, value);
		}
	}
	
	public static class MyReduce extends TableReducer<LongWritable, Text, NullWritable>{
		private String family="info";
		@Override
		protected void reduce(LongWritable arg0, Iterable<Text> v2s,
				Reducer<LongWritable, Text, NullWritable, Mutation>.Context context)
				throws IOException, InterruptedException {
			for (Text value : v2s) {
				String line=value.toString();
				String[] splited=line.split("	");
				String rowkey=splited[0];
				Put put = new Put(rowkey.getBytes());
				put.add(family.getBytes(), "id".getBytes(), splited[0].getBytes());
				put.add(family.getBytes(), "title".getBytes(), splited[1].getBytes());
				put.add(family.getBytes(), "author".getBytes(), splited[2].getBytes());
				put.add(family.getBytes(), "describe".getBytes(), splited[3].getBytes());
				put.add(family.getBytes(), "content".getBytes(), splited[4].getBytes());
				context.write(NullWritable.get(), put);
			}
			
		}
	}
	
	private static String tableName="article";
	@SuppressWarnings("deprecation")
	public static void main(String[] args) throws Exception {
		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.rootdir", "hdfs://192.168.1.200:9000/hbase");
		conf.set("hbase.zookeeper.quorum", "192.168.1.200:2181");
		conf.set(TableOutputFormat.OUTPUT_TABLE, tableName);
		
		Job job = new Job(conf, Import_HBase.class.getSimpleName());
		TableMapReduceUtil.addDependencyJars(job);
		job.setJarByClass(Import_HBase.class);
		
		job.setMapperClass(MyMapper.class);
		job.setReducerClass(MyReduce.class);
		
		job.setMapOutputKeyClass(LongWritable.class);
		job.setMapOutputValueClass(Text.class);
		
		job.setInputFormatClass(TextInputFormat.class);
		job.setOutputFormatClass(TableOutputFormat.class);
		
		FileInputFormat.setInputPaths(job, "hdfs://192.168.1.200:9000/hbase_solr");
		
		job.waitForCompletion(true);
	}
}


 

 

HttpServlet:

 

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet; 

import control.OutPrx;
/**
 * Servlet implementation class Test
 */
@WebServlet("/Test")
public class Test extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Test() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		OutPrx oo=new OutPrx();
		oo.get();
		
        request.setAttribute("id",oo.getId());//存值
        request.setAttribute("title",oo.getTitle());//存值
        request.setAttribute("author",oo.getAuthor());//存值
        request.setAttribute("describe",oo.getDescribe());//存值
        request.setAttribute("content",oo.getContent());//存值
      
        System.out.println("====================================================================================");
        System.out.println("执行了啊--ID"+oo.getId()+"
");
		System.out.println("执行了啊--标题"+oo.getTitle()+"
");
		System.out.println("执行了啊--作者"+oo.getAuthor()+"
");
		System.out.println("执行了啊--描述"+oo.getDescribe()+"
");
		System.out.println("执行了啊--正文"+oo.getContent()+"
");
        request.getRequestDispatcher("/hello.jsp").forward(request,response);
        
        System.out.println("-----------------------------------------------------------------------------");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

 

log4j.properties:

 

### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=DEBUG,stdout,file

## Disable other log  
#log4j.logger.org.springframework=OFF  
#log4j.logger.org.apache.struts2=OFF  
#log4j.logger.com.opensymphony.xwork2=OFF  
#log4j.logger.com.ibatis=OFF  
#log4j.logger.org.hibernate=OFF

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=logs/spider_web.log
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n



### direct messages to file mylog.log ###
log4j.logger.cn.superwu.crm.service=INFO, ServerDailyRollingFile
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.ServerDailyRollingFile.File=logs/biapp-service.log 
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd 
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss } -[%r]-[%p] %m%n

#log4j.logger.cn.superwu.crm.service.DrmService=INFO, ServerDailyRollingFile
#log4j.appender.drm=org.apache.log4j.RollingFileAppender
#log4j.appender.drm.File=logs/crm-drm.log
#log4j.appender.drm.MaxFileSize=10000KB
#log4j.appender.drm.MaxBackupIndex=10
#log4j.appender.drm.Append=true
#log4j.appender.drm.layout=org.apache.log4j.PatternLayout
#log4j.appender.drm.layout.ConversionPattern=[start]%d{yyyy/MM/dd/ HH:mm:ss}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
#log4j.appender.drm.layout.ConversionPattern=[%5p]%d{yyyy-MM-dd HH:mm:ss}[%c](%F:%L)%n%m%n%n





 

hello.jsp:

 

<pre name="code" class="java"><%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% String id = (String)request.getAttribute("id");%>
<% String title = (String)request.getAttribute("title");%>
<% String author = (String)request.getAttribute("author");%>
<% String describe = (String)request.getAttribute("describe");%>
<% String content = (String)request.getAttribute("content");%>


<%="文章ID为:"+id %> <br><br>
<%="文章标题为:"+title %> <br><br>
<%="文章作者为:"+author %> <br><br>
<%="文章描述为:"+describe %> <br><br>
<%="文章正文为:"+content %> <br><br>
</body>
</html>


 


 

右键servlet类运行就可以了,运行界面如下:

Eclipse 显示的整个界面:

 

Eclipse显示的web界面:

 

 

Eclipse显示的项目工程界面:

 

在网页显示的界面:

 

 

查看HBase的数据:

 

查看HBase表结构:

 

 

运行Web程序之前,必须确保Hadoop和HBase是开启的:

如果加载有错误,可以重新创建一个项目。

例如:@WebServlet("/Test")

还有显示提示找不到什么类的等错误,先自己重新创建个项目运行。

创建了还不好使,在具体情况具体分析。

这个纯属自己自娱自乐,当然用maven更好了,用springmvc更好了。

Tag标签: 数据  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规