1. Sqoop
1.1 Sqoop介绍
-
Sqoop 是一个在结构化数据和 Hadoop 之间进行批量数据迁移的工具
-
结构化数据可以是MySQL、Oracle等关系型数据库
-
把关系型数据库的数据导入到 Hadoop 与其相关的系统
-
把数据从 Hadoop 系统里抽取并导出到关系型数据库里
-
-
底层用 MapReduce 实现数据
- 命令执行过程中,map 0% ,Reduce0%----》map 100% ,Reduce 100%
-
id | name | age |
---|---|---|
1 | zhangsan | 18 |
1.2 Sqoop安装
-
下载、上传、解压、重命名和授权
- https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.3.7/sqoop-1.3.7.bin__hadoop-2.6.0.tar.gz
-
上传到 /home/hadoop 目录,直接在xshell拖拽进入家目录即可
-
#Sqoop的安装 sudo tar -xvf sqoop-1.3.7.bin__hadoop-2.6.0.tar.gz -C /usr/local #改名 sudo mv /usr/local/sqoop-1.3.7.bin__hadoop-2.6.0/ /usr/local/sqoop #授权 sudo chown -R hadoop /usr/local/sqoop
1.3 Sqoop配置和验证
1.3.1 sqoop配置
#1、修改配置文件
mv /usr/local/sqoop/conf/sqoop-env-template.sh /usr/local/sqoop/conf/sqoop-env.sh
# 进入配置目录,把各个组件的路径写入
cd /usr/local/sqoop/conf/
sudo vim sqoop-env.sh
#2、上传 jar 文件
cd /usr/local/sqoop/lib/
#2.1 上传 MySQL 的驱动文件,拖拽上传进xshell
#2.2拷贝 hive 的驱动文件
cp /usr/local/hive/lib/hive-common-2.3.7.jar /usr/local/sqoop/lib/
#3、配置环境变量
#编辑环境变量
vim /home/hadoop/.bashrc
#在环境变量最后添加以下内容
export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
#刷新环境变量
source /home/hadoop/.bashrc
#验证是否安装成功
sqoop version
1.3.2 在MySQL中创建sqoop用户
#查看管理员账户和密码
sudo cat /etc/mysql/debian.cnf
#用查看的账户和密码登录
mysql -u debian-sys-maint -p
#登录成功再执行下面命令,可参考下图
#创建sqoop用户,
create user 'sqoop'@'%' identified by '123456';
#并对用户授权
grant all privileges on sqoop.* to 'sqoop'@'%';
#刷新使授权生效
flush privileges;
#退出
exit;
执行MySQL示例:
1.3.3 验证sqoop是否成功运行及常见错误:
- #测试能否成功连接数据库
#测试能否成功连接数据库
sqoop list-databases --connect jdbc:mysql://master:3306/?useSSL=false --username sqoop --password 123456
使用命令报错时:
#测试能否成功连接数据库 sqoop list-databases --connect jdbc:mysql://master:3306/?useSSL=false --username sqoop --password 123456
**报错信息如下:**ERROR manager.CatalogQueryManager: Failed to list databases
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
完整信息在下面:
Warning: /usr/local/sqoop/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /usr/local/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 。。。 at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) at org.apache.sqoop.Sqoop.main(Sqoop.java:252) Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect