可以看出它会再hdfs上默认用逗号,分隔emp表的数据和字段.可以通过 --fields-terminated-by '\t'来指定分隔符
首先得把hdfs yarn集群启动-- m 指定的mapper的个数为1_success part-m-00000sqoop默认导入hdfs,默认分割符是","
第一种方式第二种表名相关的导入操作子集导入 --where使用query sql语句进行查找不能加参数--table并且必须加where条件:并且where条件后面不许带一个$conditions 这个字符串;并且这个sql语句必须使用单引号,不能使用双引号注意: --query 比较重要,一般使用这种方法封装成定时任务,增量导入.根据createtime做T+1增量导入(今天凌晨1点,导入昨天全量的数据,以此类推.)-------------------------------------------------------------------------------------------------------增量导入--check-column(col)用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入增量导入append增量导入lastmodified<IMG src="file:///C:\Users\念晨。\AppData\Roaming\feiq\RichOle\408241840.bmp">lastmodified模式去处理增量时,会将大于等于last-value值得数据当做增量插入.根据时间类型的字段进行增量导入,新增,修改这些数据都会增量导入到hdfs.merge-key模式是进行了一次完整的MapReduce操作关于lastmodified中的两种模式:append只会追加增量数据到一个新的文件中 并且会产生数据的重复问题因为默认是从指定的last-value大于等于其值得数据开始导入merge-key把增量的数据合并到一个文件中 处理追加增量数据之外 如果之前的数据有变化修改也可以进行修改操作 底层相当于进行了一次完整的mr作业.数据不会重复.最终的文件只有一个相当于当前mysql中最新数据的一个导出.--------------------------------------------------------------------------------------------------------- 将数据从hadoop生态体系导出到rdbms数据库导出前,目标表必须存在于目标数据库中.
export有三种模式:
默认操作是从将文件中的数据使用insert语句插入到表中.更新模式:sqoop将生成update替换数据库中现有记录的语句.调用模式:sqoop将为每条记录创建一个存储过程中调用sqoop 导出 export 默认模式导出(首先需要手动创建mysql中的目标表)1.准备hdfs文件2. 手动创建mysql中的目标表3.执行导出命令4.相关配置参数 注意:导出的目标表需要自己手动提前创建,也就是sqoop并不会帮我们创建复制表结构 例: mysql>USEuserdb;mysql>CREATETABLEemployee( idINTNOTNULLPRIMARYKEY, nameVARCHAR(20), degVARCHAR(20),salaryINT,deptVARCHAR(10));相关参数配置-input-fields-terminated-by'\t' //导出文件的分隔符问题,默认","--columns列 //如果文件顺序和表中顺序不一致 需要--columns 指定 多个字段之间以","export -dir输出的目录 这个指令在导出时是必须执行的配置-input-null-string '\\N' --input-null-non-string '\\N' (笔记错了应该是单引号)针对空字符串和非空字符串查看 hdfs -dfs cat 文件truncate 清空表(mysql)中断是资源不够-------------------------------------------------------------------------------------------------------2.更新导出(updateonly模式以及allowinsert模式) 2.1准备hdfs数据 2.2手动创建mysql中的目标表 2.3执行全部导出操作 2.4查看此时mysql中的数据 2.5新增一个文件 2.6执行更新导出(--update-key id\ --update-mode allowinsert) 2.7查看最终结果更新导出 update-key 更新标识,即根据某个字段进行更新,例如 id ,可以指定多个更新标识的字段,多个字段之间用字段隔开 updateonly只更新已经存在的数据 不会执行insert
allowinsert 与此相反可更新执行insert
---------------------------------------------------------------------------------------------------------五 sqoop job 作业 对上面的命令进行封装1.创建job --create2.验证job --list3.检查job --show4.执行job --exec5.删除job --delete 6.帮助 --help7.免密执行job 规定密码文件必须存放在HDFS上,并且权限必须是400
并且检查sqoop的sqoop-site.xml是否存在如下配置: <property><name>sqoop.metastore.client.record.password</name><value>true</value><description>Iftrue, allowsavedpasswordsinthemetastore.</description></property>创建job在hdfs对象
解决中文乱码问题<IMG src="file:///C:\Users\念晨。\AppData\Roaming\feiq\RichOle\2358653551.bmp">
|
|