sqoop 笔记 £神魔★判官ぃ 2022-06-04 04:56 513阅读 0赞 ![Center][] ![Center 1][] ![Center 2][] ![Center 3][] ![Center 4][] ![Center 5][] ![Center 6][] ![Center 7][] ![Center 8][] **上面这个不推荐使用** \--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ![Center 9][] ![Center 10][] ![Center 11][] **1.4.6导出的时候有BUG。** **![Center 12][]** ![Center 13][] ![Center 14][] ![Center 15][] **不要使用它的创建表,不好使。** ![Center 16][] ![Center 17][] 增量导入: ![Center 18][] 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) 访问以下链接:[下载][Link 1] 那么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 ### 要配置**Sqoop**用**Hadoop**,需要编辑** 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文件:[下载链接][Link 2] 下面的命令是用来提取使用 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: ### <table> <tbody> <tr> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">id</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">name</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">deg</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">salary</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">dept</span></strong></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1201</span></p> </td> <td> <p><span style="color:#313131">gopal</span></p> </td> <td> <p><span style="color:#313131">manager</span></p> </td> <td> <p><span style="color:#313131">50,000</span></p> </td> <td> <p><span style="color:#313131">TP</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1202</span></p> </td> <td> <p><span style="color:#313131">manisha</span></p> </td> <td> <p><span style="color:#313131">Proof reader</span></p> </td> <td> <p><span style="color:#313131">50,000</span></p> </td> <td> <p><span style="color:#313131">TP</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1203</span></p> </td> <td> <p><span style="color:#313131">khalil</span></p> </td> <td> <p><span style="color:#313131">php dev</span></p> </td> <td> <p><span style="color:#313131">30,000</span></p> </td> <td> <p><span style="color:#313131">AC</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1204</span></p> </td> <td> <p><span style="color:#313131">prasanth</span></p> </td> <td> <p><span style="color:#313131">php dev</span></p> </td> <td> <p><span style="color:#313131">30,000</span></p> </td> <td> <p><span style="color:#313131">AC</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1204</span></p> </td> <td> <p><span style="color:#313131">kranthi</span></p> </td> <td> <p><span style="color:#313131">admin</span></p> </td> <td> <p><span style="color:#313131">20,000</span></p> </td> <td> <p><span style="color:#313131">TP</span></p> </td> </tr> </tbody> </table> ### 表emp\_add: ### <table> <tbody> <tr> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">id</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">hno</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">street</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">city</span></strong></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1201</span></p> </td> <td> <p><span style="color:#313131">288A</span></p> </td> <td> <p><span style="color:#313131">vgiri</span></p> </td> <td> <p><span style="color:#313131">jublee</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1202</span></p> </td> <td> <p><span style="color:#313131">108I</span></p> </td> <td> <p><span style="color:#313131">aoc</span></p> </td> <td> <p><span style="color:#313131">sec-bad</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1203</span></p> </td> <td> <p><span style="color:#313131">144Z</span></p> </td> <td> <p><span style="color:#313131">pgutta</span></p> </td> <td> <p><span style="color:#313131">hyd</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1204</span></p> </td> <td> <p><span style="color:#313131">78B</span></p> </td> <td> <p><span style="color:#313131">old city</span></p> </td> <td> <p><span style="color:#313131">sec-bad</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1205</span></p> </td> <td> <p><span style="color:#313131">720X</span></p> </td> <td> <p><span style="color:#313131">hitec</span></p> </td> <td> <p><span style="color:#313131">sec-bad</span></p> </td> </tr> </tbody> </table> <table> <tbody> <tr> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">id</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">phno</span></strong></p> </td> <td style="background:#EEEEEE"> <p><strong><span style="color:#313131">email</span></strong></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1201</span></p> </td> <td> <p><span style="color:#313131">2356742</span></p> </td> <td> <p><span style="color:#313131">gopal@tp.com</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1202</span></p> </td> <td> <p><span style="color:#313131">1661663</span></p> </td> <td> <p><span style="color:#313131">manisha@tp.com</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1203</span></p> </td> <td> <p><span style="color:#313131">8887776</span></p> </td> <td> <p><span style="color:#313131">khalil@ac.com</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1204</span></p> </td> <td> <p><span style="color:#313131">9988774</span></p> </td> <td> <p><span style="color:#313131">prasanth@ac.com</span></p> </td> </tr> <tr> <td> <p><span style="color:#313131">1205</span></p> </td> <td> <p><span style="color:#313131">1231231</span></p> </td> <td> <p><span style="color:#313131">kranthi@tp.com</span></p> </td> </tr> </tbody> </table> ## 导入表 ## 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 [Center]: /images/20220604/038032ac33be4edc88abd38eabcd844c.png [Center 1]: /images/20220604/ac79f605d61542b3882c36ab5c6af07f.png [Center 2]: /images/20220604/c07c8355f6cc46349f875613e6050bd0.png [Center 3]: /images/20220604/ec2f131b156049ffa3e70fdf7ac6bd36.png [Center 4]: /images/20220604/8295366ec14a4b5a8537f8059d2e70a8.png [Center 5]: /images/20220604/352baf29631e4243a7c7dddfa7a259bb.png [Center 6]: /images/20220604/40157e75f3dc4860b3a664385b1c50ab.png [Center 7]: /images/20220604/0422a611db114adca6977742cb52ecad.png [Center 8]: /images/20220604/e8c10adfeeb94404b256ad1cfc6bfa29.png [Center 9]: /images/20220604/91d7561ff2254698a4c355d26f22e0ee.png [Center 10]: /images/20220604/283552b2266546959b7e273462519738.png [Center 11]: /images/20220604/c9e21d6cb3564e6893d7b5ee784d5902.png [Center 12]: /images/20220604/38cc93ab50914674a5d2043ed55be885.png [Center 13]: /images/20220604/74f8a1ad318e413d890f470078eaecb3.png [Center 14]: /images/20220604/6ed0daa0dfe74144aeb55f72bbe9c246.png [Center 15]: /images/20220604/1141e24110c34e79beb8272dedb59eb5.png [Center 16]: /images/20220604/147447cfb4db4b788589147cc858258e.png [Center 17]: /images/20220604/dc0226c6a0c34a2198250866003f7b20.png [Center 18]: /images/20220604/1fff237bfb5840b5b9f71ec28e357e34.png [MySQL]: http://www.yiibai.com/mysql/ [Link 1]: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads- [Link 2]: http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/
相关 Sqoop 一、Sqoop 1 官网 http://sqoop.apache.org/ 2 概述 1、用于结构化数据存储(如传统关系型数据库)和Ha... 小咪咪/ 2024年04月20日 08:37/ 0 赞/ 48 阅读
相关 Sqoop 1 Sqoop简介 Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 谁践踏了优雅/ 2023年06月15日 09:52/ 0 赞/ 6 阅读
相关 Sqoop 文章目录 一、Sqoop简介 二、Sqoop安装 三、Sqoop导入数据 3.1 RDBMS到HDFS 3.2 RDBMS到H àì夳堔傛蜴生んèń/ 2023年02月21日 06:21/ 0 赞/ 26 阅读
相关 hive学习笔记之八:Sqoop 欢迎访问我的GitHub > 这里分类和汇总了欣宸的全部原创(含配套源码):[https://github.com/zq2599/blog\_demos][https_g ゝ一世哀愁。/ 2022年11月21日 14:56/ 0 赞/ 149 阅读
相关 sqoop sqoop有什么用? sqoop 用来在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递 ----------------- 秒速五厘米/ 2022年06月06日 01:08/ 0 赞/ 219 阅读
相关 sqoop 笔记 ![Center][] ![Center 1][] ![Center 2][] ![Center 3][] ![Center 4][] ![C £神魔★判官ぃ/ 2022年06月04日 04:56/ 0 赞/ 514 阅读
相关 sqoop_使用 <table> <tbody> <tr> <td><p>命令</p></td> <td><p>说明</p></td> </tr> 一时失言乱红尘/ 2022年05月25日 08:48/ 0 赞/ 193 阅读
相关 Sqoop Sqoop的基本原理和相关参数配置: 简介 Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgre 心已赠人/ 2022年04月25日 01:46/ 0 赞/ 224 阅读
相关 Sqoop Sqoop优化 参考这个https://blog.csdn.net/u010185220/article/details/79085119 如何判断读取的数据是否完整?可 柔情只为你懂/ 2022年03月15日 02:24/ 0 赞/ 250 阅读
相关 Sqoop sqoop flume数据采集 采集日志数据 sqoop数据迁移 hdfs->mysql azkaban任务调度 flume->hdfs->shell->hive- 矫情吗;*/ 2021年12月03日 07:01/ 0 赞/ 295 阅读
还没有评论,来说两句吧...