Sqoop批量数据导入导出工具操作实训

it2023-07-18  69

sqoop实验的准备实验:NAT模式去访问外网,yum源阿里源, 目的是安装Mysql,很复杂 rpm安装mysql很复杂 缺少很多依赖库需要安装;sqoop并不依赖于mysql,只是sqoop的实验用到了mysql   

sqoop是批量数据的导入导出工具,是利用mapreduce job来实现的 安装并使用sqoop的实验内容:实现数据从HDFS=》Mysql, 数据从 Mysql=》HDFS  

实验一:虚拟机连接互联网的配置

目标:虚拟机连互联网 ,虚拟机执行ping www.baidu.com能ping通百度域名,ping mirrors.aliyun.com能ping通阿里云的数据源镜像域名mirrors.aliyun.com

实验步骤: 1)使用伪分布式的虚拟机做实验,先把仅主机模式配置好,确保xshell能连上虚拟机 2)Vmware仅主机模式下,物理主机执行ping 192.168.56.10能ping通虚拟机;虚拟机执行ping 192.168.56.1能ping通物理主机,但是虚拟机执行ping 10.100.236.59不能ping通物理主机,提示“connect: 网络不可达”(10.100.236.59是物理主机实际的IP地址,每台电脑都不一样,自己查看自己的IP) 原因是仅主机模式Vmnet1虚拟网络是一个隔绝的独立网络,无法和机房的网络连通(机房网络IP是10.100.236.0网段) ============下面开始配置NAT模式联网=========== 3)Vmware虚拟网络编辑器=》【添加网络】=》选择“NAT模式”=》不勾选“使用本地DHCP服务”,记住自动分配的子网IP,例如192.16.20.0,注意网关IP GATEWAY=192.168.20.2  如图所示:

4)在Vmware菜单=》虚拟机=》设置=>【添加】=》硬件类型“网络适配器”,右边选“自定义”=》“Vmnet2(NAT模式)”=》点【确定】,给虚拟机Linux增加一个网络适配器,如图所示:

 

5)执行reboot重启虚拟机,重启后执行ip a命令或ifconfig命令,查看新增加的网络接口(网络适配器)名称,例如eno16777736,并记住mac地址00:0c:29:ca:c3:f8(每台虚拟机可能都不一样,以自己电脑上为准)

6)执行cd /etc/sysconfig/network-scripts/ 切换到网络接口配置文件所在目录,再执行ls命令,查看网络接口eno16777736对应的配置文件为ifcfg-eno16777736(注意:系统肯定不会自动生成这个配置文件, 执行cp ifcfg-enp0s8  ifcfg-eno16777736命令,从其他网络接口的配置文件复制一个新的配置文件并一些修改即可) 7)执行 vi ifcfg-eno16777736  内容修改如下:

TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=0122fb16-78af-4802-bacf-5e8444945fce DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.20.10 NETMASK=255.255.255.0 HWADDR=00:0c:29:ca:c3:ee GATEWAY=192.168.20.2 DNS1=192.168.20.2

如图所示:

特别注意:标红色的配置参数值,必须以自己电脑的虚拟机实际的值为准,例如网络接口名称,设备名称,IP地址,硬件地址,网关,DNS等 配置完成后记得reboot重启,在Linux执行ping www.baidu.com或ping mirrors.aliyun.com应该能够ping通!!! 注意:如果只能ping通百度的服务器IP地址(在win7的cmd命令行执行ping www.baidu.com可以看到百度服务器的IP地址),则还需要配置一个域名服务参数DNS1=192.168.20.2;

小技巧:如果正确配置了DNS域名服务器后仍无法Ping通域名,可以把IP地址和mirrors.aliyun.com的映射关系添加到配置文件/etc/hosts中,执行命令  vi /etc/hosts 末尾添加IP和域名的映射(在win7的cmd命令行执行ping mirrors.aliyun.com可以查看到阿里源的IP地址, 例如IP地址是58.49.194.241 以实际IP地址为准!!):

58.49.194.241  mirrors.aliyun.com    

实验二  使用YUM方式安装Mysql数据库(完成实验一才能执行本实验)

