sqoop 笔记

来源:互联网 发布:如何写网络演讲稿 编辑:程序博客网 时间:2024/05/16 17:51









上面这个不推荐使用

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




1.4.6导出的时候有BUG。






不要使用它的创建表,不好使。



增量导入:





Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如:MySQL,Oracle到Hadoop的HDFS,并从Hadoop的文件系统导出数据到关系数据库。

传统的应用管理系统,也就是与关系型数据库的使用RDBMS应用程序的交互,是产生大数据的来源之一。这样大的数据,由关系数据库生成的,存储在关系数据库结构关系数据库服务器。

当大数据存储器和分析器,如MapReduce, Hive, HBase, Cassandra, Pig等,Hadoop的生态系统等应运而生图片,它们需要一个工具来用的导入和导出的大数据驻留在其中的关系型数据库服务器进行交互。在这里,Sqoop占据着Hadoop生态系统提供关系数据库服务器和Hadoop HDFS之间的可行的互动。

Sqoop:“SQL到 Hadoop 和 Hadoop 到SQL”

Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如MySQL,Oracle到Hadoop的HDFS从Hadoop文件系统导出数据到关系数据库。它是由Apache软件基金会提供。

Sqoop是怎么样工作的?

下图描述了Sqoop的工作流程。

Sqoop导入

导入工具从RDBMS到HDFS导入单个表。表中的每一行被视为HDFS的记录。所有记录被存储在文本文件的文本数据或者在Avro和序列文件的二进制数据。

Sqoop导出

导出工具从HDFS导出一组文件到一个RDBMS。作为输入到Sqoop文件包含记录,这被称为在表中的行。那些被读取并解析成一组记录和分隔使用用户指定的分隔符。

由于Sqoop是Hadoop的一个子项目,它只能工作在Linux操作系统。这里需要按照下面系统上给定安装Sqoop的步骤。

第1步:验证JAVA安装

在安装Sqoop之前,需要确定是否已经在系统上安装Java。用下面的命令来验证Java安装:

$ java version

如果Java已经安装在系统上,应该能看到如下回应:

java version "1.7.0_71"Java(TM) SE Runtime Environment (build 1.7.0_71-b13)Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

如果未在系统上安装Java,那么需要按照下面的步骤来执行安装。

安装java

按照下面给定简单的步骤在系统上安装Java

第1

下载Java(JDK <最新版本> - X64.tar.gz) 访问以下链接:下载

那么jdk-7u71-linux-x64.tar.gz下载到你的系统上。

第2

通常情况下,可以找到下载文件夹中下载的Java文件。验证它并提取 jdk-7u71-linux-x64.gz 文件中使用下面的命令。

$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz

第3

为了使Java提供给所有的用户,必须将它移动到的位置“/usr/local/”. 打开根目录,键入以下命令。

$ su
password:
# mv jdk1.7.0_71 /usr/local/java# exitStep IV:

第4

有关设置PATH和JAVA_HOME变量,添加以下命令~/.bashrc文件

export JAVA_HOME=/usr/local/javaexport PATH=PATH:$JAVA_HOME/bin

现在,应用所有更改到当前正在运行的系统。

$ source ~/.bashrc

第5

使用下面的命令来配置Java方案:

# alternatives --install /usr/bin/java java usr/local/java/bin/java 2# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2
# alternatives --set java usr/local/java/bin/java# alternatives --set javac usr/local/java/bin/javac# alternatives --set jar usr/local/java/bin/jar

现在从终端上使用命令java -version  验证安装如上所述。

第2步:验证Hadoop的安装

在安装Sqoop之前Hadoop必须在系统上安装。使用下面的命令来验证Hadoop的安装:

$ hadoop version

如果Hadoop是已经安装在系统上,那么会得到以下回应:

Hadoop 2.4.1--Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768Compiled by hortonmu on 2013-10-07T06:28ZCompiled with protoc 2.5.0From source with checksum 79e53ce7994d1628b240f09af91e1af4

如果在系统上未安装Hadoop,那么继续进行下面的步骤:

下载Hadoop

下载和Apache软件基金会使用下面的命令提取Hadoop2.4.1

$ su
password:
# cd /usr/local# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/
hadoop-2.4.1.tar.gz# tar xzf hadoop-2.4.1.tar.gz# mv hadoop-2.4.1/* to hadoop/# exit

