设为首页 加入收藏

TOP

Sqoop-1.4.6安装配置及Mysql->HDFS->Hive数据导入(基于Hadoop2.7.3)
2019-04-15 00:39:28 】 浏览:20
Tags: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、下载

下载地址:
he/sqoop/1.4.6/" rel="nofollow">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的版本信息会给出,界面如下:
这里写图片描述

二、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权威指南,我自己执行的时候有些语句会产生错误,所以做出了相应的更改。


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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quiet_girl/article/details/75144235


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hadoop的三大核心和四大模块 下一篇2018-3-7      ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }