简单的Sqoop安装、使用示例

Hadoop相关的东西在版本兼容性方面都很麻烦,这个例子里用的Sqoop是1.4.2, Hadoop是Apache的1.0.4; 本例介绍的方法未必适用其他版本的Sqoop和Hadoop.

1.安装Sqoop

下载、解压

编译

$ant -Dhadoopversion=100 #这里的100表示编译后的Sqoop将与Hadoop 1.0.*结合使用

配置$HADOOP_HOME变量

Sqoop不认$HADOOP_INSTALL变量,只认$HADOOP_HOME, 所以要把$HADOOP_HOME配置到环境变量中

试运行一下

$sqoop version

2.从mysql中导入数据到HDFS

先把HADOOP启起来

MapReduce服务和HDFS服务都要启起来

把mysql jdbc驱动丢到sqoop的类目录下

$cp mysql-connector-java-5.1.6.jar /home/kent/dev/hadoop/sqoop-1.4.2/lib/

执行sqoop import

$sqoop import --connect jdbc:mysql://localhost/kent --username kent --password *** --table user --verbose --target-dir /sqoop/user  --fields-terminated-by '\0001'
##导出后的hdfs文件将在/sqoop/user路径下
##导出后的hdfs文件中列之间将以'\0001'分隔

观察一下控制台输出,

  a. 生成了 /tmp/sqoop-kent/compile/b54fd32800d1ddb50c259c709464a35c/user.java

  b. user.java被编译打包到了/tmp/sqoop-kent/compile/b54fd32800d1ddb50c259c709464a35c/user.jar

  c. 观察Hadoop的控制台,可以看到有新的MapReduce Job产生, 并且这个job只有map任务,没有reduce任务

看下导入后的文件

$hadoop dfs -cat /sqoop/user/part-m-00000

使用direct模式从mysql中导入数据

$sqoop import –connect jdbc:mysql://localhost/kent –username kent –password *** –table user –verbose –target-dir /sqoop/userdirect
–direct  #最后加上–direct参数,sqoop将使用mysqldump工具来读取数据

3.把刚刚导入的数据从HDFS中导回到mysql

在mysql中新建user2表以容纳数据

建表时可以照抄user表的ddl

执行sqoop export

$sqoop export --connect jdbc:mysql://localhost/kent --username kent --password *** --table user2 --verbose --export-dir /sqoop/user --input-fields-terminated-by '\0001' 

观察一下控制台输出,也会发现有java,jar和mapreduce job被产生

看下表中是否有数据

$select * from user2;

疑难解决

引用

Q: sqoop import时完全呆住了,控制台的输出里也没有错误日志; 看hadoop控制台,也没看到任何job生成,怎么回事?

A: 这时应该看hadoop相关的日志,或者直接运行一下jps,检查一下hadoop所有结点是否都已经起起来了

Sqoop的文档在哪里

sqoop文档需要构建出来

$sudo apt-get install asciidoc  #没有这个工具产生不了文档
$ant docs -Dhadoopversion=100

查看文档: file:///home/kent/dev/hadoop/sqoop-1.4.2/build/docs/index.html

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.