在模拟分布式模式下安装Hadoop

按照下面给出的伪分布式模式下安装的Hadoop2.4.1的步骤。

第1步:设置Hadoop

可以通过附加下面的命令到 ~/.bashrc文件中设置Hadoop环境变量。

export HADOOP_HOME=/usr/local/hadoopexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport YARN_HOME=$HADOOP_HOMEexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

现在,应用所有更改到当前正在运行的系统。

$ source ~/.bashrc

第2步:Hadoop配置

可以找到位置的所有Hadoop的配置文件 “$HADOOP_HOME/etc/hadoop”. 需要根据Hadoop基础架构作出适当的改修这些配置文件。

$ cd $HADOOP_HOME/etc/hadoop

为了开发java能够使用Hadoop项目,必须用java在系统中的位置替换JAVA_HOME值以重新设置hadoop-env.sh文件的java环境变量。

export JAVA_HOME=/usr/local/java

下面给出的是,需要编辑配置Hadoop的文件的列表。

core-site.xml

core-site.xml 文件中包含的信息,如用于Hadoop的实例中,分配给文件系统的存储器,用于存储数据的内存限制的端口号,以及读/写缓冲器的大小。

打开核心core-site.xml并在<configuration>和</configuration>标签之间添加以下属性。

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000 </value>
   </property></configuration>

hdfs-site.xml

hdfs-site.xml文件中包含的信息,如复制数据值,NameNode的路径,本地文件系统的数据节点的路径。这意味着要存储Hadoop基础架构。

让我们假设以下数据。

dfs.replication (data replication value) = 1
(In the following path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

打开这个文件,并在此文件中<configuration>, </configuration> 之间标签添加以下属性。

<configuration>
 
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
   
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>
   
   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
   </property>
   </configuration>

注:在上面的文件,所有的属性值是用户定义,可以根据自己的Hadoop的基础架构进行更改。

yarn-site.xml

此文件用于配置成yarn在Hadoop中。打开yarn-site.xml文件,并在在此文件中的<configuration>, </configuration>标签之间添加以下属性。

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property></configuration>

mapred-site.xml

此文件用于指定正在使用MapReduce框架。缺省情况下,包含yarn-site.xml的模板。首先,需要使用下面的命令来复制从mapred-site.xml 模板到 mapred-site.xml 文件。

$ cp mapred-site.xml.template mapred-site.xml

打开mapred-site.xml文件,并在在此文件中的 <configuration>, </configuration>标签之间添加以下属性。 

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property></configuration>

验证Hadoop的安装

下面的步骤用来验证 Hadoop 安装。

第1步:名称节点设置

使用命令 “hdfs namenode -format” 如下设置名称节点。

$ cd ~
$ hdfs namenode -format

预期的结果如下

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/

第2步:验证Hadoop DFS

下面的命令用来启动DFS。执行这个命令将开始Hadoop文件系统。

$ start-dfs.sh

期望的输出如下所示:

10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]

第3步:验证Yarn 脚本

下面的命令用来启动 yarn 脚本。执行此命令将启动yarn 守护进程。

$ start-yarn.sh

期望的输出如下所示:

starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting node manager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out

第4步:在浏览器访问Hadoop

访问Hadoop的默认端口号为50070.使用以下URL来获得浏览器的Hadoop服务。

http://localhost:50070/

下图描述了Hadoop的浏览器。

第5步:验证所有应用程序的集群

访问集群中的所有应用程序的默认端口号为8088。使用以下URL访问该服务。

http://localhost:8088/

下图描述了Hadoop集群的浏览器。

第3步下载Sqoop

在本教程中可以从以下链接下载Sqoop的最新版本,我们使用的是1.4.5版本:sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz.

Step 4: 安装Sqoop

下面的命令用于提取Sqoop.tar.gz并将其移动到“/usr/lib/sqoop” 目录。

$tar -xvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz
$ su
password:
# mv sqoop-1.4.4.bin__hadoop-2.0.4-alpha /usr/lib/sqoop#exit

第5步:配置.bashrc

必须设置Sqoop环境通过附加以下行到〜/.bashrc文件:

#Sqoopexport SQOOP_HOME=/usr/lib/sqoop export PATH=$PATH:$SQOOP_HOME/bin

下面的命令是用来执行〜/.bashrc文件。

