Sqoop的安装
测试环境
hive-1.1.0-cdh5.14.0
hbase-1.2.0-cdh5.14.0
hadoop-2.6.0-cdh5.14.0
zookeeper-3.4.5-cdh5.14.0
jdk1.8.0_171
sqoop-1.4.6-cdh5.14.0
1.解压Sqoop到/opt/software下
2.拷贝mysql-connector-java-5.1.40-bin和java-json.jar到sqoop-1.4.6-cdh5.14.0\lib下
3.配置添加环境变量,并使环境变量生效
HIVE_CONF_DIR=/opt/software/hive-1.1.0-cdh5.14.0
SQOOP_HOME=/opt/software/sqoop-1.4.6-cdh5.14.0
HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
HADOOP_COMMON_HOME=/opt/software/hadoop-2.6.0-cdh5.14.0
HADOOP_MAPRED_HOME=/opt/software/hadoop-2.6.0-cdh5.14.0
HADOOP_CLASSPATH=$HIVE_HOME/lib/*
export JAVA_HOME
export HIVE_CONF_DIR
export HADOOP_CLASSPATH
export HADOOP_COMMON_HOME
export HADOOP_MAPRED_HOME
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin:$PIG_HOME/bin:$SQOOP_HOME/bin:$ECLIPSE_HOME:$HADOOP_HOME/sbin:$MAVEN_HOME/bin:$PROTOBUF_HOME/bin:$PHONEIX_HOME/bin:$PATH
export PATH
4.找到 sqoop-env-template.sh,修改为 sqoop-env.sh,并将相关变量的值配上对应路径
mv sqoop-env-template.sh sqoop-env.sh
5.检查sqoop是否正常运行
Sqoop version
Sqoop原理
导入:在导入开始之前,Sqoop使用JDBC来检查将要导入的表,检索出表中所有的字段和字段的数据类型,这些数据类型将会被映射成Java的数据类型,生成反序列化代码和配置InputFormat后,Sqoop将Job发送到集群,使用只有Map的MapReduce任务执行查询并将ResultSet数据反序列化到生成类的实例,这些数据会被保存在SequenceFile文件中,或者在写到HDFS前被转换成分割的文本。在向HDFS导入数据时,重要的是确保访问的是数据源的一致性快照。
导出:将HDFS作为数据源,远程的数据库作为目标,在导出的时候必须在数据库中创建一张用于接收数据的目标表。在执行导出之前,Sqoop会使用JDBC作为导出,然后Sqoop会根据目标表的定义生成一个Java类,这个类能够从文本中解析记录,并且向表中插入类型合适的值。接着启动MapReduce任务,从HDFS中读取数据文件,使用生成的类解析记录,通过JDBC产生一批insert语句,向目标表插入记录,该过程使用多线程操作。在启动导出作业前,应当在数据库中设置表的约束(例如定义一个主键),以保证数据行的唯一性,并且,在导出过程完成前,不要对目标表进行操作以保证数据的完整和一致。