1)检查系统是否安装有Mysql  a)执行yum list installed mysql* 可能会输出:已安装的软件包mysql-connector-java.noarch                                                                     mysql-connector-odbc.x86_64 b)执行rpm -qa|grep mysql*  可能会输出:mysql-connector-odbc-5.2.5-8.el7.x86_64 mysql-connector-java-5.1.25-3.el7.noarch

c)执行yum list mysql*  检查查看有没有MySql安装包,可能会输出:已安装的软件包 mysql-connector-java.noarch                                                                                                          mysql-connector-odbc.x86_64                                                                                                             可安装的软件包 MySQL-python.x86_64   

2)安装Mysql客户端 执行 yum install mysql  注意执行本命令必须确保能连互联网,命令运行时间较长,遇到提示Is this ok [y/d/N]: 输入y后继续安装 必须出现“完毕!”提示,才说明Mysql客户端安装成功

3)安装Mysql服务端 如果一上来就执行yum install mysql-server 会提示“没有可用软件包 mysql-server。错误:无须任何处理”,原因是和CentOS7自带有MariaDB冲突, 因此需要先执行命令sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm   添加来自开源Mysql社区的安装包仓库 然后再执行yum install mysql-server命令安装Mysql服务端,注意执行本命令必须确保能连互联网,命令运行时间较长,遇到提示Is this ok [y/d/N]: 输入y后继续安装,必须出现“完毕!”提示,才说明Mysql服务端安装成功

4)安装开发用到的库以及包含文件(这一步最好也执行安装,不安装开发库可能会影响后面Sqoop的执行,个人猜测!) 执行 yum install mysql-devel 遇到提示Is this ok [y/d/N]: 输入y后继续安装,必须出现“完毕!”提示,才说明Mysql客户端安装成功

5)启动或关闭Mysql服务 执行 service mysqld start  执行 service mysqld status  出现绿色文字active (running) 说明Mysql服务启动成功

6)为Mysql创建root管理员账户 执行 mysqladmin -u root password 提示设置新密码,可以设置密码为root,并确认再输入一边密码root New password: root Confirm new password: root

7)进入Mysql终端命令行环境 执行mysql -u root -p Enter password:root mysql> 出现上面的提示说明成功进入 Mysql终端命令行环境

8)下面的操作都Mysql终端命令行环境执行(蓝色是要执行的Mysql命令)

mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | mysql              | | performance_schema | +--------------------+

mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed

mysql> create table `emp` (     -> `id` int(11) not null,     -> `name` varchar(100) default null,     -> `deg` varchar(100) default null,     -> `salary` int(11) default null,     -> `dept` varchar(10) default null,     -> primary key(`id`) ); Query OK, 0 rows affected (0.03 sec)

mysql> insert into `emp` values('1201', 'gopal', 'manager', '50000', 'TP'); Query OK, 1 row affected (0.00 sec) mysql> insert into `emp` values('1202', 'aaaaa', 'manager', '50000', 'TP'); Query OK, 1 row affected (0.00 sec) mysql> insert into `emp` values('1203', 'gopal', 'manager', '50000', 'TP'); Query OK, 1 row affected (0.00 sec) mysql> insert into `emp` values('1204', 'gopal', 'manager', '50000', 'TP'); Query OK, 1 row affected (0.00 sec) mysql> insert into `emp` values('1205', 'sqoop', 'manager', '50000', 'TP'); Query OK, 1 row affected (0.00 sec)

mysql> select * from emp; +------+-------+---------+--------+------+ | id   | name  | deg     | salary | dept | +------+-------+---------+--------+------+ | 1201 | gopal | manager |  50000 | TP   | | 1202 | aaaaa | manager |  50000 | TP   | | 1203 | gopal | manager |  50000 | TP   | | 1204 | gopal | manager |  50000 | TP   | | 1205 | sqoop | manager |  50000 | TP   | +------+-------+---------+--------+------+ 5 rows in set (0.00 sec)

 

实验三 安装并使用Sqoop

1)把Sqoop的安装包文件sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz上传到Linux,执行tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/ 解压缩

