sqoop在关系型数据库与分布式文件系统之间传输数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22830285/article/details/84394062

sqoop用于 hadoop 与关系型数据库之间的数据传递,可以将数据库中的数据导入到hdfs等文件系统,也可以将hdfs 上的数据导入到数据库中。

准备sqoop 软件包 sqoop-1.4.7.bin__hadoop-2.6.0
http://archive.apache.org/dist/sqoop/1.4.7/

一、将sqoop 软件复制到 根目录下
在这里插入图片描述
二、解压软件
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
2.2 重命名 为sqoop
[hadoop@nna ~]$ mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
在这里插入图片描述

三、编辑环境变量:
[hadoop@nna ~]$ sudo vi /etc/profile
追加下面两句
export SQOOP_HOME=/home/hadoop/sqoop
export PATH= P A T H : PATH: SQOOP_HOME/bin
重起环境变量
[hadoop@nna ~]$ source /etc/profile
3.2 修改sqoop1 的脚步
在sqoop-env.sh 脚本中,修改环境变量路径。

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.7.7
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.7.7

四、加载驱动包,因为要跟数据库连接,要有相应的数据库的驱动,这里以mysql为例。
mysql-connector-java-5.1.46-bin.jar
https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.zip
hadoop-common-2.7.7.jar
hadoop的jar包,可以在hadoop安装包lib 文件下找。
在这里插入图片描述

五、导入:将mysql 数据库中的数据导入分布式文件系统,
在这里插入图片描述

sqoop import --connect jdbc:mysql://192.168.80.1:3306/test   #连接数据库驱动
--username root #用户名
 --password 123456  # 密码
 --table sqoop        #表名字
  --fileds-terminated-by  ','  #行的字段分隔符  
  --null- string '**'  # 若字符为空则用*代替
  -m 1  #指定任务执行过程当中使用map 的任务数
  --append 
  --target-dir '/sqoop/'  #输出到HDFS的文件路径
  --where 'id>1'   #查询条件

在这里插入图片描述
生成的格式就是这样。
在这里插入图片描述

六、HDFS 导出数据到mysql,需要导出的数据格式为:
在这里插入图片描述

sqoop export 
--connect jdbc:mysql://192.168.80.1:3306/test 
--username root 
--password 123456 
--table sqoop --fields-terminated-by ',' 
--export-dir '/sqoop_exports/export.txt'  #需要导出的文件
--batch  #批量导出
--update-key id   #设定主键
--update-mode allowinsert  #指定如何更新表中的数据

在这里插入图片描述
查看mysql 数据库是否导出成功。
在这里插入图片描述

9、踩抗记!!!
9.1 ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: null, message from server: "Host ‘nna’ is not allowed to connect to this MySQL server"
nna 禁止连接win 系统的mysql,应该是win 的mysql 没有开启远程连接
在这里插入图片描述
参照: https://www.2cto.com/database/201205/132457.html

9.2 Generating splits for a textual index column allowed only in case of “-Dorg.apache.sqoop.splitter.allow_text_splitter=true” property passed as a parameter
在这里插入图片描述
在导入的时候遇到的错误,解决办法是在import后面加入 -Dorg.apache.sqoop.splitter.allow_text_splitter=true

9.3 org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException): Invalid resource request, requested memory < 0, or requested memory > max configured, requestedMemory=1536, maxMemory=1024
在这里插入图片描述

最后执行成功的时候我们可以看到,sqoop 数据迁移,其实用的也是mapreduce,出现这原因是yarn 资源管理给予的yarn.nodemanager.resource.memory-mb 内存不够大,默认是1536。
在这里插入图片描述
解决办法:在yarn-site.xml 追加下面两个属性:

<property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2500</value>
</property>
<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2500</value>
</property>

猜你喜欢

转载自blog.csdn.net/qq_22830285/article/details/84394062
今日推荐