在TBDS部署sqoop组件及抽取数据至hive的使用方法

2019-07-02 17:18:09 浏览数 (1)

导语:本身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的该类列的值

0 人点赞