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

Hadoop入门配置系列博客目录一览

1、Eclipse中使用Hadoop伪分布模式开发配置及简单程序示例(Linux下)
2、使用Hadoop命令行执行jar包详解(生成jar、将文件上传到dfs、执行命令、下载dfs文件至本地)
3、Hadoop完全分布式集群安装及配置(基于虚拟机)
4、Eclipse中使用Hadoop集群模式开发配置及简单程序示例(Windows下)
5、Zookeeper3.4.9、Hbase1.3.1、Pig0.16.0安装及配置(基于Hadoop2.7.3集群)
6、mysql5.7.18安装、Hive2.1.1安装和配置(基于Hadoop2.7.3集群)
7、Sqoop-1.4.6安装配置及Mysql->HDFS->Hive数据导入(基于Hadoop2.7.3)
8、Hadoop完全分布式在实际中优化方案
9、Hive:使用beeline连接和在eclispe中连接
10、Scala-2.12.2和Spark-2.1.0安装配置(基于Hadoop2.7.3集群)
11、Win下使用Eclipse开发scala程序配置(基于Hadoop2.7.3集群)
12、win下Eclipse远程连接Hbase的配置及程序示例(create、insert、get、delete)

Hadoop入门的一些简单实例详见本人github:https://github.com/Nana0606/hadoop_example


本篇博客主要介绍“Sqoop-1.4.6安装配置及Mysql->HDFS->Hive数据导入(基于Hadoop2.7.3)”。

写在前面

本博客基于的环境如下:

OS版本: Ubuntu16.04
Hadoop版本: Hadoop-2.7.3
Hbase版本: Hbase-1.3.1
Hive版本: Hive-2.1.1
Pig版本: Pig-0.16.0
Zookeeper版本: Zookeeper-3.4.9
Sqoop版本: Sqoop-1.4.6

一、Sqoop安装

1、下载

下载地址: http://mirror.bit.edu.cn/apache/sqoop/1.4.6/
下载版本: sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
压缩包存放位置: /home/lina/Software/Hadoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
注意注意:需要下载的是sqoop**_hadoop**这个版本,而不是sqoop-1.4.6.tar.gz

2、解压

我们这里讲sqoop安装到/opt/Hadoop/下,下面将其解压到这个目录下,使用下面的命令:
cd /home/lina/Software/Hadoop/
tar xzf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/Hadoop/

解压之后的目录文件为/opt/Hadoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha,文件夹名称比较长,使用下面的命令重命名文件夹:

cd /opt/Hadoop
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop-1.4.6

3、配置环境变量

使用`sudo vi ~/.bashrc`打开配置文件,使用下面的语句配置环境变量:
export SQOOP_HOME=/opt/Hadoop/sqoop-1.4.6
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 /opt/Hadoop/sqoop-1.4.6/conf
cp sqoop-env-template.sh sqoop-env.sh

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

#Setpath to where bin/Hadoop is available
export HADOOP_COMMON_HOME=/opt/Hadoop/hadoop-2.7.3
#Setpath to where hadoop-*-core.jar isavailable
export HADOOP_MAPRED_HOME=/opt/Hadoop/hadoop-2.7.3
#setthe path to where bin/Hbase isavailable
export HBASE_HOME=/opt/Hadoop/hbase-1.3.1
#Setthe path to where bin/Hive is available
export HIVE_HOME=/opt/Hadoop/apache-hive-2.1.1
#Setthe path for where zookeper config diris
export ZOOCFGDIR=/opt/Hadoop/zookeeper-3.4.9

(2)configure-sqoop配置
configure-sqoop文件在/opt/Hadoop/sqoop-1.4.6/bin/configure-sqoop下,将目录切换至相应目录,使用vi打开文件,将HCatalog,Accumulo检查注释掉(除非你准备使用HCatalog,Accumulo等HADOOP上的组件) ,注释内容如下图:
这里写图片描述

5、mysql-connector-java放入

将mysql-connector-java-5.1.42-bin.jar放入/opt/Hadoop/sqoop-1.4.6/lib/下,mysql-connector-java-5.1.42-bin.jar下载地址为:https://dev.mysql.com/downloads/connector/j/

6、测试Sqoop

根目录下执行sqoop version测试,成功之后sqoop的版本信息会给出,界面如下: ![这里写图片描述](https://img-blog.csdn.net/20170715104536317)

二、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中创建一个名为hadoopguide的数据库,在这个数据库下创建一个名为widgets的数据表,并插入一些数据,mysql命令如下(Hadoop权威指南上的例子):

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: 在sqoop目录下创建一个tmp文件夹用于存放生成的java、.jar和.class文件(具体原因见:http://blog.csdn.net/quiet_girl/article/details/75160045问题1),再在此目录下执行sqoop import语句,如下:

cd /opt/Hadoop/sqoop-1.4.6
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: 在本地创建一个文件,命名为:sales.log,这里将其存放在/home/lina(即根目录下)下,其内容如下:
这里写图片描述
Step2: 在Hive中创建sales数据表结构,命令如下:

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: 将sales.log加载进Hive中,使用下面的命令:

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 ','

进入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

Mysql --> Hdfs --> Hive导入总结: 对Hadoop权威指南一书,我的代码做出的更改主要有两部分: 1、涉及到Mysql--> HDFS这个步骤的,需要使用--bindir指定java文件、.jar文件和.class文件存放目录 2、在命令中加入--username root --password root,这是使用明密码的方法,还有使用-P手动输密码的方法,这里不再说明。
注:以上内容均来自Hadoop权威指南,我自己执行的时候有些语句会产生错误,所以做出了相应的更改。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值