sqoop import

sqoop数据导入工具import:
   sqoop数据导入hdfs和hive没什么区别,导入hdfs就是把数据按行一行一行地写入hdfs文件系统,
   导入hive表,相似于在hdfs上有一个网格,按网格的指定一个个去存放,网格的位置是独立存在的
下面是从网上找的sqoop的一些命令选项,(没办法,记性很差,只能每次写sqoop命令就拿出来遛遛)java

选项    含义说明
--connect <jdbc-uri>    指定JDBC链接字符串
--connection-manager <class-name>    指定要使用的链接管理器类
--driver <class-name>    指定要使用的JDBC驱动类
--hadoop-mapred-home <dir>    指定$HADOOP_MAPRED_HOME路径
--help    打印用法帮助信息
--password-file    设置用于存放认证的密码信息文件的路径
-P    从控制台读取输入的密码
--password <password>    设置认证密码
--username <username>    设置认证用户名
--verbose    打印详细的运行信息
--connection-param-file <filename>    可选,指定存储数据库链接参数的属性文件mysql

下面是我脚本里面的sqoop命令,相似的一些库均可以导的,把驱动和链接设置很久ok的
sqoop import --driver com.microsoft.sqlserver.jdbc.SQLServerDriver \
--connect "jdbc:sqlserver://$HOST:$PORT;database=$SERVERDB" --username $USER --password "$PASSWD" \
--table $TABLE  --fields-terminated-by '\001' --warehouse-dir /user/hive/warehouse/feidaiwebsite.db \
--null-string '\\N' --null-non-string '\0' -m $NUM_MAPPERSweb

我喜欢把链接配置信息存放到库里面,因此上面的命令我基本不改sql

这是我切换sqlserver的记录
ln -s /root/tanj/sqlserver/sqljdbc4.jar /opt/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/sqoop/lib/
export MSSQL_CONNECTOR_HOME=/root/tanj/sqlserver/sqoop-sqlserver-1.0
chmod +x /root/tanj/sqlserver/sqoop-sqlserver-1.0/install.sh
sh /root/tanj/sqlserver/sqoop-sqlserver-1.0/install.sh
ln -s /root/tanj/sqlserver/sqoop-sqlserver-1.0/lib/sqoop-sqlserver-1.0.jar /opt/cloudera/parcels/CDH-5.10.0-1.cdh5.10.0.p0.41/lib/sqoop/lib/
ln -s /root/tanj/sqlserver/sqoop-sqlserver-1.0/conf/managers.d/mssqoop-sqlserver /etc/sqoop/conf/managers.dshell

--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的该类列的值数据库

(备注一下啊,这是网上1.4版本的,)app

sqoop import --connect jdbc:mysql://$HOST:$PORT/$MYSQL_DB  --username $USER --password ''${PASSWD}'' --table $MYSQL_TABLE \
--hive-import --hive-overwrite  --hive-database $HIVE_DB --fields-terminated-by '\001' --target-dir $TEMPDIR --delete-target-dir --outdir /root/tanj/sh/java \
--hive-drop-import-delims --null-string '\\N' --null-non-string '\0'  -m $NUMMAPPERS工具

说说一些坑吧
我在密码那里加了俩单引号,是由于有的密码里面含有特殊符号,致使sqoop读取命令的时候会出错,因此我喜欢干脆的,直接在shell 的参数上所有加上''''
--hive-overwrite  我是作全量导数,(后面也有增量的脚本), 因此每次全量覆盖,否则还得去删除,不然就会add了
--fields-terminated-by 分割符啦,用了几个,都很差,它涉及到字段之间的区分,因此它必须不能在内容里面出现该符号
--target-dir 是sqoop生成的目标目录,只是个临时目录,最终会转移数据到表目录去,--delete-target-dir 因此建议用 不然任务失败后后面的任务会报错
--outdir 是java文件生成存放的目录,会自动生成,否则会存放在当前目录,生成一推的java文件
--null-string --null-non-string 处理空值
-m map任务并行数,貌似主键是int类型才行,不然会生成重复数据oop


hive导入参数
  --hive-home <dir>  重写$HIVE_HOME
  --hive-import          插入数据到hive当中,使用hive的默认分隔符
  --hive-overwrite  重写插入
  --create-hive-table  建表,若是表已经存在,该操做会报错!
  --hive-table <table-name>  设置到hive当中的表名
  --hive-drop-import-delims  导入到hive时删除 \n, \r, and \01 
  --hive-delims-replacement  导入到hive时用自定义的字符替换掉 \n, \r, and \01 
  --hive-partition-key          hive分区的key
  --hive-partition-value <v>  hive分区的值
  --map-column-hive <map>          类型匹配,sql类型对应到hive类型(--map-column-java)sqlserver

sqoop增量导数
–check-column (col)    用来做为判断的列名,如id
–incremental (mode)    append:追加,好比对大于last-value指定的值以后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期以后的记录
–last-value (value)    指定自从上次导入后列的最大值(大于该指定的值),也能够本身设定某一值
  sqoop增量导数的例子 
  sqoop  import --connect jdbc:mysql://${APPENDHOST}:$APPENDPORT/$APPENDMYSQL_DB --username $APPENDUSER --password $APPENDPASSWD \
   --table $HIVE_TABLE --incremental append --check-column $APPENDCOLUMN --outdir /root/tanj/sh/java \
   --hive-import --hive-database $HIVE_DB --hive-table $HIVE_TABLE \
   --target-dir $APPENDTEMPDIR --fields-terminated-by "\001"  \
   --hive-drop-import-delims --null-string '\\N' --null-non-string "\0" -m $APPENDNUMMAPPERS --last-value "${APPENDLASTVALUE};";

import-all-tables
   sqoop import-all-tables --connect  jdbc:mysql://10.64.4.95:3306/financesys_move --username root --password d6f0fe881f69edec \
   --hive-import --hive-overwrite --hive-database financesys_move --fields-terminated-by '\001'  \
   --hive-drop-import-delims --null-string '\\N' --null-non-string '\0' -m 1

 

不能和--delete-target-dir 同时使用

相关文章
相关标签/搜索