准备

本示例将实现从MySQL数据库中将数据导入到HDFS中 
参考文档: 
http://sqoop.apache.org/docs/1.99.7/user/Sqoop5MinutesDemo.html 
http://blog.csdn.net/m_signals/article/details/53190965 
http://blog.csdn.net/lazythinker/article/details/52064165 
http://blog.sina.com.cn/s/blog_61d8d9640102whof.html 
mysql数据库信息: 
test库中user表中的记录(共1条) 
 
HDFS数据情况 

创建了一个/root/test的空目录 
实现目标: 
本示例需要实现将上方MySQL数据库中的数据导入到HDFS中

开始

启动Hadoop,启动sqoop,命令行进入sqoop

  1. # 设置交互的命令行打印更多信息,打印的异常信息更多
  2. set option --name verbose --value true
  3. # 连接sqoop,其中hadoop1是需要连接的sqoop的主机名
  4. set server --host hadoop1 --port 12000--webapp sqoop
  5. # 查看连接
  6. show version --all

创建link

如果需要使用sqoop进行导入导出操作,需要先创建连接。 
使用show conncetor命令可以查看sqoop支持的连接器。 
而sqoop中默认提供了如下几种连接。 

创建mysql-link

本例实现mysql-->hdfs的数据导入操作,所以需要创建一个mysql的link和hdfs的link。 
注意:在创建mysql-link的时候需要将mysql的jar包放入到$SQOOP2_HOME/server/lib/extra-lib目录中 
首先创建mysql-link,过程如下

  1. sqoop:000> create link -connector generic-jdbc-connector
  2. Creating link for connector with name generic-jdbc-connector
  3. Please fill following values to create new link object
  4. Name: mysql-link
  5. Database connection
  6. Driverclass: com.mysql.jdbc.Driver
  7. ConnectionString: jdbc:mysql://10.25.40.37/test
  8. Username: root
  9. Password:*********
  10. FetchSize:
  11. ConnectionProperties:
  12. There are currently 0 values in the map:
  13. entry# protocol=tcp
  14. There are currently 1 values in the map:
  15. protocol = tcp
  16. entry#
  17. SQL Dialect
  18. Identifier enclose:
  19. New link was successfully created with validation status OK and name mysql-link
  20. sqoop:000>

以上输入项说明,下图中红色的表示需要输入的内容。 
注意Identifier enclose项需要输入一个空格,然后回车 

创建hdfs-link

创建HDFS的link的配置就比较简单,配置HDFS访问地址和hadoop配置文件目录路径即可

  1. sqoop:000> create link -connector hdfs-connector
  2. Creating link for connector with name hdfs-connector
  3. Please fill following values to create new link object
  4. Name: hdfs-link
  5. HDFS cluster
  6. URI: hdfs://hadoop1:9000
  7. Conf directory:/usr/local/hadoop/hadoop-2.7.4/etc/hadoop
  8. Additional configs::
  9. There are currently 0 values in the map:
  10. entry#
  11. New link was successfully created with validation status OK and name hdfs-link
  12. sqoop:000>

创建job

创建job时,配置项较多。 
命令:

  1. # create job -f formLinkName -t toLinkName
  2. create job -f mysql-link -t hdfs-link

注意下面红色部分 
sqoop:000> create job -f mysql-link -t hdfs-link 
Creating job for links with from name mysql-link and to name hdfs-link 
Please fill following values to create new job object 
Name: test1(job名称)

Database source

Schema name: test(数据库的schema名称) 
Table name: user(数据库表名) 
SQL statement: 
Column names: 
There are currently 0 values in the list: 
element# 
Partition column: 
Partition column nullable: 
Boundary query:

Incremental read

Check column: 
Last value:

Target configuration

Override null value: 
Null value: 
File format: 
0 : TEXT_FILE 
1 : SEQUENCE_FILE 
2 : PARQUET_FILE 
Choose: (选择NONE) 
Custom codec: 
Output directory: /root/test(这里输入HDFS文件的目录,需要是空目录) 
Append mode:

Throttling resources

Extractors: (这里是参考官网填的2)

Classpath configuration

Extra mapper jars: 
There are currently 0 values in the list: 
element# 
New job was successfully created with validation status OK and name test1 
sqoop:000>

启动job

命令

  1. # start job -name jobName
  2. start job -name test1

期间遇到的问题及解决方案

以下问题均是创建完link和job后,开始启动job时报的错。

