Ambari+Maven+Hbase+slf4j+log4j环境配置-折腾笔记

一、环境

Hadoop集群:使用Ambari搭建

Debug:Windows10 + jdk 1.8.0 +maven

二、步骤

2.1 创建Maven项目

2.2 配置文件

从Ambari中下载Hbase配置文件hbase-site.xml,并放在项目:

/src/main/resources/hbase

2.3 将配置路径加入到classpath

2.3 给pom.xml添加依赖

我的pom.xml最终如下:

<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.th.test</groupId>
  <artifactId>demo1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>demo1</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
   <!-- slf4j核心包-->  
         <dependency>  
             <groupId>org.slf4j</groupId>  
             <artifactId>slf4j-api</artifactId>  
             <version>1.7.25</version>  
         </dependency>  
         <dependency>  
             <groupId>org.slf4j</groupId>  
             <artifactId>jcl-over-slf4j</artifactId>               
			 <version>1.7.25</version>  
             <scope>runtime</scope>  
         </dependency>  
         <!--核心log4j2jar包-->  
         <dependency>  
             <groupId>org.apache.logging.log4j</groupId>  
             <artifactId>log4j-api</artifactId>  
             <version>2.8.1</version>           </dependency>  
         <dependency>  
             <groupId>org.apache.logging.log4j</groupId>  
             <artifactId>log4j-core</artifactId>  
             <version>2.8.1</version>  
         </dependency>  
         <!--用于与slf4j保持桥接-->  
         <dependency>  
             <groupId>org.apache.logging.log4j</groupId>  
             <artifactId>log4j-slf4j-impl</artifactId>  
             <version>2.8.1</version>  
         </dependency>  
 
   
         <!--需要使用log4j2的AsyncLogger需要包含disruptor-->  
         <dependency>  
             <groupId>com.lmax</groupId>  
             <artifactId>disruptor</artifactId>  
             <version>3.3.6</version>  
         </dependency>  
    <dependency>
        <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-client</artifactId>
        <version>2.7.1</version>
    </dependency>
   <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
   <dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.2.4</version>
   </dependency>

  </dependencies>
</project>

2.4 添加log配置文件log4j2.xml

路径:\src\main\java\log4j2.xml

log4j2.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!--设置log4j2的自身log级别为warn-->
<configuration status="debug">

    <appenders>
        <console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>

        <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/DTCenterDataApplication/info.log"
                     filePattern="${sys:user.home}/logs/DTCenterDataApplication/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="INFO"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/DTCenterDataApplication/warn.log"
                     filePattern="${sys:user.home}/logs/DTCenterDataApplication/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="WARN"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/DTCenterDataApplication/error.log"
                     filePattern="${sys:user.home}/logs/DTCenterDataApplication/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="ERROR"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

    </appenders>

    <loggers>
        <!--过滤掉spring和hibernate的一些无用的debug信息-->
        <logger name="org.springframework" level="INFO">
        </logger>
        <logger name="org.hibernate" level="INFO">
        </logger>
        <root level="all">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>

2.5 创建Hbase测试程序

package com.th.test.demo1;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 java.io.IOException;

public class HbasePutExample {
	@SuppressWarnings("deprecation")
	public static void main(String[] args) throws IOException{
		Configuration conf = HBaseConfiguration.create();
		HTable table = new HTable(conf,"testtable");
		Put put = new Put(Bytes.toBytes("myrow-2"));
		put.add(
				Bytes.toBytes("colfam1"),
				Bytes.toBytes("qual1"),
				Bytes.toBytes("val1"));
		
		put.add(
				Bytes.toBytes("colfam1"),
				Bytes.toBytes("qual2"),
				Bytes.toBytes("val2"));
		table.put(put);
	}
}

2.6运行

控制台日志输出:

2.7 查看执行结果

 

参考链接


  1. http://www.cnblogs.com/foreverstars/p/5818015.html
  2. http://www.aboutyun.com/thread-7149-1-1.html