Sqoop1.99.7将MySQL数据导入到HDFS中
准备
本示例将实现从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
# 设置交互的命令行打印更多信息,打印的异常信息更多set option --name verbose --value true# 连接sqoop,其中hadoop1是需要连接的sqoop的主机名set server --host hadoop1 --port 12000--webapp sqoop# 查看连接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,过程如下
sqoop:000> create link -connector generic-jdbc-connectorCreating link for connector with name generic-jdbc-connectorPlease fill following values to create new link objectName: mysql-linkDatabase connectionDriverclass: com.mysql.jdbc.DriverConnectionString: jdbc:mysql://10.25.40.37/testUsername: rootPassword:*********FetchSize:ConnectionProperties:There are currently 0 values in the map:entry# protocol=tcpThere are currently 1 values in the map:protocol = tcpentry#SQL DialectIdentifier enclose:New link was successfully created with validation status OK and name mysql-linksqoop:000>
以上输入项说明,下图中红色的表示需要输入的内容。
注意Identifier enclose项需要输入一个空格,然后回车 
创建hdfs-link
创建HDFS的link的配置就比较简单,配置HDFS访问地址和hadoop配置文件目录路径即可
sqoop:000> create link -connector hdfs-connectorCreating link for connector with name hdfs-connectorPlease fill following values to create new link objectName: hdfs-linkHDFS clusterURI: hdfs://hadoop1:9000Conf directory:/usr/local/hadoop/hadoop-2.7.4/etc/hadoopAdditional configs::There are currently 0 values in the map:entry#New link was successfully created with validation status OK and name hdfs-linksqoop:000>

创建job
创建job时,配置项较多。
命令:
# create job -f formLinkName -t toLinkNamecreate 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
命令
# start job -name jobNamestart 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主机中的授权信息改了
- 直接改mysql库中user表root的那条记录,将其值改为%(表示任何主机都可访问)

- 使用授权命令,授权指定的主机可访问该数据库(推荐:更安全)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;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是用户组的意思。
<property><name>hadoop.proxyuser.sqoop2.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.sqoop2.groups</name><value>*</value></property>
解决方案:
将sqoop2改为root即可,改完后如下:(PS:这里的解决方案感觉还是有问题不完美,没有深入了解)
<property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></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节点数据的问题
解决方案:
- 配置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
- 删除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配置文件 ,增加如下配置:
<property><name>mapreduce.jobhistory.address</name><!-- 配置实际的主机名和端口--><value>{namenode}:10020</value></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中的更多相关文章
- 使用 sqoop 将mysql数据导入到hdfs(import)
Sqoop 将mysql 数据导入到hdfs(import) 1.创建mysql表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` va ...
- 使用sqoop将mysql数据导入到hive中
首先准备工具环境:hadoop2.7+mysql5.7+sqoop1.4+hive3.1 准备一张数据库表: 接下来就可以操作了... 一.将MySQL数据导入到hdfs 首先我测试将zhaopin表 ...
- Logstash:把MySQL数据导入到Elasticsearch中
Logstash:把MySQL数据导入到Elasticsearch中 前提条件 需要安装好Elasticsearch及Kibana. MySQL安装 根据不同的操作系统我们分别对MySQL进行安装.我 ...
- 使用Logstash把MySQL数据导入到Elasticsearch中
总结:这种适合把已有的MySQL数据导入到Elasticsearch中 有一个csv文件,把里面的数据通过Navicat Premium 软件导入到数据表中,共有998条数据 文件下载地址:https ...
- Sqoop mysql 数据导入到hdfs
1.--direct 模式使用mysqldump 工具,所以节点上需要安装该工具,非direct 模式直接使用jdbc ,所以不需要 具体script参考如下: sqoop import --conn ...
- Talend 将Oracle中数据导入到hive中,根据系统时间设置hive分区字段
首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据导入到HDFS中:建立hive连接->hive建表->tJava获取系 ...
- Sqoop将mysql数据导入hbase的血与泪
Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天) 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunsh ...
- 使用 sqoop 将mysql数据导入到hive表(import)
Sqoop将mysql数据导入到hive表中 先在mysql创建表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` varchar() ...
- 【甘道夫】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 ...
随机推荐
- 201521123004 《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 答:从ArrayList ...
- 201521123073 《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: ...
- 201521123066 《Java程序设计》 第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.clone方法 1.1 Object对象中的clone ...
- 201521123077 《Java程序设计》第2周学习总结
1. 本周学习总结 动态数组 标识控制符的意义 ArrayList ,BigDecimal,BigInteger 等类的使用 组合,继承,多态等概念的了解 2. 书面作业 Q1.使用Eclipse关联 ...
- 201521123023《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. (1)File可以表示一个特定文件的名称,也能表示一个目录下的一组文件的名称. (2)继承自InputStre ...
- 201521123050 《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避 ...
- JAVA课程设计 计算器模拟程序 王华俊(201521123015)
1.团队课程设计博客链接 http://www.cnblogs.com/yuanj/p/7072137.html 2.个人负责模块或任务说明 GUI界面设计 各类之间拼接 3.自己的代码提交记录截图 ...
- python 实现文本文件中的数字按序排序(位操作,低内存占用)
文本文件内容 ./txt 3241155299893344 处理代码: import sys a = bytearray(b'') for i in range(100): a.append(or ...
- xml是什么,为什么要用xml
XML概念 众所周知,xml常用语数据存储和传输,文件后缀为 .xml: 它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言. 标记,指计算机所能理 ...
- mongodb 在windows下面进行分片
在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对. 一:分片 mongo ...