$ source ~/.bashrc

第6步:配置Sqoop

要配置SqoopHadoop,需要编辑 sqoop-env.sh 文件,该文件被放置在 $SQOOP_HOME/conf 目录。首先要重定向到 Sqoop config 目录,并使用以下命令复制的模板文件

$ cd $SQOOP_HOME/conf
$ mv sqoop-env-template.sh sqoop-env.sh

打开sqoop-env.sh并编辑下面几行:

export HADOOP_COMMON_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=/usr/local/hadoop

第7步:下载并配置java的MySQL连接器(mysql-connector-java)

可以从下面的下载使用mysql-connector-java的5.1.30.tar.gz文件:下载链接

下面的命令是用来提取使用 mysql-connector-java 压缩包并移动 mysql-connector-java-5.1.30-bin.jar 到 /usr/lib/sqoop/lib 目录

$ tar -zxf mysql-connector-java-5.1.30.tar.gz
$ su
password:
# cd mysql-connector-java-5.1.30# mv mysql-connector-java-5.1.30-bin.jar /usr/lib/sqoop/lib

第8步:验证Sqoop

下面的命令被用来验证Sqoop版本。

$ cd $SQOOP_HOME/bin
$ sqoop-version

预期的输出:

14/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
Sqoop 1.4.5 git commit id 5b34accaca7de251fc91161733f906af2eddbe83
Compiled by abe on Fri Aug 1 11:19:26 PDT 2014

到这里,整个Sqoop安装工作完成。

把sqoop/bin/configure-sqoop里面的如下两段内容注释掉就可以了。

#if [ -z "${HCAT_HOME}" ]; then
#  if [ -d "/usr/lib/hive-hcatalog" ]; then
#    HCAT_HOME=/usr/lib/hive-hcatalog
#  elif [ -d "/usr/lib/hcatalog" ]; then
#    HCAT_HOME=/usr/lib/hcatalog
#  else
#    HCAT_HOME=${SQOOP_HOME}/../hive-hcatalog
#    if [ ! -d ${HCAT_HOME} ]; then
#       HCAT_HOME=${SQOOP_HOME}/../hcatalog
#    fi
#  fi
#fi
#if [ -z "${ACCUMULO_HOME}" ]; then
#  if [ -d "/usr/lib/accumulo" ]; then
#    ACCUMULO_HOME=/usr/lib/accumulo
#  else
#    ACCUMULO_HOME=${SQOOP_HOME}/../accumulo
#  fi
#fi

## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
#  echo "Warning: $HCAT_HOME does not exist! HCatalog jobs willfail."
#  echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi

#if [ ! -d "${ACCUMULO_HOME}" ]; then
#  echo "Warning: $ACCUMULO_HOME does not exist! Accumuloimports will fail."
#  echo 'Please set $ACCUMULO_HOME to the root of your Accumuloinstallation.'
#fi

 

 

从MySQL数据库中的数据导入到Hadoop的HDFS。 “导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据或者在阿夫罗(Avro )和序列文件的二进制数据。 

语法

下面的语法用于将数据导入HDFS

$ sqoop import (generic-args) (import-args) 
$ sqoop-import (generic-args) (import-args)

示例

让我们以命名为emp, emp_add和emp_contact,这是一个在MySQL数据库服务器名为userdb 数据库的一个例子。

三个表及其数据如下。

表emp:

id

name

deg

salary

dept

1201

gopal

manager

50,000

TP

1202

manisha

Proof reader

50,000

TP

1203

khalil

php dev

30,000

AC

1204

prasanth

php dev

30,000

AC

1204

kranthi

admin

20,000

TP

表emp_add:

id

hno

street

city

1201

288A

vgiri

jublee

1202

108I

aoc

sec-bad

1203

144Z

pgutta

hyd

1204

78B

old city

sec-bad

1205

720X

hitec

sec-bad

 

id

phno

email

1201

2356742

gopal@tp.com

1202

1661663

manisha@tp.com

1203

8887776

khalil@ac.com

1204

9988774

prasanth@ac.com

1205

1231231

kranthi@tp.com

导入表

Sqoop工具'import'是用来从表中导入表数据到Hadoop的文件系统作为文本文件或二进制文件。

下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。

$ sqoop import \--connect jdbc:mysql://localhost/userdb \--username root \--table emp --m 1

