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()+"\n"); System.out.println("执行了啊--标题"+article.getTitle()+"\n"); System.out.println("执行了啊--作者"+article.getAuthor()+"\n"); System.out.println("执行了啊--描述"+article.getDescribe()+"\n"); System.out.println("执行了啊--正文"+article.getContent()+"\n"); } 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())+"\t"+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+"\t"+this.title+"\t"+this.author+"\t"+this.describe+"\t"+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("\t"); 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()+"\n"); System.out.println("执行了啊--标题"+oo.getTitle()+"\n"); System.out.println("执行了啊--作者"+oo.getAuthor()+"\n"); System.out.println("执行了啊--描述"+oo.getDescribe()+"\n"); System.out.println("执行了啊--正文"+oo.getContent()+"\n"); 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更好了。