Host '10.25.40.37' is not allowed to connect to this MySQL server


错误原因: 
这问题表示主机10.25.40.37没有授权外部访问其MySQL 
解决方案: 
将连接的MySQL主机中的授权信息改了

  1. 直接改mysql库中user表root的那条记录,将其值改为%(表示任何主机都可访问) 
  2. 使用授权命令,授权指定的主机可访问该数据库(推荐:更安全)
  1. mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
  2. mysql> FLUSH PRIVILEGES;

详细操作步骤可自行百度。

User: root is not allowed to impersonate root


错误原因: 
该错误是因为在安装sqoop时,在hadoop的core-site.xml配置文件中配置的用户权限错误 
在之前的sqoop安装文章里,按照官网的配置如下。其中hadoop.proxyuser.sqoop2.hosts中的sqoop2是用户的意思,同理hadoop.proxyuser.sqoop2.groups中的sqoop2是用户组的意思。

  1. <property>
  2. <name>hadoop.proxyuser.sqoop2.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.sqoop2.groups</name>
  7. <value>*</value>
  8. </property>

解决方案: 
将sqoop2改为root即可,改完后如下:(PS:这里的解决方案感觉还是有问题不完美,没有深入了解)

  1. <property>
  2. <name>hadoop.proxyuser.root.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.root.groups</name>
  7. <value>*</value>
  8. </property>

GENERIC_HDFS_CONNECTOR_0007:Invalid input/output directory - Unexpected exception

输入输出目录有问题,检查HDFS中是否存在相应目录即可

There are 0 datanode(s) running and no node(s) are excluded in this operation


错误原因: 
启动job的时候报的错,这应该是datanode节点数据的问题 
解决方案:

  1. 配置dfs.datanode.data.dir和core-site.xml里面的hadoop.tmp.dir一致 
    hdfs-site.xml里面的 
    dfs.datanode.data.dir 
    /tmp/hdfs_tmp 
    与core-site.xml里面的 
    hadoop.tmp.dir 
    /tmp/hdfs_tmp 
    两个配置应该是指向同一个目录地址,而且必须是一个已经存在的linux目录(不存在目录的话,在启动hadoop时,必须手动创建,否则put文件到hdfs系统时就会报错),今天报这个错就是因为两个配置没有指向同一个目录地址,且两个地址还不存在对应的目录

参考至: 
http://blog.sina.com.cn/s/blog_61d8d9640102whof.html

  1. 删除dfs.namenode.data.dir中的current文件夹中的内容,格式化namenode,重新启动hadoop 
    参考至: 
    http://blog.csdn.net/qiruiduni/article/details/50280943

最后我使用了1解决方案后问题解决了,但是不知道以后会不会有其他问题。

Call From hadoop1/192.168.56.110 to 0.0.0.0:10020 failed on connection exception


问题原因: 
报错信息提示,在访问端口 100020的时候出错,这表示DataNode 需要访问 MapReduce JobHistory Server,而默认值是: 0.0.0.0:10020 。 
解决方案: 
找到{HADOOP_HOME}/etc/hadoop/mapred-site.xml配置文件 ,增加如下配置:

  1. <property>
  2. <name>mapreduce.jobhistory.address</name>
  3. <!-- 配置实际的主机名和端口-->
  4. <value>{namenode}:10020</value>
  5. </property>

这里我的主机名是hadoop1,所以配置的值是hadoop1:10020 
 
参考至: 
http://blog.csdn.net/lazythinker/article/details/52064165

GENERIC_HDFS_CONNECTOR_0007:Invalid input/output directory - Output directory is not empty


错误原因: 
输入或者输出目录不是空目录,本示例的错误原因是之前启动job后,在HDFS里已经导入过一些数据进去。没删除,所以报这个错。 
解决方案: 
删除该目录下的内容即可 
清空上方创建job时指定的output目录(/root/test)中内容即可。

验证是否导入成功

查看HDFS中的/root/test/目录中的数据,共出现了2个文件 

查看文件内容 

可以看到2ea38d69-e9e4-4364-adfc-67d88f5c8153.txt文件中已经存在了导入的数据,而8962bce1-08e7-4ebc-939e-4839d05eb145.txt是个空文件。

