📖
tbds
  • 前言
  • 部署
    • 安装步骤
  • 平台管理
    • 用户管理
    • 项目管理
    • 系统设置
  • 组件访问开发
    • kafka
    • hadoop
    • hbase
    • accessKey
    • hive
    • spark
    • ftp
    • portalApi
    • hermes
    • 代码访问组件demos
      • hbase
      • hdfs
      • kafka
      • hive
  • 数据接入
    • 数据接入
      • TDBank产品化介绍及使用指引
      • TDBank数据接入指引
      • TDBank采集接口详解
      • OGG Flume Adapter 部署文档
      • DB Demo
      • HDFS Demo
    • Hippo管理
    • 进度监控
    • 血缘分析
  • 实时计算
    • 任务管理
    • 库表模板管理
  • 数据分析
    • 数据交互
    • ideX
  • 任务调度
    • 操作指引
    • 工作流
      • 基本概念
      • 任务基本信息
      • 任务调度设置
      • 任务参数配置
        • shell 脚本
        • ftp导入hdfs
        • kafka导入hbase
        • kafka导入hdfs
        • hdfs导出hbase
        • hive sql 脚本
        • hive导入hdfs
        • hdfs导出DB(mysql,postgreSQL,sql server)
        • tstorm任务
        • spark任务
        • mapreduce任务
        • db导入hdfs
        • hdfs导出hive
        • hdfs导出hive-tdsort
        • hive导出mysql
        • mysql导入hive
      • Demo
        • FTP导入HDFS
        • HDFS导出HBASE
        • HDFS导出Mysql
        • HDFS导入HIVE
        • Hive SQL脚本
        • Hive导出MySQL
        • Hive导入HDFS
        • KAFKA导出HBASE
        • KAFKA导出HDFS
        • MYSQL导入HDFS
        • MySQL导入Hive
        • Shell脚本
        • SPARK任务
      • 升级
        • 集成代码更新
        • rpm升级
      • 补充
        • 手动迁移base组件
        • 手动安装runner组件
        • 自定义任务开发文档
        • 时间隐式变量说明
        • 下发并发数说明和调整操作
        • Issues版本说明
        • 设置分组
        • 跨工作流依赖
      • 常见问题定位和解决方式
        • 常用操作
        • 实时接入任务hdfs2hive (tdsort)
        • 实例日志获取失败
        • 实例日志中提示下载文件失败
        • taskSchedule指标为空定位方法
        • 实例依赖失效确认方式
        • 任务实例诊断按钮无调度信息
        • 诊断和定位操作参考
        • 实例一直等待终止定位
        • mongodb 常见问题和处理办法
    • 任务管理
      • 工作流列表
      • 任务管理
      • 任务运行管理
      • 其他
    • 服务器配置
      • 基本概念
      • 操作指南
  • Tstorm
    • Tstorm介绍
    • 开发实例
      • wordcount
  • 数据展现
    • 自助报表
  • 数据资产
    • 库表管理
      • 可管理库表
      • 可读写库表
      • 无归属库表
      • 维表管理
      • 新建表
    • 数据血缘
    • 数据提取
      • 数据地图
      • 任务列表
      • 架构关联
  • 运维中心
    • 系统运维
      • 组件部署
      • 链接归集
      • 诊断
      • 备份
    • 访问管理
    • 文件管理
    • 监控告警
      • 监控
      • 告警
  • 机器学习
    • 系统简介
    • TDInsight功能介绍
      • 工作流
        • 新建工程
        • 新建工作流
        • 创建和配置节点
        • 运行
        • 日志查看
      • 数据输入输出
      • 组件
        • Spark组件
        • Sparkstreaming组件
        • pySpark组件
        • xgboost组件
    • 多实例并发
      • 3种方式驱动实例
      • 实例查询
      • 历史实例
    • TDInsight模型与在线推理
      • 数据流
      • 模型的训练与使用
      • 模型在线服务
    • TDInsight算法/组件说明
      • 数据说明
      • 特征工程
        • 数据预处理
        • 特征提取
        • 特征转换
        • 特征选择
        • 特征评估
      • 机器学习
        • 分类算法
        • 聚类算法
        • 回归算法
        • 推荐算法
        • 关联规则
      • 模型评估
        • Binary Evaluator
        • Multi Evaluator
        • Regression Evaluator
      • 可视化
        • 关系
        • 分布
        • 对比
        • 组合
      • 深度学习算法简介
        • 计算机视觉
        • 自然语言处理
        • 表示学习
