zoukankan      html  css  js  c++  java
  • hadoop 1.1.2和 hive 0.10 和hbase-0.94.10-security整合

    1.复制jar包,拷贝hbase-0.94.10-security.jar,hbase-0.94.10-security-tests.jar,zookeeper-3.4.5.jar,protobuf-java-2.4.0a.jar到hive/lib下,删掉lib下面旧版的jar包。 

    没有做网上资料所说的向hadoop拷贝jar和配置文件的动作,不过只有hbase有了一个下面的错误在60000上

    �������|�������)org.apache.hadoop.ipc.RPC$VersionMismatch���>Server IPC version 3 cannot communicate with client version 47

    但是在60010端口的监控仍然正常,不明白为什么?疑问希望有同学能给个答案撒

    在读了hbase0.94和hadoop1.1.2的IPC相关部分的源代码明白了为什么会有这个错误了,这个 错误会影响RPC的调用,但是不影响编程使用,只需要zookeeper能正常工作即可。

    hbase中控制IPC的是HbaseServer.java这个类,关于版本检验的代码如下

    private void setupBadVersionResponse(int clientVersion) throws IOException {
          String errMsg = "Server IPC version " + CURRENT_VERSION +
          " cannot communicate with client version " + clientVersion;
          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    
          if (clientVersion >= 3) {
            // We used to return an id of -1 which caused server to close the
            // connection without telling the client what the problem was.  Now
            // we return 0 which will keep the socket up -- bad clients, unless
            // they switch to suit the running server -- will fail later doing
            // getProtocolVersion.
            Call fakeCall =  new Call(0, null, this, responder, 0);
            // Versions 3 and greater can interpret this exception
            // response in the same manner
            setupResponse(buffer, fakeCall, Status.FATAL,
                null, VersionMismatch.class.getName(), errMsg);
    
            responder.doRespond(fakeCall);
          }
        }

    版本定义部分的代码

    public abstract class HBaseServer implements RpcServer {
    
      /**
       * The first four bytes of Hadoop RPC connections
       */
      public static final ByteBuffer HEADER = ByteBuffer.wrap("hrpc".getBytes());
      public static final byte CURRENT_VERSION = 3;

    然而在hadoop1.1.2中的相关源代码

    public abstract class Server {
      private final boolean authorize;
      private boolean isSecurityEnabled;
      
      /**
       * The first four bytes of Hadoop RPC connections
       */
      public static final ByteBuffer HEADER = ByteBuffer.wrap("hrpc".getBytes());
      
      // 1 : Introduce ping and server does not throw away RPCs
      // 3 : Introduce the protocol into the RPC connection header
      // 4 : Introduced SASL security layer
      public static final byte CURRENT_VERSION = 4;

    RPC的版本不一致的说,而且hbase中的RPC通信是不是通过hadoop-core-x.jar包来实现的,所以,把jar拷贝到hbase下仍然会产生这个错误,虽然hbase可以正常使用,但是60000端口的RPC服务是不能用的

    2.修改hive-site.xml配置文件,添加以下内容

    <property>     
       <name>hive.querylog.location</name>     
       <value>/usr/hive/logs</value>     
        </property>
        <property>  
       <name>hive.aux.jars.path</name>   
       <value>file:///usr/local/hive/lib/hive-hbase-handler-0.10.0.jar,file:///usr/local/hive/lib/hbase-0.94.10-security.jar,
    file:///usr/local/hive/lib/zookeeper-3.4.5.jar,file:///usr/local/hive/lib/protobuf-java-2.4.0a.jar</value>  
    </property>    

    3.启动hive,hive -hiveconf hbase.zookeeper.quorum=zookeepermaster(zookeeper的master)

    4.开始测试,建一个表试验。

    CREATE TABLE hbase_table1(key int, value1 string,value2 int) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES (
    "hbase.columns.mapping" = ":key,c1:value1,c2:value2"
    )TBLPROPERTIES("hbase.table.name" = "hbase_table1"); 
    TBLPROPERTIES参数是可选的,如果不写的话,就默认是hive和hbase中的表名称一致
    
    5.打开hbase,使用describe  'hbase_table1'结果如下图

    官网:https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

  • 相关阅读:
    python集成开发环境Anaconda的安装
    hasMap2
    WireShark:TCP三次握手 抓包
    CCF 201409-4 最优配餐
    201403-4 无线网络
    java IO的字节流和字符流及其区别
    平衡二叉树DSW算法
    警惕Java编译器中那些“蜜糖”陷阱
    laravel 学习笔记 —— 神奇的服务容器
    LNMP下安装phpmyadmin的一个小错误解决办法
  • 原文地址:https://www.cnblogs.com/AI001/p/3368867.html
Copyright © 2011-2022 走看看