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