Powered by GitBook
On this page
  • 背景
  • 使用
  • TBDS认证方式访问
  • 注意事项
  • 集群外客户端部署
  • 客户端代码编译打包
  • 运行

Was this helpful?

  1. 组件访问开发

hbase

PrevioushadoopNextaccessKey

Last updated 4 years ago

Was this helpful?

背景

大数据套件的hbase服务基于社区hbase 1.2.1版本改造。主要加强安全认证,加入套件基于ACCESSKEY的认证。 accesskey相关操作参考对应章节。

使用

无认证方式访问 无认证访问即社区的普遍访问方式。大数据套件hbase组件默认开启了基于accesskey的TBDS认证,不能无认证访问。

TBDS认证方式访问

1.hbase shell访问

步骤0. 确认访问用户,在portal页面获取该用户在套件系统关于hbase模块的accesskey(secureId,secureKey)

步骤1.设置用户accesskey相关的secrueId和secureKey为环境变量:

    export hbase_security_authentication_tbds_secureid=2UIOLmuK93mcc4F1UWpYqzUo5TkfqFycJZiI 
    export hbase_security_authentication_tbds_securekey=zluIBbYX4RRIYPrU2Dx3whX19kBjTMTe

accesskey关联什么用户,当前操作hbase就是什么用户,换言之,如果想要什么用户操作hbase,就要导入相应的accesskey。

步骤2.执行普通的hbase的shell命令操作hbase: hbase shell 完整示例命令:

2.java client访问

代码基本与开源hbase的client代码一致,只是在连接需要用到的Configuration中加入用户的认证信息(secureId,secureKey)即可。代码片段示例:

public static Connection createconnection(String secureId, String secureKey,String zk) {
  Configuration configuration = HBaseConfiguration.create();  
  configuration.set("hbase.zookeeper.quorum", zk);  
  configuration.set("zookeeper.znode.parent", "/hbase-unsecure");

认证时,在创建HBase连接之前,在configuration设置以下两个参数,其他使用方法和HBase开源完全一样, hbase其他接口的使用方法类似,只需要增加以下两个认证参数即可

  configuration.set("hbase.security.authentication.tbds.secureid", secureId);  
  configuration.set("hbase.security.authentication.tbds.securekey", secureKey);  
  try {  
      return ConnectionFactory.createConnection(configuration);  
  } catch (IOException e) {  
      e.printStackTrace();
      return null;
  }
}

如果使用proxyUser方式访问hbase,则还需要在客户端加入如下代码片段:

// 想以什么身份跑任务的用户,自己不用登录认证,自己的身份由loginUser保证真实性,由loginUser代理
String doasUser = "userA";
// 真正要进行认证的用户,跑任务时,不是以该用户的身份。 该用户要保障doasUser身份的真实性。整个认证的逻辑是:HBase系统对loginUser进行认证,
// 而loginUser对doasUser进行认证
String loginUser = "userB";
UserGroupInformation ugi =
    UserGroupInformation.createProxyUser(doasUser,
        UserGroupInformation.createRemoteUser(loginUser));

注意:1)这个代码片段需要放在hbase连接之前执行;2)userB即跟accesskey相对应的用户,只用来做认证,userA是实际访问数据用户。

3.Thrift RPC访问

1)生成认证签名 以用户的secureId、secureKey,当前时间戳timestamp,任意随机数nonce为输入, 根据公开的算法得到用户签名Signature。签名算法实现如下:

public static String generateSignature(String secureId, long timestamp, int randomValue,
    String secureKey) {
  Base64 base64 = new Base64();
  byte[] baseStr =
      base64.encode(HmacUtils.hmacSha1(secureKey, secureId + timestamp + randomValue));
  String result = "";
  try {
    result = URLEncoder.encode(new String(baseStr), "UTF-8");
  } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
  }
  return result;
}

2)准备认证参数 把1)中的secureId,timestamp,nonce,Signature以空格分隔组成一个字符串,作为认证信息userAuthInfo</br> 3) 使用认证参数进行hbase Thrift连接 这里的代码是标准的Thrift sasl连接代码,代码片段如下:

TTransport transport = new TSocket(host, port);

