云服务器内容精选

  • 处理步骤 在集群上安装客户端,查看客户端“sqoop/lib”目录下是否有MySQL驱动包。 在客户端目录下加载环境变量。 source bigdata_env 执行Kerberos用户认证。 如果集群已启用Kerberos认证,执行以下命令认证具有操作权限的用户,否则跳过此步骤。 kinit MRS 集群用户 连接数据库。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 sqoop list-databases --connect jdbc:mysql://数据库IP地址:3306/ --username 数据库登录用户名 --password 密码 上图所示则代表sqoop连接MySQL成功。
  • Sqoop常用命令介绍 表1 Sqoop常用命令介绍 命令 说明 import 数据导入到集群 export 集群数据导出 codegen 获取数据库中某张表数据生成Java并打包jar create-hive-table 创建Hive表 eval 执行sql并查看结果 import-all-tables 导入某个数据库下的所有表到HDFS中 job 生成一个sqoop任务 list-databases 列举数据库名 list-tables 列举表名 merge 将HDFS不同目录下的数据合在一起并存放到指定目录 metastore 启动元数据库,记录sqoop job的元数据 help 打印帮助信息 version 打印版本信息
  • 公用参数介绍 表2 公用参数介绍 分类 参数 说明 连接数据库 --connect 连接关系型数据库的url --connection-manager 指定连接管理类 --driver jdbc 连接驱动包 --help 帮助信息 --password 连接数据库密码 --username 连接数据库的用户名 --verbose 在控制台打印详细信息 import参数 --fields-terminated-by 设定字段分隔符,和Hive表或hdfs文件保持一致 --lines-terminated-by 设定行分隔符,和hive表或hdfs文件保持一致 --mysql-delimiters MySQL默认分隔符设置 export参数 --input-fields-terminated-by 字段分隔符 --input-lines-terminated-by 行分隔符 hive参数 --hive-delims-replacement 用自定义的字符替换数据中的\r\n等字符 --hive-drop-import-delims 在导入数据到hive时,去掉\r\n等字符 --map-column-hive 生成hive表时可以更改字段的数据类型 --hive-partition-key 创建分区 --hive-partition-value 导入数据库指定分区 --hive-home 指定hive安装目录 --hive-import 表示操作是从关系型数据库导入到hive中 --hive-overwrite 覆盖hive已有数据 --create-hive-table 创建Hive表,默认false,如果目标表不存在,则会创建目标表 --hive-table 指定hive表 --table 关系型数据库表名 --columns 指定需要导入的关系型数据表字段 --query 指定查询语句,将查询结果导入 hcatalog参数 --hcatalog-database 指定hive库,使用hcatalog方式导入hive库 --hcatalog-table 指定hive表,使用hcatalog方式导入hive表 其他参数 -m或--num-mappers 后跟数字,表示sqoop任务的分片数 --split-by 按照某一字段进行分片,配合-m --target-dir 指定hdfs临时目录 --null-string string 类型为null时替换字符串 --null-non-string 非string类型为null时替换字符串 --check-column 增量判断的字段 --incremental append或lastmodified 增量导入参数 append:追加,比如对大于last-value指定的值之后的记录进行追加导入。 lastmodified:最后的修改时间,追加last-value指定的日期之后的记录。 --last-value 指定一个值,用于标记增量导入 --input-null-string 替换null字符串,如果没有指定,则字符串null将被使用。 --input-null-non-string 替换非String的null字符串,如果没有指定,则字符串null将被使用。
  • 前提条件 MRS 3.1.0及之后版本在创建集群时已勾选Sqoop组件。 安装客户端,具体请参考安装客户端(3.x及之后版本)。例如安装目录为“/opt/client”,以下操作的客户端目录只是举例,请根据实际安装目录修改。 客户端目录/Sqoop/sqoop/lib下已有对应驱动包(例mysql驱动包mysql-connector-java-5.1.47.jar),如果没有请参考Sqoop1.4.7适配MRS 3.x集群章节中的步骤3下载对应mysql包。
  • Sqoop使用样例 sqoop import(MySQL到HDFS) sqoop import --connect jdbc:mysql://10.100.231.134:3306/test --username root --password xxx --query 'SELECT * FROM component where $CONDITIONS and component_id ="MRS 1.0_002"' --target-dir /tmp/component_test --delete-target-dir --fields-terminated-by "," -m 1 --as-textfile sqoop export (obs到MySQL) sqoop export --connect jdbc:mysql://10.100.231.134:3306/test --username root --password xxx --table component14 -export-dir obs://obs-file-bucket/xx/part-m-00000 --fields-terminated-by ',' -m 1 sqoop import(MySQL到obs) sqoop import --connect jdbc:mysql://10.100.231.134:3306/test --username root --password xxx --table component --target-dir obs://obs-file-bucket/xx --delete-target-dir --fields-terminated-by "," -m 1 --as-textfile sqoop import(MySQL到Hive外obs表) sqoop import --connect jdbc:mysql://10.100.231.134:3306/test --username root --password xxx --table component --hive-import --hive-table component_test01 --fields-terminated-by "," -m 1 --as-textfile
  • 导入或导出数据时缺少MySQL驱动包 若执行sqoop import或sqoop export命令报错“Could not load db driver class: com.mysql.jdbc.Driver”,如图1所示,则表示缺少MySQL驱动包,需在MySQL官网下载对应MySQL驱动包,解压并上传至“客户端安装目录/Sqoop/sqoop/lib”目录下,再执行Sqoop导入或导出数据命令即可 图1 缺少MySQL驱动包报错