2)修改Sqoop的配置参数 执行 cd /usr/local/sqoop-1.4.7.bin__hadoop-2.6.0/conf/ Sqoop切换到配置文件所在目录 执行cp sqoop-env-template.sh  sqoop-env.sh  复制一个Sqoop的环境变量脚本文件 执行 vi sqoop-env.sh  末尾增加以下配置参数:export HADOOP_COMMON_HOME=/usr/local/hadoop-2.6.0-cdh5.7.0/ export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.6.0-cdh5.7.0/

3)修改环境变量 执行 vi /etc/profile  末尾增加以下配置参数: export SQOOP_HOME=/usr/local/sqoop-1.4.7.bin__hadoop-2.6.0 export PATH=$SQOOP_HOME/bin:$PATH 别忘记执行source /etc/profile

4)Sqoop连接mysql测试

执行 sqoop list-databases -connect jdbc:mysql://localhost:3306/ --username root --password root

如果上面的命令执行失败,提示ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver  原因是缺少连接MySql的Java驱动包,把Java驱动包文件mysql-connector-java-5.1.46.jar上传到Linux,再执行cp mysql-connector-java-5.1.46.jar  /usr/local/sqoop-1.4.7.bin__hadoop-2.6.0/lib/ 把Java驱动包拷贝到Sqoop的lib目录 然后再次执行 sqoop list-databases -connect jdbc:mysql://localhost:3306/ --username root --password root 执行成功并输出数据库名称:information_schema mysql performance_schema

下面开始正式执行Sqoop的数据导入导出实验,前面的所有步骤都只是做准备,现在万事俱备,东风已至!!!

5)从mysql导入数据到HDFS

执行start-dfs.sh 启动分布式文件系统HDFS  

执行start-yarn.sh 启动资源调度器YARN   因为Sqoop执行数据导入导出是在底层依赖MapReduce作业实现的,所以要启动YARN

执行sqoop import --connect jdbc:mysql://localhost:3306/mysql --username root --password root --target-dir /output --table user -m 1  把Mysql系统自带的user表中的数据导入到HDFS的/output目录,然后执行hadoop fs -cat  /output/part-m-00000 查看刚导入到HDFS的数据内容

执行sqoop import --connect jdbc:mysql://localhost:3306/mysql --username root --password  root --target-dir /output1  --table help_topic  -m 1 把Mysql系统自带的help_topic表中的数据导入到HDFS的/output1目录,然后执行hadoop fs -cat  /output1/part-m-00000 查看刚导入到HDFS的数据内容

执行sqoop import --connect jdbc:mysql://localhost:3306/mysql --username root --password  root --target-dir /output2  --table emp  -m 1 把刚才自己创建的emp表中的数据导入到HDFS的/output2目录,然后执行hadoop fs -cat  /output2/part-m-00000 查看刚导入到HDFS的数据内容如下(和Mysql中查看到的emp表的数据相同):1201,gopal,manager,50000,TP 1202,aaaaa,manager,50000,TP 1203,gopal,manager,50000,TP 1204,gopal,manager,50000,TP 1205,sqoop,manager,50000,TP

6)HDFS导出数据到mysql的命令: 先在Mysql终端命令行环境执行以下命令: mysql> delete  from emp; Query OK, 5 rows affected (0.01 sec) mysql> select * from emp; Empty set (0.00 sec)

说明:把emp表的数据行全部删除了

再执行sqoop export --connect jdbc:mysql://localhost:3306/mysql --username root --password root --export-dir /output2/part-m-00000 --table emp 把HDFS中/output2/part-m-00000文件中的数据导出到MySql的emp表

再回到Mysql终端命令行环境执行以下命令: mysql> select * from emp; +------+-------+---------+--------+------+ | id   | name  | deg     | salary | dept | +------+-------+---------+--------+------+ | 1201 | gopal | manager |  50000 | TP   | | 1202 | aaaaa | manager |  50000 | TP   | | 1203 | gopal | manager |  50000 | TP   | | 1204 | gopal | manager |  50000 | TP   | | 1205 | sqoop | manager |  50000 | TP   | +------+-------+---------+--------+------+ 发现emp表中又有数据行了,这些数据是刚才从HDFS导出的

实验圆满成功 ^_^

 

最新回复(0)