// mechanism必须设置为 PLAIN
transport = new TSaslClientTransport("PLAIN", null, null, null, null, new CallbackHandler() {
  @Override
  public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
    for (Callback callback : callbacks) {
      if (callback instanceof NameCallback) {
        // 在NameCallBack里面设置认证字符串,格式必须是各个参数以空格隔开,参数顺序依次是:secureId timestamp nonce signature
        // 具体格式见getAuthentication函数返回的格式
        ((NameCallback) callback).setName(userAuthInfo);
      } else if (callback instanceof PasswordCallback) {
        // PasswordCallback设置为空即可,服务端认证时不用
        ((PasswordCallback) callback).setPassword("".toCharArray());;
      } else if (callback instanceof AuthorizeCallback) {
        // AuthorizeCallback设置为空即可,服务端认证时不用
        ((AuthorizeCallback) callback).setAuthorizedID("");
      } else {
        throw new UnsupportedCallbackException(callback);
      }
    }
  }
}, transport);
transport.open();

4.phoenix访问

phoenix访问方式不变,只是在连接字符串中多加两个参数(用户的secureId,secureKey)。 在原来的链接字符串之后增加认证参数:hbase.security.authentication.tbds.secureid 和 hbase.security.authentication.tbds.securekey。 </br> 示例: 原认证字符串</br>

jdbc:phoenix:tbds-10-255-0-10,tbds-10-255-0-4,tbds-10-255-0-2:2181:/hbase-unsecure

增加认证后的字符串:

jdbc:phoenix:tbds-10-255-0-10,tbds-10-255-0-4,tbds-10-255-0-2:2181:/hbase-unsecure ?hbase.security.authentication.tbds.secureid=PdtRcxASjDKUxlvsQ9yKP4bXotMYybLFLoug & hbase.security.authentication.tbds.securekey=NVBjm6wfrBLhDJ673c4jaBIRLV9zMnqy

注意 : 第一个参数之前增加问号(?),后面的各个参数之间以&连接 需要引用jar包 phoenix-core-4.8.1-HBase-1.2-TBDS.jar

注意事项

1)在用java代码生成用户Signature时,需要引用1.10以上版本的commons-codec jar包,否则计算的签名可能会不一样

2)客户端引用的hbase依赖jar要使用套件版本的hbase lib,不能用开源的hbase lib

3)如果碰到无权限访问hbase如scan等操作,需要去portal的访问管理配置对应用户的访问策略

集群外客户端部署

1)准备安装软件,可以通过以下3种方式任选其一获取 (1)在任一安装hbase客户端的集群内节点,打包hbase的安装路径:/usr/hdp/2.2.0.0-2041/hbase/,并拷贝到集群外目标客户端安装节点

(2)如果有套件的yum源,在集群外目标安装节点使用yum install安装

(3)如果有hbase安装包,在集群外目标安装节点使用rpm -ivh安装

2)获取hbase集群配置,可以通过以下2中方式任选其一获取: (1)在任一安装hbase客户端的集群内节点,打包hbase的配置路径: /etc/hbase/conf,并拷贝到集群外目标客户端安装节点对应路径 (2)通过ambari界面下载hbase配置:选中任一一台安装有hbase客户端的机器,在机器操作选项中选择“下载客户端配置-->Hbase client”,如下图所示:

客户端代码编译打包

1)套件版hbase jar命名规则 套件的hbase是基于社区二次开发,命名规则采用"社区版本号-TBDS-套件版本号"的方式命名.例:我们现在基于社区1.2.1版本的hbase进行开发,套件版本是4.0.3.3,则我们打出的hbase jar版本为1.2.1-TBDS-4.0.3.3,完整的hbase client maven jar文件名为:hbase -client-1.2.1-TBDS-4.0.3.3.jar

2)基于套件提供的maven库开发 (1)拷贝或部署套件提供的maven库到开发者可访问的本地仓库或远程仓库 (2)在客户端maven工程pom引入对应的套件版hbase依赖,以套件4.0.3.3版本为例,需要在pom中加入的依赖片段(其他版本依次类推):

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId> hbase -client</artifactId>
        <version>1.2.1-TBDS-4.0.3.3</version>
    </dependency>

3)基于开源maven库开发 (强烈不建议使用) 这种方式建议不使用。</br> (1)在客户端maven工程引入对应的社区版本hbase依赖。

    <dependency>
        <groupId>org.apache. hbase </groupId>
        <artifactId> hbase -client</artifactId>
        <version>1.2.1</version>
    </dependency>

(2)编译完成之后,在运行客户端程序运行之前,把套件版的hbase jar及其间接依赖加入classpath中: hbase -client-1.2.1-TBDS-4.0.3.3.jar hadoop-auth-2.7.2-TBDS-4.0.3.3.jar hadoop-common-2.7.2-TBDS-4.0.3.3.jar

运行

运行客户端代码与社区方式无区别