Sqoop1.99.7将MySQL数据导入到HDFS中的更多相关文章

  1. 使用 sqoop 将mysql数据导入到hdfs(import)

    Sqoop 将mysql 数据导入到hdfs(import) 1.创建mysql表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` va ...

  2. 使用sqoop将mysql数据导入到hive中

    首先准备工具环境:hadoop2.7+mysql5.7+sqoop1.4+hive3.1 准备一张数据库表: 接下来就可以操作了... 一.将MySQL数据导入到hdfs 首先我测试将zhaopin表 ...

  3. Logstash:把MySQL数据导入到Elasticsearch中

    Logstash:把MySQL数据导入到Elasticsearch中 前提条件 需要安装好Elasticsearch及Kibana. MySQL安装 根据不同的操作系统我们分别对MySQL进行安装.我 ...

  4. 使用Logstash把MySQL数据导入到Elasticsearch中

    总结:这种适合把已有的MySQL数据导入到Elasticsearch中 有一个csv文件,把里面的数据通过Navicat Premium 软件导入到数据表中,共有998条数据 文件下载地址:https ...

  5. Sqoop mysql 数据导入到hdfs

    1.--direct 模式使用mysqldump 工具,所以节点上需要安装该工具,非direct 模式直接使用jdbc ,所以不需要 具体script参考如下: sqoop import --conn ...

  6. Talend 将Oracle中数据导入到hive中,根据系统时间设置hive分区字段

    首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据导入到HDFS中:建立hive连接->hive建表->tJava获取系 ...

  7. Sqoop将mysql数据导入hbase的血与泪

    Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天)  版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunsh ...

  8. 使用 sqoop 将mysql数据导入到hive表(import)

    Sqoop将mysql数据导入到hive表中 先在mysql创建表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` varchar() ...

  9. 【甘道夫】Hadoop2.2.0环境使用Sqoop-1.4.4将Oracle11g数据导入HBase0.96,并自己主动生成组合行键

    目的: 使用Sqoop将Oracle中的数据导入到HBase中,并自己主动生成组合行键! 环境: Hadoop2.2.0 Hbase0.96 sqoop-1.4.4.bin__hadoop-2.0.4 ...

随机推荐

  1. 团队作业8——第二次项目冲刺(Beta阶段)--5.26 sixth day

    团队作业8--第二次项目冲刺(Beta阶段)--5.26 sixth day Day six: 会议照片 项目进展 Beta冲刺的第四天,以下是今天具体任务安排: 队员 昨天已完成的任务 今日计划完成 ...

  2. 结对作业(1)----基于GUI的四则运算

    小伙伴:201421123031 余洋 201421123044  潘志坚  题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...

  3. 团队作业10——复审和事后分析(Beta版本)

    团队作业10--事后分析(Beta版本) http://www.cnblogs.com/newteam6/p/6953992.html 团队作业10--复审(Beta版本) http://www.cn ...

  4. 201521123050 《Java程序设计》第8周学习总结

    1. 本周学习总结 2. 书面作业 1.List中指定元素的删除(题目4-1) 1.1 实验总结 在删除元素时,要注意后续元素位置的前移 2.统计文字中的单词数量并按出现次数排序(题目5-3) 2.1 ...

  5. 201521123004《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 本周主要内容为: 继承:extends 抽取共同特征(行为与属性) 复用代码 继承时子类将获 ...

  6. 201521123049 《JAVA程序设计》 第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. ###1.类型转换(cast):是将两种不同类型的变量进行转换,但不能随意强制转换,随意强制 ...

  7. 201521123024 《Java程序设计》第1周学习总结

    一.本周章学习总结 1.Java的版本迁移 2.运用eclipse和notepad++编写Java 3.对JDK,JRE,JVM有初步的了解 二.书面作业 1.为什么java程序可以跨平台运行?执行j ...

  8. D3--数据可视化实战总结

    d3理解 标签(空格分隔): 未分类 1.绑定数据 [x] 定义:通过循环的方式将数据绑定在dom元素上,每个数据对应一个元素,所以这个数据的值就能来设定dom元素的width,height,x,y坐 ...

  9. org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method test() on null context object

    前言 本文中提到的解决方案,源码地址在:springboot-thymeleaf,希望可以帮你解决问题. 至于为什么已经写了一篇文章thymeleaf模板引擎调用java类中的方法,又多此一举的单独整 ...

  10. 为bookStore添加权限【动态代理和注解】

    前言 目前为止,我们已经学习了动态代理技术和注解技术了.于是我们想要为之前的bookStore项目添加权限控制-.. 只有用户有权限的时候,后台管理才可以进行相对应的操作-.. 实现思路 之前我们做权 ...