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/
  • 1
  • 2

解压之后的目录文件为/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
  • 1
  • 2

3、配置环境变量

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

export SQOOP_HOME=/opt/Hadoop/sqoop-1.4.6
export PATH=$PATH:$SQOOP_HOME/bin
  • 1
  • 2

使用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
  • 1
  • 2

在/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(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的版本信息会给出,界面如下: 
这里写图片描述

二、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的用户名和密码
  • 1

输出信息如下: 
这里写图片描述

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命令行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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文件存放在当前目录下
  • 1
  • 2
  • 3
  • 4
  • 5

执行后结果如下: 
这里写图片描述 
查看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文件的名称
  • 1
  • 2
  • 3

如下图: 
这里写图片描述

三、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 ',';
  • 1
  • 2
  • 3
  • 4

Step3: 将sales.log加载进Hive中,使用下面的命令:

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

四、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 ','
  • 1

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

hive
hive> LOAD DATA INPATH "widgets" INTO TABLE widgets;
  • 1
  • 2

五、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
  • 1
  • 2
  • 3


Mysql –> Hdfs –> Hive导入总结: 
对Hadoop权威指南一书,我的代码做出的更改主要有两部分: 
1、涉及到Mysql–> HDFS这个步骤的,需要使用–bindir指定java文件、.jar文件和.class文件存放目录 
2、在命令中加入–username root –password root,这是使用明密码的方法,还有使用-P手动输密码的方法,这里不再说明。 

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


**附:**Hadoop入门的一些简单实例:https://github.com/Nana0606/Hadoop_Introduction

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quiet_girl/article/details/75144235
个人分类:  Hadoop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值