温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
Fayson的github:https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
Fayson在前面的文章中介绍了《如何在CDH中使用Solr对HDFS中的JSON数据建立全文索引》和《如何使用Flume准实时建立Solr的全文索引》,假如我们有大量的文本文件,我们应该如何保存到Hadoop中,并实现文本文件的全文检索呢。为了介绍如何对文本文件进行全文检索,本文会先介绍如何使用HBase保存文本文件。虽然HDFS中也可以直接保存这种非结构化数据,但是我们知道像这种文本文件,一般都是10KB~1MB的小文件,因为HDFS并不擅长存储大量小文件,所以这里选择HBase来保存。
- 内容概述
1.文件处理流程
2.准备上传文件的Java代码
3.运行代码
4.Hue中查询验证
- 测试环境
1.RedHat7.4
2.CM5.14.3
3.CDH5.14.2
4.集群未启用Kerberos
2.文件处理流程
1.如上图所示,Fayson先在本地准备了一堆记事本文件,有中文内容的,英文内容的,有中文名的,也有英文名的。
中文内容示例
英文内容示例
2.然后通过Java程序遍历本地的文件夹所有文本文件入库到HBase,在入库过程中,我们读取文本文件的文件名作为Rowkey,另外将整个文本内容转为bytes存储在HBase表的一个column里。
3.最后可以通过Hue来进行查看文本文件的内容,当然你也可以考虑对接到你自己的查询系统。
3.准备上传文件的Java代码
1.首先是准备Maven文件
代码语言:javascript复制<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cloudera</groupId>
<artifactId>hbase-exmaple</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hbase-exmaple</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<name>Cloudera Repositories</name>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0-cdh5.14.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0-cdh5.14.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
(可左右滑动)
2.准备上传文件到HBase的Java代码
代码语言:javascript复制package com.cloudera;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.SequenceFile;
public class Text2HBase {
// 本地linux磁盘输出路径
static String inpath = "C:\Users\17534\Desktop\full-text-index";
static String outpath = "";
static SequenceFile.Writer writer = null;
static HTable htable = null;
public static void main(String[] args) throws Exception {
// inpath = args[0];
// outpath = args[1];
// String zklist = args[2];
// HBase入库
Configuration hbaseConf = HBaseConfiguration.create();
hbaseConf.set("hbase.zookeeper.property.clientPort", "2181");
hbaseConf.setStrings("hbase.zookeeper.quorum", "cdh01.gzyh.com");
// 指定表名
htable = new HTable(hbaseConf, "TextHbase");
File inputFile = new File(inpath);
File[] files = inputFile.listFiles();
for (File file : files) {
String rowKey = file.getName();
// 指定ROWKEY的值
Put put = new Put(Bytes.toBytes(rowKey));
// 指定列簇名称、列修饰符、列值 temp.getBytes()
put.addColumn("textinfo".getBytes(), "content".getBytes(), getSource(file.getAbsolutePath()));
htable.put(put);
}
}
public static byte[] getSource(String URL) throws IOException {
File file = new File(new String(URL.getBytes(), "UTF-8"));
file.length();
FileInputStream is = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
int len = 0;
while ((len = is.read(bytes)) != -1) {
is.read(bytes);
}
is.close();
return bytes;
}
}
(可左右滑动)
4.运行代码
1.首先我们在HBase中建一张表用来保存文本文件
代码语言:javascript复制create 'TextHbase', {NAME=>'textinfo'}
(可左右滑动)
2.配置客户端Windows机器的hosts文件
3.注意修改代码中的配置项,如文本文件所在的目录,集群的Zookeeper地址等。Fayson这里为了使用方便,就不打成jar包到集群运行,直接在Eclipse里运行代码。
4.到HBase中进行查询确认
一共21条,表明全部入库成功
5.Hue中查询验证
1.从Hue中进入HBase的模块
单击某个column,可以查看整个文本内容
2.查询某一个Rowkey进行测试
本文所使用的代码源码GitHub地址:
https://github.com/fayson/cdhproject/blob/master/hbasedemo/src/main/java/com/cloudera/hbase/Text2HBase.java
https://github.com/fayson/cdhproject/tree/master/hbasedemo/full-text-index
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操