大数据学习——sqoop安装使用教程

版权声明:原创博文,转载请注明出处 https://blog.csdn.net/qq_15903671/article/details/86703406

由于hadoop启动即开始申请大量内存,笔记本安装VMware下的虚拟机很难满足配置要求,从sqoop开始切换到公司的linux CentOS环境上进行测试学习。

以下包括:sqoop下载安装,sqoop连接关系型数据库,sqoop数据导入操作 

一、sqoop下载安装

1.1 sqoop下载

官网地址:http://mirrors.hust.edu.cn/apache/sqoop/

百度网盘备份:链接:https://pan.baidu.com/s/1unFoRMNkQMAsE7XKLsynQA 提取码:wbdg  

官网上1.4.7 是sqoop1,1.99.7 是sqoop2。以下使用1.4.7 中的sqoop版本测试

搞了两个安装包,先试第一个 sqoop-1.4.7.bin_hadoop-2.6.0.tar.gz 因为这个安装包相对大一点。

1.2 sqoop 解压

 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

1.3 修改sqoop相关配置

修改conf文件夹下的 sqoop-env.sh  我只配置的hadoop相关的信息,hbase、hive、zookeeper都没有,所以暂时不配置

添加环境变量:增加SQOOP_HOME 把 SQOOP_HOME/bin添加到PATH

source /etc/profile立即生效

1.4 验证sqoop是否安装成功

sqoop version

没有配置hbase等信息,报出一堆warning,不过还是安装成功了的。

二、sqoop连接关系型数据库

以oracle为例,上传一个oracle 的 jdbc 到 sqoop的lib目录里。

执行指令: sqoop eval --query 'SQL语句' --connect ... --username ... --password ...

可以看到oracle数据库连接成功。更多指令帮助可以输入  sqoop help 查看。

比如:list-databases    list-tables 等

三 、sqoop从oracle中导出表数据到hadoop-hdfs

sqoop的lib目录中放好jdbc的jar包就可以关联符合JDBC规范的数据库了,连接hadoop需要mapreduce相关的jar包。上面指定了HADOOP_COMMON_HOME 和 HADOOP_MAPRED_HOME路径。但是在执行sqoop的时候还是抛出找不到class的异常,可能是HADOOP_MAPRED_HOME没有加入到CLASSPATH的原因吧,暂时放一放。

3.1 拷贝hadoop的相关jar包到sqoop的lib目录下(一劳永逸,如果hadoop都换了那么sqoop估计也要换了。。。)

hadoop安装路径下share/hadoop/mapreduce/ 的所有jar包到 sqoop安装路径下的lib文件夹

强迫症不想copy hadoop的jar包的话看下面的bin/configure-sqoop文件的配置

3.2 运行sqoop导出oracle表数据到hdfs

这样,运行sqoop的import指令就能从oracle中拷贝table数据到hadoop的hdfs了。

sqoop import --table --target-dir 'hdfs路径' ... -m N(并发数) --connect ... --username ... --password ...

查看导入的数据

hadoop fs -ls 'hdfs路径'

hadoop fs -cat 'hdfs路径/文件名'

注:sqoop import指令中-m N参数中的N指定并发数,几个并发就会在hdfs中生成几个文件+_success文件。

默认分割符是逗号,如果想修改的话 执行sqoop指令的时候添加 -help 看一下指定分割符的参数吧。

3.3 关于bin/configure-sqoop启动脚本

 好奇为什么sqoop import执行后会输出QFtest??是因为,修改了sqoop_home路径下bin目录中的configure-sqoop文件

添加测试输出只是想看看配置在conf目录下的sqoop-env.sh是否生效了。

这个文件需要关注一下:

1. 里面有对sqoop关联zookeeper、hbase、hive等配置的检查,检查到空的时候会提示warning,注释掉就不那么烦了。

2. 可能有对CDH的支持,hadoop_common_home和hadoop_mapred_home等配置如果为空会写死成CDH的默认配置

3. 我配置了hadoop_mapred_home,但是执行的时候还是抛出找不到class的异常,怀疑是classpath没有加进去的原因

OK,经过检查,在bin/configure-sqoop中确实没有将sqoop-env.sh中配置的HADOOP_MAPRED_HOME路径下的jar包配置到SQOOP_CLASSPATH中。如下图中,add hadoop mapreduce jar to sqoop classpath。。。这两行是我加上去的,功能是将HADOOP_MAPRED_HOME指定的路径下所有jar包都添加到SQOOP_CLASSPATH配置上。

不放心的话文件尾再加上一句输出 echo ...

这样就不用拷贝hadoop的share/hadoop/mapreduce路径下的jar包了。sqoop可以直接读取该路径下的jar包资源执行任务。

猜你喜欢

转载自blog.csdn.net/qq_15903671/article/details/86703406