--sqoop创建hive表
sqoop create-hive-table --connect jdbc:oracle:thin:@$hosts:port:sid --table SourceTable--username $用户名--password $密码--hive-table INTERACT.TS_MESSAGE_TIME_BAK
--sqoop导入到hive
sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --table TS_MESSAGE_TIME_BAK --username oggkafka --password oggkafka --hive-import -hive-table INTERACT.TS_MESSAGE_TIME_BAK -m 1
--查看oracle的所有表
sqoop list-tables --connect jdbc:oracle:thin:@11.205.53.101:1521:test --username oggkafka --password oggkafka
--导入数据到hdfs,限制大小
sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --username oggkafka --password oggkafka --table TS_MESSAGE_TIME_BAK -m 1 --target-dir /user/root --direct-split-size 67108864
--全量导数到hdfs,启动1个mapreduce
sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --username oggkafka --password oggkafka --table TS_MESSAGE_TIME_BAK -m 1
--sqoop导入hive限制时间范围进行导数(首次执行),并且根据oracle数据库的表自动创建hive表
sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --table TS_MESSAGE_TIME_BAK --where "to_date(MDDT,'yyyy-mm-dd hh24:mi:ss') between to_date('2018/5/8 2:21:04','yyyy-mm-dd hh24:mi:ss') and to_date('2018/5/8 22:05:00','yyyy-mm-dd hh24:mi:ss')" --username oggkafka --password oggkafka --hive-import --create-hive-table -hive-database INTERACT -hive-table TS_MESSAGE_TIME_BAK -m 1 --delete-target-dir
#去除oracle原表的换行符,
注意:以下俩个命令不能同时在一个脚本内出现
--hive-delims-replacement \
--hive-drop-import-delims \
#使用hcatalog的方式创建hive表,数据格式为parquet
sqooop import -Dorg.apache.sqoop.splitter.allow_test_splitter=true \
--connect jdbc:oracle:thin:@10.133.103.202:1521:fsdxdb1 \
--username wxzxcx \
--password 'gf#_Gb14' \
--query " select * from (select * from itm.cust_info) cust_info_hive where \$CONDITIONS" \
--hcatalog-database dx_test_db \
--hcatalog-table cust_info_hive \
--create-hcatalog-table \
--fields-terminated-by '\001' \
--null-string '\\N' \
--null-non-string '\0' \
--hcatalog-storage-stanza 'stored as parquet' \
--split-by cust_id \
-m 5
#使用append的方式创建,将所有的数据追加到hdfs指定目录下
#需要单独创建表
sqoop import -Dorg.apache.sqoop.splitter.allow_test_splitter=true \
--connect jdbc:oracle:thin:@$hostname:$port:$sid \
--username $username \
--password $password \
--query "select $columns from $source_user.$source_table where \$CONDITIONS and $pk like '6%'" \
--append \
--target-dir /user/hive/warehouse/$hive_database.db/$hive_table \
--fields-terminated-by '\001' \
--null-string '\\N' \
--null-non-string '\0' \
--num-mappers 5 \
--split-by $pk \
--as-parquetfile
Sqoop====》Hive
1.抽取txt格式文件。
sqoop import \
--connect jdbc:oracle:thin:@10.133.103.202:1521:fsdxdb1 \
--table TS_MESSAGE_TIME \
--where "messageid='MS0242851258'" \
--username WXZXCX \
--password gf#_Gb14 \
--hive-import \
--create-hive-table \
--hive-database INTERACT \
--hive-table TS_MESSAGE_TIME -m 1 \
--null-string 'null' \
--null-non-string 'null' \
--fields-terminated-by '\001'
--lines-terminated-by '\n' \
--delete-target-dir
2.抽取parquet格式文件方法一,使用hcatalog。
sqoop import \
--connect jdbc:oracle:thin:@IP地址:1521:实例名\
--query "select * from 库名.表名 where \$CONDITIONS and UPDATEDT between to_date('2019/1/1 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2019/1/1 23:59:59','yyyy-mm-dd hh24:mi:ss')" \
--username 用户名 \
--password 密码 \
--null-string 'null' \
--null-non-string 'null' \
--split-by 切割字段(一般为主键,如果主键规则无规则,MR会出现数据倾斜) \
--hcatalog-database 库名 \
--hcatalog-table 表名 \
--create-hcatalog-table \
--m 4 \
--hcatalog-storage-stanza 'stored as parquet'
3.抽取parquet格式文件方法二, 1.先创建表,再追加parquet格式文件,默认所有列都是string类型的。如果创建表包含date或者double等不是string类型会报错!!
sqoop import \
--append \
--connect jdbc:oracle:thin:@IP地址:端口:实例名 \
--query "select * from 库名.表名 where \$CONDITIONS and rownum<10 " \
--username 用户名 \
--password 密码 \
--null-string 'null' \
--null-non-string 'null' \
--fields-terminated-by '\001' --lines-terminated-by '\n' \
--target-dir /user/hive/warehouse/库名.db/表名\
--num-mappers 1 \
--as-parquetfile
Hive====》Kudu
impala读取hive表;
如果是第一次Hive创建表,impala执行的时候需要
INVALIDATE METADATA; //重新加载所有库中的所有表
INVALIDATE METADATA [table] //重新加载指定的某个表
后期如果是数据变化。
REFRESH [table] //刷新某个表
REFRESH [table] PARTITION [partition] //刷新某个表的某个分区
upsert into kudu表 select * from hive表;
其他总结:
没有指定--split-by切割字段,mr只能设置为1个
Sqoop是一款开源的工具主要用于在Hadoop(Hive,HBasw)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
将各种关系型数据导入Hive中,其实大同小异,这里就以Oracle数据为例,将Oracle中的数据导入到Hive中。共分为两个步骤:
第一步:用Sqoop命令将关系型数据库中表结构复制到Hive中,只是复制表结构,不复制表中的内容:
sqoop create-hive-table --connect jdbc:oracle:thin:@192.168.8.110:1521:orcl --table A1 --username sky --password 123456 --hive-table a11
其中A1是Oracle数据库中的表名称,a11则是在Hive中创建的相对应的表名称。
第二步:通过sqoop将关系型数据库表中的数据导入到Hive的表中
sqoop import --connect jdbc:oracle:thin:@192.168.8.110:1521:orcl --username sky --password 123456 --table A1 --hive-import -hive-table a11 -m 8
注意事项(大坑):Oracle数据库中的表A1必须大写,否则会报错。