一、Sqoop
1 官网
http://sqoop.apache.org/
2 概述
1、用于结构化数据存储(如传统关系型数据库)和Hadoop之间的数据传输
2、Sqoop的核心设计思想是利用MapReduce加快数据传输速度,即Sqoop的导入和导出功能是通过基于Map Task(只有Map)的MapReduce作业完成,因此Sqoop是一种批处理方式进行数据传输,难以实现实时的数据进行导入和导出
3 特点
优点:可以将跨平台的数据进行整合
缺点:不灵活
mysql <--> hdfs
mysql --> hive
mysql -->hbase
import:从关系型数据库到hadoop
export:从hadoop到关系型数据库
4 安装
1、解压配置环境变量
(1)tar -zxvf /home/sqoop... -C /usr/local/sqoop...
(2)vi /etc/profile
添加如下内容:
export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
2、mv ./conf/sqoop-env-template.sh ./conf/sqoop-env.sh
3、配置文件:vi ./conf/sqoop-env.sh
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.8.5/
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.8.5/
export HIVE_HOME=/usr/local/hive-1.2.1/
export ZOOCFGDIR=/usr/local/zookeeper-3.4.7/
4、将mysql的驱动包导入到sqoop安装目录下的lib包下面
cp /home/mysql-connector-java-5.1.18.jar ./lib/
5、启动测试:
sqoop version
sqoop help
5 Demo
1 查看数据库
sqoop list-databases --connect jdbc:mysql://hadoop01:3306 \
--username root --password 123456
2 查看数据表
//查看test数据库中的数据表
sqoop list-tables \
--connect jdbc:mysql://hadoop01:3306/test \
--username root --password 123456
3 HDFS <-- Mysql 导入
–table
//将数据从Mysql中导入HDFS中
//方法1 使用--table
1、
[root@hadoop01 ~]# hdfs dfs -mkdir -p /sqoopdata/test
2、
sqoop import --connect jdbc:mysql://hadoop01:3306/test \
--driver com.mysql.jdbc.Driver \
--username root --password 123456 \
-m 1 \
--table user \
--target-dir hdfs://hadoop01:9000/sqoopdata/test/t3
3、
[root@hadoop01 ~]# hdfs dfs -cat /sqoopdata/test/t1/*
–query
//方法2 使用--query
sqoop import --connect jdbc:mysql://hadoop01:3306/test \
--driver com.mysql.jdbc.Driver \
--username root --password 123456 \
-m 1 \
--split-by user_id \
--fields-terminated-by '\t' \
--query 'SELECT s1.* FROM u2 s1 where $CONDITIONS' \
--as-textfile \
--target-dir hdfs://hadoop01:9000/sqoopdata/test/t4
4 HDFS --> Mysql 导出
//将数据从HDFS中导出到Mysql中
sqoop export \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table u3 \
--input-null-string '' \
--input-null-non-string '' \
--export-dir hdfs://hadoop01:9000/sqoopdata/test/t3/*
5 Hive <-- Mysql 全量导入
1、
create table xry.u4(
user_id bigint,
user_name string,
trade_time string
)
;
2、
sqoop import --connect jdbc:mysql://hadoop01:3306/test \
--driver com.mysql.jdbc.Driver \
--username root --password 123456 \
--table u2 \
-m 1 \
--hive-import \
--hive-table xry.u4
3、
select * from xry.u4;
6 Hive <-- Mysql 增量导入
//将test.u2表中,user_id大于4的行,追加到hive的xry.u4表中
sqoop import --connect jdbc:mysql://hadoop01:3306/test \
--driver com.mysql.jdbc.Driver \
--username root --password 123456 \
--table u2 \
--incremental append \
--check-column user_id \
--last-value 4 \
-m 1 \
--hive-import \
--hive-table xry.u4
6 Error
1 mysql2hdfs
ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
原因:配置文件中缺少环境变量
解决方法:vi /etc/profile,添加下面的环境变量
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
参考文章1链接:https://www.cnblogs.com/abcdwxc/p/8981543.html
参考文章2链接:https://blog.youkuaiyun.com/b_x_p/article/details/79180719
2 mysql2hdfs:
FAILED: SemanticException [Error 10072]: Database does not exist: xry
原因:
sqoop的conf目录下需要添加hive-site.xml配置文件
解决方法:
[root@hadoop01 ~]# cp /usr/local/hive-1.2.1/conf/hive-site.xml /usr/local/sqoop/conf/
参考文章1链接:https://www.cnblogs.com/zuoql/p/10149351.html
参考文章2链接:https://blog.youkuaiyun.com/qq_24326765/article/details/82713874