如果成功执行,那么会得到下面的输出。

14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode : false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds (0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.

为了验证在HDFS导入的数据,请使用以下命令。

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

emp表的数据和字段之间用逗号(,)表示。

1201, gopal,    manager, 50000, TP1202, manisha,  preader, 50000, TP1203, kalil,    php dev, 30000, AC1204, prasanth, php dev, 30000, AC1205, kranthi,  admin,   20000, TP

导入到目标目录

在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。

以下是指定目标目录选项的Sqoop导入命令的语法。

--target-dir <new or exist directory in HDFS>

下面的命令是用来导入emp_add表数据到'/queryresult'目录。

$ sqoop import \--connect jdbc:mysql://localhost/userdb \--username root \--table emp_add \--m 1 \--target-dir /queryresult

下面的命令是用来验证 /queryresult 目录中 emp_add表导入的数据形式。

$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*

它会用逗号(,)分隔emp_add表的数据和字段。

1201, 288A, vgiri,   jublee1202, 108I, aoc,     sec-bad1203, 144Z, pgutta,  hyd1204, 78B,  oldcity, sec-bad1205, 720C, hitech,  sec-bad

表数据导入子集

我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

where子句的语法如下。

--where <condition>

下面的命令用来导入emp_add表数据的子集。子集查询检索员工ID和地址,居住城市为:Secunderabad

$ sqoop import \--connect jdbc:mysql://localhost/userdb \--username root \--table emp_add \--m 1 \--where city =sec-bad’” \--target-dir /wherequery

下面的命令用来验证数据从emp_add表导入/wherequery目录

$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*

它用逗号(,)分隔 emp_add表数据和字段。

1202, 108I, aoc,     sec-bad1204, 78B,  oldcity, sec-bad1205, 720C, hitech,  sec-bad

增量导入

增量导入是仅导入新添加的表中的行的技术。它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。

下面的语法用于Sqoop导入命令增量选项。

--incremental <mode>--check-column <column name>--last value <last check column value>

让我们假设新添加的数据转换成emp表如下:

1206, satish p, grp des, 20000, GR

下面的命令用于在EMP表执行增量导入。

$ sqoop import \--connect jdbc:mysql://localhost/userdb \--username root \--table emp \--m 1 \--incremental append \--check-column id \-last value 1205

以下命令用于从emp表导入HDFS emp/ 目录的数据验证。

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*

它用逗号(,)分隔 emp_add表数据和字段。

如何导入从RDBMS数据库服务器到HDFS所有表。每个表的数据存储在一个单独的目录,目录名与表名相同。

语法

以下语法用于导入所有表。

$ sqoop import-all-tables (generic-args) (import-args) 
$ sqoop-import-all-tables (generic-args) (import-args)

示例

以下是从USERDB数据库导入的所有表的一个例子。数据库USERDB包含表的列表如下。

 +--------------------+
 |      Tables        |
 +--------------------+
 |      emp           |
 |      emp_add       |
 |      emp_contact   |
 +--------------------+

下面的命令用于从USERDB数据库中导入所有的表。

$ sqoop import \--connect jdbc:mysql://localhost/userdb \--username root

注:如果使用的是import-all-tables,它是强制性的,在该数据库中的每个表必须有一个主键字段。

下面的命令用于验证USERDB数据库的所有表数据到HDFS

$ $HADOOP_HOME/bin/hadoop fs -ls

它会告诉你表名的USERDB数据库的目录列表。

输出

drwxr-xr-x - hadoop supergroup 0 2014-12-22 22:50 _sqoop
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:46 emp
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:50 emp_add
drwxr-xr-x - hadoop supergroup 0 2014-12-23 01:52 emp_contact

 

1201, gopal,    manager, 50000, TP1202, manisha,  preader, 50000, TP1203, kalil,    php dev, 30000, AC1204, prasanth, php dev, 30000, AC1205, kranthi,  admin,   20000, TP1206, satish p, grp des, 20000, GR

下面的命令是从表emp 用来查看修改或新添加的行。

$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1

这表示新添加的行用逗号(,)分隔emp表的字段。 

1206, satish p, grp des, 20000, GR

 

如何将数据从HDFS导出到RDBMS数据库。目标表必须存在于目标数据库中。这是作为输入到Sqoop的文件包含记录,这被称为在表中的行。那些被读取并解析成一组记录和分隔与用户指定的分隔符。

默认的操作是从输入文件到数据库表,使用INSERT语句插入所有记录。在更新模式,Sqoop生成替换现有记录到数据库的UPDATE语句。

语法

以下是export命令语法。

$ sqoop export (generic-args) (export-args) 
$ sqoop-export (generic-args) (export-args)

示例

在HDFS文件中的员工数据的一个例子,。员工数据是在HDFS“EMP/”目录的emp_data文件中。所述emp_data如下。

1201, gopal,     manager, 50000, TP1202, manisha,   preader, 50000, TP1203, kalil,     php dev, 30000, AC1204, prasanth,  php dev, 30000, AC1205, kranthi,   admin,   20000, TP1206, satish p,  grp des, 20000, GR

它是强制性的,该表手动导出创建并且存在于从要导出的数据库中。

下面的查询被用来创建MySQL命令行表'employee'。

$ mysql
mysql> USE db;
mysql> CREATE TABLE employee ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

下面的命令是用来导出表数据(这是在HDFS emp_data文件)到MySQL数据库服务器DB数据库的employee表中。

$ sqoop export \--connect jdbc:mysql://localhost/db \--username root \--table employee \ --export-dir /emp/emp_data

下面的命令是用来验证表mysql命令行。

mysql>select * from employee;

如果给定的数据存储成功,那么可以找到数据在如下的employee表。

+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | kalil        | php dev     | 30000             | AC     |
| 1204 | prasanth     | php dev     | 30000             | AC     |
| 1205 | kranthi      | admin       | 20000             | TP     |
| 1206 | satish p     | grp des     | 20000             | GR     |
+------+--------------+-------------+-------------------+--------+

如何创建和维护Sqoop作业。 Sqoop作业创建并保存导入和导出命令。它指定参数来识别并调用已保存的工作。这种重新调用或重新执行用在增量导入,可以从RDBMS表到HDFS导入更新的行。

语法

以下是创建Sqoop作业的语法。

$ sqoop job (generic-args) (job-args)
   [-- [subtool-name] (subtool-args)]
 
$ sqoop-job (generic-args) (job-args)
   [-- [subtool-name] (subtool-args)]

创建作业(--create)

在这里,我们创建一个名为myjob,这可以从RDBMS表的数据导入到HDFS作业。下面的命令用于创建一个从DB数据库的employee表导入到HDFS文件的作业。

$ sqoop job --create myjob \--import \--connect jdbc:mysql://localhost/db \--username root \--table employee --m 1

验证作业 (--list)

‘--list’ 参数是用来验证保存的作业。下面的命令用来验证保存Sqoop作业的列表。

$ sqoop job --list

它显示了保存作业列表。

Available jobs: 
   myjob

检查作业(--show)

‘--show’ 参数用于检查或验证特定的工作,及其详细信息。以下命令和样本输出用来验证一个名为myjob的作业。

$ sqoop job --show myjob

它显示了工具和它们的选择,这是使用在myjob中作业情况。

Job: myjob 
 Tool: import Options:
 ---------------------------- 
 direct.import = true
 codegen.input.delimiters.record = 0
 hdfs.append.dir = false 
 db.table = employee
 ...
 incremental.last.value = 1206
 ...

执行作业 (--exec)

‘--exec’ 选项用于执行保存的作业。下面的命令用于执行保存的作业称为myjob

$ sqoop job --exec myjob

它会显示下面的输出。

10/08/19 13:08:45 INFO tool.CodeGenTool: Beginning code generation 

介绍“代码生成”工具的重要性。从面向对象应用程序的观点来看,每一个数据库表具有包含“setter”和“getter”的方法来初始化DAO类对象。此工具(-codegen)自动生成DAO类。

它产生的DAO类在Java中是基于表的模式结构。在Java定义实例作为导入过程的一部分。这个工具的主要用途是检查是否遗漏了Java代码。如果是这样,这将创建Java字段之间的缺省定界符的新版本。

语法

以下是Sqoop代码生成命令的语法。

$ sqoop codegen (generic-args) (codegen-args) 
$ sqoop-codegen (generic-args) (codegen-args)

示例

让我们以USERDB数据库中的表emp来生成Java代码为例。

下面的命令用来执行该给定的例子。

$ sqoop codegen \--connect jdbc:mysql://localhost/userdb \--username root \ --table emp

如果命令成功执行,那么它就会产生在终端上下面的输出。

14/12/23 02:34:40 INFO sqoop.Sqoop: Running Sqoop version: 1.4.514/12/23 02:34:41 INFO tool.CodeGenTool: Beginning code generation……………….14/12/23 02:34:42 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoopNote: /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.java uses or overrides a deprecated API.Note: Recompile with -Xlint:deprecation for details.
14/12/23 02:34:47 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.jar

验证

让我们来看看输出。路径是emp表的Java代码生成并存储的位置。验证使用下列命令在该位置中的文件。

$ cd /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/
$ ls
emp.class
emp.jar
emp.java

如果想验证深入开发,在USERDB数据库比较表emp和emp.java在以下目录

/tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/.

如何使用Sqoop“eval”工具。它允许用户执行用户定义的查询,对各自的数据库服务器和预览结果在控制台中。这样,用户可以期望得到的表数据来导入。使用eval我们可以评估任何类型的SQL查询可以是DDL或DML语句。

语法

以下语法用于Sqoop eval命令。

$ sqoop eval (generic-args) (eval-args) 
$ sqoop-eval (generic-args) (eval-args)

选择查询评估计算

使用eval工具,我们可以评估计算任何类型的SQL查询。让我们在选择DB数据库的employee表行限制的一个例子。下面的命令用来评估计算使用SQL查询给定的例子。

$ sqoop eval \--connect jdbc:mysql://localhost/db \--username root \ --query SELECT * FROM employee LIMIT 3

如果命令成功执行,那么它就会产生在终端上显示下面的输出。

+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | khalil       | php dev     | 30000             | AC     |
+------+--------------+-------------+-------------------+--------+

插入查询计算

Sqoop的eval工具可以适用于两个模拟和定义的SQL语句。这意味着,我们可以使用eval的INSERT语句了。下面的命令用于在DB数据库的员工(employee) 表中插入新行。

$ sqoop eval \--connect jdbc:mysql://localhost/db \--username root \ -e INSERT INTO employee VALUES(1207,Raju’,‘UI dev’,15000,TP’)

如果命令成功执行,那么它会显示在控制台上更新的行的状态。

或者,可以验证在MySQL控制台 employee 表。下面的命令是用来验证DB数据库的employee表使用"select“查询行。

mysql>
mysql> use db;
mysql> SELECT * FROM employee;
+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | khalil       | php dev     | 30000             | AC     |
| 1204 | prasanth     | php dev     | 30000             | AC     |
| 1205 | kranthi      | admin       | 20000             | TP     |
| 1206 | satish p     | grp des     | 20000             | GR     |
| 1207 | Raju         | UI dev      | 15000             | TP     |
+------+--------------+-------------+-------------------+--------+

 

如何使用Sqoop列出数据库。 Sqoop列表数据库工具解析并执行对数据库服务器的“SHOW DATABASES”查询。此后,它列出了在服务器上的所有数据库。

语法

以下语法用于Sqoop列表数据库命令。

$ sqoop list-databases (generic-args) (list-databases-args) 
$ sqoop-list-databases (generic-args) (list-databases-args)

示例查询

下面的命令用于列出MySQL数据库服务器的所有数据库。

$ sqoop list-databases \--connect jdbc:mysql://localhost/ \--username root

如果命令成功执行,那么它会显示MySQL数据库服务器的数据库列表,如下所示。

...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
 
mysql
test
userdb
db

 

如何使用Sqoop列出的MySQL数据库服务器一个特定的数据库中的所有表。 Sqoop的list-tables工具解析并执行针对特定数据库的“SHOW TABLES”查询。此后,它列出了在数据库中存在的表。

语法

以下是使用 Sqoop 的 list-tables  命令的语法。 

$ sqoop list-tables (generic-args) (list-tables-args) 
$ sqoop-list-tables (generic-args) (list-tables-args)

示例查询

下面的命令用于列出MySQL数据库服务器的USERDB数据库下的所有的表。

$ sqoop list-tables \--connect jdbc:mysql://localhost/userdb \--username root

如果该指令执行成功,那么将显示USERDB数据库中所有表,如下。

...
13/05/31 16:45:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
 
emp
emp_add
emp_contact

 


原创粉丝点击