HBaseTemplate工具类的查询统一接口代码实战

import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.log4j.Logger;
import org.springframework.data.hadoop.hbase.HbaseTemplate;
import org.springframework.data.hadoop.hbase.RowMapper;
import org.springframework.data.hadoop.hbase.TableCallback;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cloud.bean.HBaseColumn;
import com.cloud.bean.HQuery;

public class HBaseTemplate {
    private final Logger logger = Logger.getLogger(this.getClass());
    private static HbaseTemplate hbaseTemplate;
    static{
        final Configuration configuration = new Configuration();
        // 设置zookeeper
        configuration.set("hbase.zookeeper.quorum", "hadoop");
        // 2     设置hbase表名称
        configuration.set(TableOutputFormat.OUTPUT_TABLE, "sports");
        // 3. 将该值改大,防止client 连接ZK 超时退出s
        configuration.set("dfs.socket.timeout", "180000");
        
        hbaseTemplate=new HbaseTemplate(configuration);
    }
    /**
     * 写数据
     * 
     * @param tableName
     * @param action
     * @return
     */
    public Object execute(final HQuery query) {
        if (StringUtils.isBlank(query.getRow()) || query.getColumns().isEmpty()) {
            return null;
        }
        synchronized (Object.class) {
            return hbaseTemplate.execute(query.getTable(), new TableCallback() {
                @SuppressWarnings("deprecation")
                @Override
                public Object doInTable(HTableInterface table) throws Throwable {
                    try {
                        byte[] rowkey = query.getRow().getBytes();
                        Put put = new Put(rowkey);
                        if (query.getColumns() != null) {
                            Iterator iterator = query.getColumns().iterator();
                            while (iterator.hasNext()) {
                                HBaseColumn col = iterator.next();
                                if (StringUtils.isNotBlank(col.getFamily())
                                        && StringUtils.isNotBlank(col.getQualifier())
                                        && StringUtils.isNotBlank(col.getValue())) {

                                    put.add(Bytes.toBytes(col.getFamily()), Bytes.toBytes(col.getQualifier()),
                                            Bytes.toBytes(col.getValue()));
                                }
                            }
                            table.put(put);
                        }
                        System.out.println("data into hbase success! ");
                    } catch (Exception e) {
                        e.printStackTrace();
                        logger.warn("==> hbase get object fail> " + query.getRow());
                    }
                    return null;
                }

            });
        }
    } 

 }

 

你可能感兴趣的:(Hadoop生态核心技术)