大数据离线数据采集(sqoop)

拉取数据开源框架目前挺多的,本文主要讲述如何使用sqoop来拉取数据。

sqoop当时是专门为了hadoop而来的,所以和hadoop结合比较好,sqoop常用是从mysql或者oracle数据库拉取数据到hadoop,接下来说明如何从这两者采集数据到hive中。

  • sqoop从mysql采集到hive
sqoop import --hive-import  \  #指定导入到hive表
	   --connect jdbc:mysql://10.10.26.22:3306/xxsc  \  #mysql连接
	   --username root  \  #数据库用户名
	   --password 123456  \ #数据库密码
	   --verbose  \  #打印命令运行时的详细信息
	   --table corp  \  #数据库表名
	   --hive-database xxsc  \  #Hive库名
	   --hive-table corp  \  #Hive表名
	   --where " modify_time >= '2021-01-31 00:00:00' "  \  #查询条件
	   --split-by id  \  #数据以哪个字段分割
	   --compress  \  #启用压缩
	   --compression-codec org.apache.hadoop.io.compress.SnappyCodec  \  #指定压缩方式
	   --num-mappers 1 \  #指定导入并行度,大于1会根据条件进行count,一般1就是最优
	   --null-string '\\N'  \  #空字符串处理
	   --null-non-string '\\N'  \  #空对象处理
	   --hive-drop-import-delims  \  #导入到hive时删除 \n, \r, and \01
	   --fields-terminated-by '\001'  \  #指定数据之间的分隔符
	   --lines-terminated-by '\n'  \  #指定每行之间的分隔符
	   --target-dir xxsc_corp \  #指定导入数据存放在hdfs上的临时目录,假如库名相同表名不同会导入失败
	   --delete-target-dir  \  #导入数据前先删除hdfs上的存在的临时目录
	   --optionally-enclosed-by '"'  #给带有双引号或单引号的字段前后加上指定字符
  • sqoop从oracle采集到hive
sqoop import --hive-import  \
	   --connect jdbc:oracle:thin:@192.168.102.33:1521:orcl  \
	   --username root  \
	   --password 123456  \
	   --verbose  \
	   --table XXSC.CORP  \  #数据库名和表名
	   --hive-database xxsc  \
	   --hive-table corp  \
	   --where " MODIFY_TIME >= TO_DATE('2021-01-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss') "  \
	   --split-by ID  \
	   --compress  \
	   --compression-codec org.apache.hadoop.io.compress.SnappyCodec  \
	   --num-mappers 1 \
	   --null-string '\\N'  \
	   --null-non-string '\\N'  \
	   --hive-drop-import-delims  \
	   --fields-terminated-by '\001'  \
	   --lines-terminated-by '\n'  \
	   --target-dir xxsc_corp \
	   --delete-target-dir  \
	   --optionally-enclosed-by '"'

以上就是sqoop导入数据命令,若想自动化,推荐sqoop + airflow的方式

导入失败参考文档:解决sqoop导入hive表失败问题_厚积薄发-CSDN博客_sqoop导入数据失败


版权声明:本文为a544258023原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。