Sqoop[01]安装、数据导入/导出hive(Hadoop2.0)
准备环境
资源列表
本次使用到的软件和应用版本如下
软件/安装包 | 软件/安装包版本 |
---|---|
VMware | VMware® Workstation 16 Pro |
Xshell | 6 |
filezilla | 3.7.3 |
WinSCP | 5.17.6 |
Sqoop | sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz |
JDBC | mysql-connector-java-5.1.4.tar.gz |
Mysql | 5.1.73 |
Hadoop2.0
准备多台虚拟机并配置hadoop2.0环境,安装hadoop2.0和zookeeper,启动DFS和ZKFC服务,安装hive
详见链接:
Hadoop[03]启动DFS和Zookeeper(Hadoop2.0)
Hive[01]安装hive(Hadoop2.0)
设置时间同步
虚拟机①、②、③
多台虚拟机部分数据如下
编号 | 主机名 | 主机域名 | ip地址 |
---|---|---|---|
① | Toozky | Toozky | 192.168.64.220 |
② | Toozky2 | Toozky2 | 192.168.64.221 |
③ | Toozky3 | Toozky3 | 192.168.64.222 |
启动zookeeper与dfs
虚拟机①、②、③
zkServer.sh start
虚拟机①
以虚拟机①为namenode为例
start-all.sh
安装Sqoop
配置yum
虚拟机①
由于centos6默认yum下载源已经改变了网址若未修改yum的下载源
需要重新配置yum
sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
yum clean all
yum makecache
安装sqoop
使用filezilla将sqoop上传至虚拟机①的root目录
虚拟机①
解压sqoop
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
设置/home/sqoop1.4.6的链接
ln -sf /root/sqoop-1.4.6.bin__hadoop-2.0.4-alpha /home/sqoop1.4.6
修改配置
profile
虚拟机①
在/etc/profile配置环境变量
vi /etc/profile
按G光标移动到文末,insert进入编辑
文末另起一行,输入sqoop的环境变量
#Sqoop
export SQOOP_HOME=/root/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=:$PATH:$SQOOP_HOME/bin
按ESC退出编辑
输入:wq
保存退出
刷新/etc/profile
source /etc/profile
sqoop-env.sh
虚拟机①
配置sqoop-env.sh文件
在sqoop安装目录下的conf目录下,复制sqoop-env-template.sh命名为sqoop-env.sh
cd /home/sqoop1.4.6/conf/
cp sqoop-env-template.sh sqoop-env.sh
configure-sqoop
虚拟机①
编辑sqoop安装目录下的bin目录下,编辑configure-sqoop
(此步不做不影响使用,只是运行时会检查xx未安装错误)
cd /home/sqoop1.4.6/bin/
vi configure-sqoop
由于目前没有安装配置HBASE、HCAT、ACCUMULO,需要注释掉HBASE_HOME、HCAT_HOME、ACCUMULO_HOME、的检查(没有安装配置什么就注释什么)
按a或insert进入编辑,注释相关代码行
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HBASE_HOME}" ]; then
# echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
# echo 'Please set $HBASE_HOME to the root of your HBase installation.'
#fi
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#if [ ! -d "${ACCUMULO_HOME}" ]; then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
# echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
#fi
按ESC退出编辑
输入:wq
保存退出
mysql-connector-java-5.1.4-bin.jar
虚拟机①
将JDBC链接驱动jar包,mysql-connector-java-5.1.4-bin.jar复制到sqoop目录下的lib目录
用filezilla将mysql-connector-java-5.1.4-bin.jar发送到虚拟机①的root目录
cd
cp mysql-connector-java-5.1.4-bin.jar /root/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
其他调整
安装mysql
如linux下未安装mysql需要安装mysql,如已安装mysql此步跳过
安装mysql
mysql版本为5
yum install mysql-server
service mysqld start
chkconfig --level 345 mysqld on
赋予mysql远程连接权限
虚拟机①
进入mysql,为虚拟机①、②、③域名赋予所有权限
mysql
grant all on *.* to root@'Toozky' identified by '123456';
grant all on *.* to root@'Toozky2' identified by '123456';
grant all on *.* to root@'Toozky3' identified by '123456';
grant all on *.* to root@'192.168.64.1' identified by '123456';
这里的192.168.64.1
是本机win+s→cmd→ipconfig→vm8的ipv4地址(虚拟机NAT连接),为了本机远程连接linux的mysql(navicat)
设置mysql默认编码格式
虚拟机①
修改mysql的配置文件,设置默认编码格式为utf8
vi /etc/my.cnf
按a或insert进入编辑,光标移动到相关属性[mysql]、[mysqld]下方任意行
另加行
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
按ESC退出编辑
输入:wq
保存退出
重启mysql服务
service mysqld restart
进入mysql验证修改情况
mysql
show variables like 'character%';
取消勾选X11转移
当Xshell连接虚拟机输入命令时出现:WARNING! The remote SSH server rejected X11 forwarding request.
需要取消勾选X11转移
Xshell
右键左侧会话中的虚拟机①、②、③的会话连接
点击属性
点击隧道→取消勾选转发X11连接到→点击确定
导入hive、从hive导出
Linux下mysql到HDFS/Hive
HDFS/Hive严格意义上都属于Hadoop的dfs,HIve只是遵守一定规则存储的HDFS,通过Hive可以将数据文件以类似数据库表示的输出格式
所以本质上还是都是Hadoop的dfs
虚拟机①
测试将mysql中的mysql库的user表,存储到HDFS的/input/t_user
sqoop import \
--connect jdbc:mysql://Toozky:3306/mysql \
--driver com.mysql.jdbc.Driver \
--username root \
--password 123456 \
--table user \
--target-dir /input/t_user -m 1
连接地址为mysql主机域名:mysql端口/mysql库
若连接驱动为8+,则为com.mysql.cj.jdbc.Driver
target-dir
后跟目标上传至dfs的目录/input/t_user
Hadoop文件系统为分块存储,每个分块存储的数据可以备份多个(随机散布在各存储节点上)
其中-m 1
意为,数据只存储一份(无额外备份)
Hive到Mysql
hive导到mysql时
需要先创建同结构的空表,接收数据
虚拟机①
创建测试表test_user并上传至hive用于测试hive导到mysql
在mysql中创建测试库test
mysql
DROP DATABASE IF EXISTS test;
CREATE DATABASE test;
use test;
在test库创建测试表test_user
DROP TABLE IF EXISTS `test_user`;
CREATE TABLE `test_user` (
`uid` int(11) DEFAULT NULL,
`uname` varchar(255) DEFAULT NULL
);
将test_user表复制为表test_user_copy,用于接收Hive中上传的test_user表
create table test_user_copy like test_user;
向test_user表添加测试数据
insert into test_user(uid,uname) values(1,'张三');
insert into test_user(uid,uname) values(2,'lisi');
测试录入情况
select * from test_user;
退出mysql
exit
将test_user上传至HDFS的/input/test_user
sqoop import \
--connect jdbc:mysql://Toozky:3306/test \
--driver com.mysql.jdbc.Driver \
--username root \
--password 123456 \
--table test_user \
--target-dir /input/test_user -m 1
浏览器访问HDFS页面,查看上传情况
将hive中的/input/test_user导出到mysql的test库的test_user_copy表中
sqoop export \
--connect jdbc:mysql://Toozky:3306/test \
--username root \
--password 123456 \
--table test_user_copy \
--num-mappers 1 \
--export-dir /input/test_user
--num-mappers 1
为只启动一个task
若数据表自定义了分隔符,需要在导出语句中加--input-fields-terminated-by "\t";
\t
为分隔符
虚拟机①进入mysql
查看test_user_copy验证数据导出情况
mysql
use test
select * from test_user_copy;
windows mysql导入到hive
win10 mysql
mysql版本8+
win+s输入cmd右键以管理员进入命令提示符
mysql -u root -p
输入mysql的密码进入mysql后
为虚拟机①、②、③赋予访问权限
创建①、②、③域名的相关root用户的mysql账号
use mysql;
CREATE USER 'root'@'Toozky' IDENTIFIED BY '123456';
CREATE USER 'root'@'Toozky2' IDENTIFIED BY '123456';
CREATE USER 'root'@'Toozky3' IDENTIFIED BY '123456';
修改加密格式
ALTER USER 'root'@'Toozky' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'Toozky2' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'Toozky3' IDENTIFIED WITH mysql_native_password BY '123456';
赋予全部权限
grant all privileges on *.* to root@'Toozky';
grant all privileges on *.* to root@'Toozky2';
grant all privileges on *.* to root@'Toozky3';
刷新权限,并查询账号情况
flush privileges;
select user, host from user;
查看win10的ip地址
cmd中输入ipconfig
以10.1.253.235为win10的ip地址例
IPv4 地址 . . . . . . . . . . . . : 10.1.253.235
虚拟机①
将windows的mysql中的mysql库的user上传到hive的myhive库的t_win10_user表中
sqoop import \
--connect jdbc:mysql://10.1.253.235:3306/mysql \
--username root \
--password 123456 \
--table user \
--hive-import \
--target-dir /user/hive/warehouse/myhive.db/t_win10_user -m 1
--connect
ip地址为windows主机的ip地址
--target-dir
的hive数据目录可在HDFS中查看复制得到
浏览器访问HDFS,找到上传文件,验证导入情况
以上就是本期总结的全部内容,愿大家相互学习,共同进步!