欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sqoop学习(二) —— 安装部署说明及简单使用记录

程序员文章站 2022-04-19 11:14:57
...

一、前言

前面对Sqoop进行简答的说明(可查看Sqoop学习(一) —— 简单理论总结),此篇博客主要是记录一下安装部署过程,另外对于Sqoop的基本命令操作进行简单记录。

二、参考链接

三、安装部署过程

3.1 环境准备

linux系统、jdk1.8+、hadoop、mysql驱动(下载链接http://central.maven.org/maven2/mysql/mysql-connector-java/)、sqoop1.4.7-bin.tar.gz(下载链接https://archive.apache.org/dist/sqoop/1.4.7/

3.2 tar -zxvf 解压sqoop压缩包并更新/etc/profile(注意PATH是在原有基础上添加SQOOP_PATH即可)source /etc/profile并执行sqoop help命令测试sqoop安装完毕

export SQOOP_HOME=/usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0

export SQOOP_PATH=$SQOOP_HOME/bin

export PATH=$SQOOP_PATH:$PATH

Sqoop学习(二) —— 安装部署说明及简单使用记录

3.3 修改sqoop配置,主要是修改sqoop/conf/sqoop-env.sh,在其中添加Hadoop、Hive、HBase的安装目录

export HADOOP_COMMON_HOME=/usr/local/src/hadoop-3.1.1

export HADOOP_MAPRED_HOME=/usr/local/src/hadoop-3.1.1

export HIVE_HOME=/usr/local/src/apache-hive-3.1.0-bin

3.4 加入mysql驱动,将mysql-connector-java-5.1.34-bin.jar驱动复制到sqoop/lib下即可

至此Sqoop安装部署完成。集群中sqoop只需要在namenode安装部署即可(hdfs集群无问题即可,sqoop数据存储在hdfs中,可以理解为通过hdfs间接实现分布式)

3.5 注释掉sqoop/bin/configure-sqoop中HCAT_HOME、ACCUMULO_HOME、ZOOKEEPER_HOME的检查,主要是取消sqoop命令执行的一些不重要的日志打印

Sqoop学习(二) —— 安装部署说明及简单使用记录

四、简单命令记录

4.1 查看RDBMS(之后均以MySQL为例进行说明)中的数据库和表

sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password root

sqoop list-tables --connect jdbc:mysql://localhost:3306/company --username root --password root

Sqoop学习(二) —— 安装部署说明及简单使用记录

Sqoop学习(二) —— 安装部署说明及简单使用记录

4.2 将MySQL中数据导入到HDFS中

sqoop import --connect jdbc:mysql://master:3306/company --username root --password 123456 -table staff --target-dir /sqoop/data --delete-target-dir --num-mappers 1 --fields-terminated-by "\t"

Sqoop学习(二) —— 安装部署说明及简单使用记录

此处可以看到Sqoop将MySQL数据成功导入到HDFS中。

4.3 将MySQL数据导入到Hive中

sqoop import --connect jdbc:mysql://master:3306/company --table staff --username root --password 123456  --delete-target-dir --hive-import --hive-database default --hive-table hive_sqoop_test

Sqoop学习(二) —— 安装部署说明及简单使用记录

此处hive若已创建hive_sqoop_test表,直接导入数据即可;若没有创建则先创建表再进行数据导入。另外需要理解的是从MySQL到Hive其实也是经过了HDFS,具体应该是分为两步,先从MySQL到HDFS,然后再将数据从HDFS中导入到Hive中同时删除HDFS的中转存储数据。

此处拓展一个数据从HDFS导入Hive中的方法:在hive命令行中输入如下命令即可,其中default表示默认数据库,hive_staff为目标表(应该是要提前创建好的)导入后会发现原存储于hdfs中文件不见,被移动到hive的数据存储目录下

load data inpath '/user/root/staff/part-m-00000' into table default.hive_staff;

再拓展一个Hive数据导入HDFS中,即将hive数据存储下的文件移动到HDFS文件存储目录下

hadoop fs -put /usr/local/hive/warehouse/hdfs1.txt hdfs://localhost:8088/data/

4.4 将Hive数据导出到MySQL中 MySQL中要接收Hive导出数据的表必须提前建好,--export-dir后面跟hive数据的存储目录

sqoop export --connect jdbc:mysql://master:3306/company --username root --password 123456 --table staff3 --num-mappers 1 --export-dir /user/hive/warehouse/hive_staff --input-fields-terminated-by "\t"

4.5 将HDFS数据导出到MySQL中,需要注意根据文本中数据间隔不同--input-fields-terminated-by值不同

sqoop export --connect jdbc:mysql://master:3306/company --username root --password 123456 --table staff3 --num-mappers 1 --export-dir /sqoop/data/ --input-fields-terminated-by "\t"

Sqoop学习(二) —— 安装部署说明及简单使用记录

此处注意MySQL中要接收HDFS导出数据的表必须提前建好(需要与导出的数据格式一一匹配)

五、错误锦集

5.1 出现Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStore错误,参考https://blog.csdn.net/hhj724/article/details/79094138 我的解决方法是第二个重新初始化hive表即可

5.2 出现sqoop报错以及解决:Access denied for user 'root'@'XXXXXX' (using password: YES),参考https://blog.csdn.net/iilegend/article/details/90083118 我的解决方式是第二个,因为之前修改过MySQL的密码但是数据库权限给的是以前的密码,导致有些数据库访问权限丢失,重新执行下面的语句解决问题


grant all privileges on *.* to aaa@qq.com'%' identified by 'your password';

grant all privileges on *.* to aaa@qq.com'your IP' identified by 'your password';

flush privileges;

5.3 出现MapReduce操作出现错误: 找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster,参考https://blog.csdn.net/qq_41684957/article/details/81710190 同时启动hdfs-all.sh解决问题

5.4 出现提示mysql max connection表明MySQL的连接数不够,添加即可,参考https://blog.csdn.net/jianninggao/article/details/88670771 使用的是方法一解决问题

5.5 出现如下HiveConfi错误,参考https://blog.csdn.net/qq_38038143/article/details/84842810 将hvie/lib/hive-common-*.jar复制到sqoop/lib下即可

Sqoop学习(二) —— 安装部署说明及简单使用记录

六、总结

本篇博客只是简单的记录了一下Sqoop的基本命令(如何将MySQL数据导入到HDFS/Hive中;如何将HDFS/Hive中数据导出到MySQL中),实际中会根据业务的不同需求对Sqoop命令加各种限制来更精准的完成任务,后续如有使用到会继续更新。

相关标签: Sqoop学习 Sqoop