导语:本身TBDS平台不提供sqoop组件,若用户想在TBDS平台上使用sqoop抽取外部数据导入至TBDS平台,需要单独部署sqoop组件。
一、TBDS安装sqoop组件
1.首先下载sqoop安装包
链接:https://share.weiyun.com/5zgpbZi 密码:danme3
2.从TBDS集群中选择一台机器安装sqoop工具,一般选择Portal机器
安装方式直接rpm -ivh sqoop-xxx.rpm
3.把/etc/sqoop/conf/下的sqoop-env-templete.sh复制一个sqoop-env.sh,将脚本里面的hadoop及mr路径改为TBDS集群的/usr/hdp/2.2.0.0-2041/hadoop/,按照截图配置参数
4.配置完毕以后即可使用sqoop命令
注:若其他节点也想使用sqoop命令,则按照相同步骤操作配置即可
二、sqoop抽取外部数据导入TBDS的hive表
因为访问TBDS的hive表必须要认证才能访问,所以与开源导入的方法稍有不同,需要先做认证配置才能使用。
1.在安装了sqoop以后,在对应执行sqoop命令的机器上执行以下步骤
(1)vim /usr/jdk64/jdk1.8.0_111/jre/lib/security/java.policy
增加 permission javax.management.MBeanTrustPermission "register";
(2)cp -a /usr/hdp/2.2.0.0-2041/hive/lib/libthrift-0.9.3.jar /usr/hdp/2.2.0.0-2041/hadoop/share/hadoop/common/lib/
注意必须将原来目录下的/usr/hdp/2.2.0.0-2041/hadoop/share/hadoop/common/lib/libthrift-0.9.2.jar移走
(3)执行sqoop命令前,需要export hive的secureid和securekey(就是先做认证)
示例:
代码语言:javascript复制 # hive认证
export hadoop_security_authentication_tbds_secureid=tRUGx1oBzXzkC5Pf5pv4MQGe7a9sUULykU60
export hadoop_security_authentication_tbds_securekey=ePyUBLfHPeyUCLp5hKcJvmNK1iSvqonJ
export hadoop_security_authentication_tbds_username=hive
sqoop import
--connect jdbc:mysql://x.x.x.x:3306/easy_test
--username xxx --password xxx
--table DIM_PROJECT
-m 1
--hive-import
--target-dir temp
--hive-database xxx
--hive-table xxx
注:
不加--hive-databases表示默认将数据导入到hive的default库
--target-dir 若目录已存在会报错
sqoop import的参数选项如下
选项 | 含义说明 |
---|---|
--append | 将数据追加到HDFS上一个已存在的数据集上 |
--as-avrodatafile | 将数据导入到Avro数据文件 |
--as-sequencefile | 将数据导入到SequenceFile |
--as-textfile | 将数据导入到普通文本文件(默认) |
--boundary-query <statement> | 边界查询,用于创建分片(InputSplit) |
--columns <col,col,col…> | 从表中导出指定的一组列的数据 |
--delete-target-dir | 如果指定目录存在,则先删除掉 |
--direct | 使用直接导入模式(优化导入速度) |
--direct-split-size <n> | 分割输入stream的字节大小(在直接导入模式下) |
--fetch-size <n> | 从数据库中批量读取记录数 |
--inline-lob-limit <n> | 设置内联的LOB对象的大小 |
-m,--num-mappers <n> | 使用n个map任务并行导入数据 |
-e,--query <statement> | 导入的查询语句 |
--split-by <column-name> | 指定按照哪个列去分割数据 |
--table <table-name> | 导入的源表表名 |
--target-dir <dir> | 导入HDFS的目标路径 |
--warehouse-dir <dir> | HDFS存放表的根路径 |
--where <where clause> | 指定导出时所使用的查询条件 |
-z,--compress | 启用压缩 |
--compression-codec <c> | 指定Hadoop的codec方式(默认gzip) |
--null-string <null-string> | 如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值 |
--null-non-string <null-string> | 如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值 |