Sqoop[01]安装、数据导入/导出hive(Hadoop2.0)

Sqoop[01]安装、数据导入/导出hive(Hadoop2.0)


准备环境

资源列表

本次使用到的软件和应用版本如下

软件/安装包软件/安装包版本
VMwareVMware® Workstation 16 Pro
Xshell6
filezilla3.7.3
WinSCP5.17.6
Sqoopsqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
JDBCmysql-connector-java-5.1.4.tar.gz
Mysql5.1.73

Hadoop2.0

准备多台虚拟机并配置hadoop2.0环境,安装hadoop2.0和zookeeper,启动DFS和ZKFC服务,安装hive

详见链接:
Hadoop[03]启动DFS和Zookeeper(Hadoop2.0)
Hive[01]安装hive(Hadoop2.0)


设置时间同步

详见链接:Linux(CentOS6)设置网络时间同步

虚拟机①、②、③

多台虚拟机部分数据如下

编号主机名主机域名ip地址
ToozkyToozky192.168.64.220
Toozky2Toozky2192.168.64.221
Toozky3Toozky3192.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

--connectip地址为windows主机的ip地址
--target-dir的hive数据目录可在HDFS中查看复制得到
浏览器访问HDFS,找到上传文件,验证导入情况


以上就是本期总结的全部内容,愿大家相互学习,共同进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值