1.上传并解压
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
创建软连接
Ln -s sqoop............ sqoop
2.修改配置文件
1)切换到sqoop配置文件目录
cd /home/hadoop/app/sqoop/conf
2) 复制配置文件并重命名
cp sqoop-env-template.sh sqoop-env.sh
3) vim sqoop-env.sh 编辑配置文件,并加入以下内容(以下是我hadoop,zookeeper,hbase,hive安装路径)
export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop
export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop/share/hadoop/mapreduce
export HBASE_HOME=/home/hadoop/app/hbase
export HIVE_HOME=/home/hadoop/app/hive
export ZOOCFGDIR=/home/hadoop/app/zookeeper/conf
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
4) 切换到bin目录
cd /home/hadoop/app/qoopbin
# vim configure-sqoop 修改配置文件,注释掉没用的内容(就是为了去掉警告信息)
3.修改环境变量
vim ~/.bashrc
# 将sqoop的目录加入环境变量
1)添加mysql连接驱动
sqoop可能会用到MySQL导入到hdfs上,就需要myssql驱动
cp mysql-connector-java-5.1.49.jar /home/hadoop/app/sqoop/lib/
常见错误
错误:如何寻找sqoop-1.4.6.jar文件包,解决找不到或无法加载主类org.apache.sqoop.sqoop的问题
解决方案:
1.sqoop-1.4.x.tar.gz在1.4.5以上的安装包已经没有了这个jar包,必须下载sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar.gz这个安装包。
2.然后解压这个安装包,打开安装包取出sqoop-1.4.6.jar放在hadoop的lib下,或者放到share/hadoop/yarn下.
3.再次导入数据,查看报错是否存在,一般情况都会解决。
4.测试检查连通性
1)测试
sqoop version
2)测试MySQL连通性
sqoop list-databases -connect jdbc:mysql://master:3306/ -username root -password 123456
5.脚本
再执行脚本之前打开zookeeper,hdfs,yarn (sqooo用的就是mapreduce)
import
--connect
jdbc:mysql://master:3306/student
--username
root
--password
123456
--table
student
--m
2
--split-by
age
--target-dir
/sqoop/data/student
--fields-terminated-by
','
执行脚本:
sqoop --options-file MySQLToHDFS.conf
注意事项:
1、--m 表示指定生成多少个Map任务,不是越多越好,因为MySQL Server的承载能力有限
2、当指定的Map任务数>1,那么需要结合--split-by参数,指定分割键,以确定每个map任务到底读取哪一部分数据,最好指定数值型的列
3、如果指定的分割键数据分布不均,可能导致数据倾斜问题
4、编写脚本的时候,注意:例如:--username参数,参数值不能和参数名同一行
2)MysqlToHive
import
--connect
jdbc:mysql://master:3306/student
--username
root
--password
123456
--table
score
--fields-terminated-by
"\t"
--lines-terminated-by
"\n"
--m
2
--split-by
student_id
--hive-import
--hive-overwrite
--create-hive-table
--hive-database
testsqoop
--hive-table
Score
执行脚本:
sqoop --options-file 脚本名
注意:--direct
加上这个参数,可以在导出MySQL数据的时候,使用MySQL提供的导出工具mysqldump,加快导出速度,提高效率
注意:在hive中不能建表
问题:Sqoop异常解决ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException
解决:Hbase和hive的libthrift版本分别是libthrift-0.8.0.jar,libthrift-0.9.0.jar
copy libthrift-0.9.0.jar 到sqoop/lib目录下,问题解决。
再次支持导入语句的时候出现目录已经存在的问题
ERROR security.UserGroupInformation: PriviledgedActionException as:jifeng cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory project already exists
14/09/08 01:28:56 ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory project already exists
删除目录问题解决:
[hadoop@master ~]$ hadoop dfs -rmr /user/hadoop/score
Warning: $HADOOP_HOME is deprecated.
Deleted hdfs://jifeng01:9000/user/jifeng/project
3)MysqlToHbase
import
--connect
jdbc:mysql://master:3306/student
--username
root
--password
123456
--table
student
--hbase-table
student
--hbase-row-key
id
--m
1
--column-family
cf1
注意:在HBase中创建student表
create 'student','cf1'
执行脚本:
sqoop --options-file 脚本名
export
--connect
jdbc:mysql://master:3306/student?useUnicode=true&characterEncoding=UTF-8
--username
root
--password
123456
-m
1
--columns
id,name,age,gender,clazz
--export-dir
/sqoop/data/student/
--fields-terminated-by
','
--table
Student
注意:先清空MySQL student表中的数据,不然会造成主键冲突
执行脚本:
sqoop --options-file 脚本名