Sqoop-1.4.7安装配置及Mysql->HDFS->Hive数据导入(基于Hadoop2.6.5)

匿名 (未验证) 提交于 2019-12-02 22:06:11

写在前面
本博客基于的环境如下:
OS版本: centos7.5
Hadoop版本: Hadoop-2.6.5
Hive版本: Hive-1.2.2
Sqoop版本: Sqoop-1.4.7

一、Sqoop安装

1、下载


下载版本:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
压缩包存放位置:/usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
注意注意:需要下载的是sqoop**_hadoop**这个版本,而不是sqoop-1.4.7.tar.gz

2、解压

我们这里讲sqoop安装到/usr/local/src/下,下面将其解压到这个目录下,使用下面的命令:

 cd /usr/local/src tar -xzvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 

解压之后的目录文件为/usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0,文件夹名称比较长,使用下面的命令重命名文件夹:

 cd /usr/local/src mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7 

3、配置环境变量

使用`sudo vi ~/.bashrc`打开配置文件,使用下面的语句配置环境变量:

 export SQOOP_HOME=/usr/local/src/sqoop-1.4.7 export PATH=$PATH:$SQOOP_HOME/bin 

使用source ~/.bashrc使配置立即生效。

4、Sqoop配置

(1)sqoop-env.sh配置 sqoop-env.sh配置文件没有,我们需要将sqoop-env-template.sh复制为sqoop-env.sh,sqoop-env-template.sh在sqoop-1.4.6/conf中,命令如下:

 cd /usr/local/src/sqoop-1.4.7/conf cp sqoop-env-template.sh sqoop-env.sh 

在/usr/local/src/sqoop-1.4.7/conf目录下使用sudo vi sqoop-env.sh打开配置文件,添加如下的配置,将所有变量的值变成相应软件的安装目录:

 export HADOOP_COMMON_HOME=/usr/local/src/hadoop-2.6.1 export HADOOP_MAPRED_HOME=/usr/local/src/hadoop-2.6.1 export HIVE_HOME=/usr/local/src/apache-hive-1.2.2-bin 

(2)configure-sqoop配置
configure-sqoop文件在/usr/local/src/sqoop-1.4.7/bin/configure-sqoop下,将目录切换至相应目录,使用vi打开文件,将HCatalog,Accumulo检查注释掉(除非你准备使用HCatalog,Accumulo等HADOOP上的组件) ,注释内容如下图:


5、mysql-connector-java放入
将mysql-connector-java-5.1.42-bin.jar放入/usr/local/src/sqoop-1.4.7/lib/下,mysql-connector-java-5.1.42-bin.jar下载地址为:https://dev.mysql.com/downloads/connector/j/
6、测试Sqoop
根目录下执行sqoop version测试,成功之后sqoop的版本信息会给出,界面如下:

二、Sqoop:Mysql-and-HDFS

1、利用Sqoop命令查看Mysql中数据

(1)sqoop list-databases: 查看Mysql中的所有数据库,使用命令:

 sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password root     //root,root是我mysql的用户名和密码 

输出信息如下:

2、sqoop import: 将mysql的某一个数据库导入HDFS

Step1:

 mysql> mysql -uroot -p  // 进入mysql命令行 mysql> CREATE DATABASE hadoopguide;   //创建一个hadoopguide的数据库 mysql> GRANT ALL PRIVILEGES ON hadoopguide.* TO 'root'@'%';   //将此数据库的所有权限授给root用户 mysql> GRANT ALL PRIVILEGES ON hadoopguide.* TO '%'@'localhost'; mysql> show databases;  //查看所有数据库名 mysql> use hadoopguide; //使用hadoopguide数据库 mysql> CREATE TABLE widgets(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,     -> widget_name VARCHAR(64) NOT NULL,     -> price DECIMAL(10,2),     -> design_date DATE,     -> version INT,     -> design_comment VARCHAR(100)); mysql> INSERT INTO widgets VALUES (NULL, 'sprocket', 0.25, '2010-02-10', 1, 'Connects two gizmos'); mysql> INSERT INTO widgets VALUES (NULL, 'gizmo', 4.00, '2009-11-30', 4, NULL); mysql> INSERT INTO widgets VALUES (NULL, 'gadget', 99.99, '1983-08-13', 13, 'Our flagship product'); mysql> quit;   //退出mysql命令行 

Step2:

 cd /usr/local/src/sqoop-1.4.7 mkdir tmp cd tmp sqoop import --bindir ./ --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets //其中,hadoopguide是数据库名称,root、root是数据名的用户名和密码,widgets是hadoopguide下的一个数据表,--bindir ./表示将生成的java、.jar和.class文件存放在当前目录下 

执行后结果如下:

查看HDFS,发现mysql的widgets表格内容已经导入:

3、sqoop codegen: 将mysql数据库只生成java文件,不导入数据

使用命令如下:

 cd /opt/Hadoop/sqoop-1.4.6/tmp2     //切换目录 sqoop codegen --bindir ./ --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets --class-name Widget //其中,Widget是自定义的生成java文件的名称 

如下图:

三、Sqoop:Local-and-Hive

Step1:

Step2:

 hive> CREATE TABLE sales (widget_id INT, qty INT,     > street STRING, city STRING, state STRING,     > zip INT, sale_date STRING)     > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; 

Step3:

 LOAD DATA LOCAL INPATH "sales.log" INTO TABLE sales; 

四、Sqoop:HDFS-and-Hive

在(二、2)中我们已经将widgets从Mysql加载到了HDFS,这里直接将HDFS数据加载到Hive中,使用下面的命令生成hive中数据表定义(根目录下执行即可):

 sqoop create-hive-table --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets --fields-terminated-by ',' 

注意:执行这个命令可能会报错:

ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

执行下面的命令解决:

 ln -s /usr/local/src/apache-hive-1.2.2-bin/lib/hive-exec-1.2.2.jar hive-exec-1.2.2.jar 

进入hive,执行下面的命令,将HDFS中数据加载到Hive:

 hive hive> LOAD DATA INPATH "widgets" INTO TABLE widgets; 

五、Sqoop:Mysql-and-Hive

在(二、2)中讲了从Mysql导入HDFS的方法,在(四)讲了从HDFS加载数据到Hive的方法,那么有没有办法直接从Mysql中可以将数据加载到Hive中。这个步骤虽然中间省略了通过HDFS中转,但是只是我们操作简便了,实际上hadoop仍然是Mysql--Hdfs--Hive,所以应该指定生成的java文件、.jar文件和.class文件在同一目录,即需要使用--bindir命令,具体命令如下:

 cd /opt/Hadoop/sqoop-1.4.6/tmp sqoop import --bindir ./ --connect jdbc:mysql://localhost/hadoopguide --username root --password root --table widgets -m 1 --hive-import //其中,-m 1表示让一个任务来执行左右,使用--hive-import来运行sqoop import工具,可以从源数据库直接将数据载入Hive 


注:以上内容均来自Hadoop权威指南,我自己执行的时候有些语句会产生错误,所以做出了相应的更改。

参考文档:https://blog.csdn.net/quiet_girl/article/details/75144235

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!