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

一、前言

前面对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

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命令执行的一些不重要的日志打印

四、简单命令记录

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

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"

此处需要注意查看HDFS文件,如果环境/etc/profile中有配置HADOOP_HOME、PATH等,可以在任何路径下使用hadoop fs -xxx的命令;但是如果没有环境全局的配置,只能在hadoopd的bin目录下去执行命令,切记切记。(任何命令都是如果有环境全局配置,那么可直接使用 ;否则只支持在其bin目录下执行)不可少了这个认知而试错去浪费时间(出错就去查,别太相信自己长久不用的零碎知识记忆)

一般如果有环境全局变量配置,那么就直接在任意目录下执行命令即可。但是习惯上会去bin目录下执行,执行命令方式:

  1. bin/hadoop fs -ls /
  2. 进入bin目录,然后执行 ./hadoop fs -ls /

此处可以看到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

此处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"

此处注意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 root@'%' identified by 'your password';

grant all privileges on *.* to root@'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的基本命令(如何将MySQL数据导入到HDFS/Hive中;如何将HDFS/Hive中数据导出到MySQL中),实际中会根据业务的不同需求对Sqoop命令加各种限制来更精准的完成任务,后续如有使用到会继续更新。

发布了41 篇原创文章 · 获赞 9 · 访问量 9759

猜你喜欢

转载自blog.csdn.net/qq_38586378/article/details/103930509