1 启动条件
Sqoop需要安装在成功部署,Hadoop的平台上,并且要求Hadoop已经正常启动。读者可以参见第6章中有关验证Hadoop是否处于正常运行状态的方法。
准备就绪后,就可以开始安装Sqoop了。我们打算将Sqoop安装在Master上,因此以下的操作均是在Master上进行的。
2 下载或复制Sqoop安装包
http://archive.apache.org/dist/sqoop/1.4.7/
3 解压并安装Sqoop
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
4 配置Sqoop
4.1 配置MySQL连接器
Sqoop经常要与MySQL结合使用,以便数据导入或导出MySQL,所以需要配置MySQL连接器。在第6章介绍Hive的安装时我们也为其配置过Java连接器。实际上,这里也需要进行类似的配置。
首先进入“/home/csu/resources/mysql-connector-java-8.0.11/”目录(读者计算机系统的设置可能不一样),然后将其中的mysql-connector-java-8.0.11.jar文件复制到Sqoop的安装目录的依赖库目录(即lib)下。
4.2 配置Sqoop环境变量
在Sqoop的安装目录的“conf”子目录下,系统已经提供了一个环境变量文件模板,我们需要将其名称改为sqoop-env.sh,然后进行必要的修改。首先进入Sqoop的安装目录的“conf”子目录,然后执行改名操
作,接着使用gedit编辑器打开sqoop-env.sh文件。
cp sqoop-env-template.sh sqoop-env.sh
追加或替换
#Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/home/csu/hadoop-3.1.0 #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/home/csu/hadoop-3.1.0 #set the path to where bin/hbase is available export HBASE_HOME=/home/csu/hbase-2.0.4 #Set the path to where bin/hive is available export HIVE_HOME=/home/csu/apache-hive-3.1.0-bin #Set the path for where zookeeper config dir is #export ZOOCFGDIR=/usr/local/zk
4.3 配置Linux环境变量
vim /etc/profile
source /etc/profile
4.3 配置Linux环境变量 vim /etc/profile source /etc/profile
5 启动并验证Sqoop
一种简便验证Sqoop安装是否成功的办法就是执行“bin/sqoop help”命令,如果看到如图7-6所示的显示内容,表示安装成功。
sqoop help
6 测试Sqoop与MySQL的连接
Sqoop的一个主要功能就是将数据导入或导出MySQL。无论从MySQL导出还是向MySQL导入数据,首先必须保证Sqoop与MySQL的连接。下面我们介绍使用Sqoop连接MySQL数据库的操作。
sqoop eval --connect jdbc:mysql://192.168.99.129:3306/test_db --username root --password root --query "show tables" ;
在上述命令中,“eval”表示执行后面的SQL语句。
--driver表示数据库驱动器,这里需要明确写出“com.mysql.cj.jdbc.Driver”。请读者特别注意,早期MySQL的驱动器是“com.mysql.jdbc.Driver”,现在不能再使用这个驱动器了,否则就会遇到异常。
--connect表示连接对象(也就是数据库或表)的URL,其中IP地址需要根据虚拟主机的地址填写。这里的“test_db”就是前面练习MySQL命令时创建的数据库,其中含有表myclass。这里还有两点特别值得说明的是:①URL后面有两个参数,第一个参数是设置数据库时区的“serverTimezone=UTC”,这里将其设置为世界统一时区,如果不设置时区,命令就不能执行;第二个参数是useSSL,设置为false,这说明本命令不使用SSL(Secure Sockets Layer,安全套接层),MySQL 8.0.11要求显式地设置SSL,如果设置为false,应用程序可以不需要SSL,如果设置为true,则服务器将进行可信认证,无论怎样用户都必须显式地设置SSL,如果不设置(也就是不写这个参数语句),命令就会报错,最后也不能执行。②URL中多参数的分割符,这里采用的是“&”,其中反斜杠是转义字符,这里必须加上“\”,如果写成“&”也会报错,很多系统开发和维护人员都遇到过这类问题(俗称“坑”),他们或者在网络上不断搜索别人的经验,或者自己尝试不同的转义字符,现在我们在这里给出了明确的解决方案。
--username后面是用户名,这里是“root”(Root用户)。
--password后面直接跟着用户的密码。Root用户的密码是“Hive_%CSUdjhuang168168”,这是本书的设置,读者需要根据自己虚拟机的设置来填写。
--query后面是SQL语句,用双引号引用。早期版本的MySQL可以接收“list-tables”这样的命令(本书第1版中就采用了这种用法),而MySQL 8.0.11会把这些命令视为语法错误,这也是在系统升级中的一些“小插曲”。输入命令后按下Enter键,如果执行顺利就可看到查询结果。
sqoop eval --connect jdbc:mysql://192.168.99.129:3306/test_db --username root --password root --query "select * from user" ;
注意语法,不要缺少空格或者中文字符
如果能够完成上述操作,说明Sqoop能够连接到MySQL,这就为后面的数据传输做好了准备。