大数据模块开发----结果导出

1.?Apache Sqoop

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

Sqoop:“SQL 到 Hadoop 和 Hadoop 到SQL”。

Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现。

在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

sqoop安装

安装sqoop的前提是已经具备java和hadoop的环境。

最新稳定版: 1.4.6

配置文件修改:

cd $SQOOP_HOME/conf

mv sqoop-env-template.sh sqoop-env.sh

vi sqoop-env.sh

export HADOOP_COMMON_HOME=/root/apps/hadoop/

export HADOOP_MAPRED_HOME=/root/apps/hadoop/

export HIVE_HOME=/root/apps/hive

加入mysql的jdbc驱动包

cp??/hive/lib/mysql-connector-java-5.1.28.jar? ?$SQOOP_HOME/lib/

验证启动

bin/sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password hadoop

本命令会列出所有mysql的数据库。

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

2.?Sqoop导入

“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)。

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

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

Sqoop测试表数据

在mysql中创建数据库userdb,然后执行参考资料中的sql脚本:

创建三张表: emp??emp_add emp_conn。??

2.1.?导入mysql表数据到HDFS

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

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--target-dir /sqoopresult \

--table emp --m 1

其中--target-dir可以用来指定导出数据存放至HDFS的目录;

mysql jdbc url 请使用 ip 地址。

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

hdfs dfs -cat /sqoopresult/part-m-00000

可以看出它会用逗号,分隔emp表的数据和字段。

1201,gopal,manager,50000,TP

1202,manisha,Proof reader,50000,TP

1203,khalil,php dev,30000,AC

1204,prasanth,php dev,30000,AC

1205,kranthi,admin,20000,TP

2.2.?导入mysql表数据到HIVE

将关系型数据的表结构复制到hive中

bin/sqoop create-hive-table \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--table emp_add \

--username root \

--password hadoop \

--hive-table test.emp_add_sp

其中:

--table emp_add为mysql中的数据库sqoopdb中的表。? ?

--hive-table emp_add_sp 为hive中新建的表名称。

从关系数据库导入文件到hive中

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table emp_add \

--hive-table test.emp_add_sp \

--hive-import \

--m 1

2.3.?导入表数据子集

--where? ? ? ? 可以指定从关系数据库导入数据时的查询条件。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--where "city =‘sec-bad‘" \

--target-dir /wherequery \

--table emp_add --m 1

复杂查询条件:

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--target-dir /wherequery12 \

--query ‘select id,name,deg from emp WHERE??id>1203 and $CONDITIONS‘ \

--split-by id \

--fields-terminated-by ‘\t‘ \

--m 1

2.4.?增量导入

增量导入是仅导入新添加的表中的行的技术。

--check-column (col)? ? ? ? 用来作为判断的列名,如id

--incremental (mode)? ? ? ? append:追加,比如对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录

--last-value (value)? ? ? ? 指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值

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

1206, satish p, grp des, 20000, GR

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

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table emp --m 1 \

--incremental append \

--check-column id \

--last-value 1205

3.?Sqoop导出

将数据从HDFS导出到RDBMS数据库导出前,目标表必须存在于目标数据库中。

默认操作是从将文件中的数据使用INSERT语句插入到表中,更新模式下,是生成UPDATE语句更新表数据。

以下是export命令语法:

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

3.1.?导出HDFS数据到mysql

数据是在HDFS 中“emp/”目录的emp_data文件中:

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,satishp,grpdes,20000,GR

首先需要手动创建mysql中的目标表:

mysql> USE sqoopdb;

mysql> CREATE TABLE employee (

? ?id INT NOT NULL PRIMARY KEY,

? ?name VARCHAR(20),

? ?deg VARCHAR(20),

? ?salary INT,

? ?dept VARCHAR(10));

然后执行导出命令:

bin/sqoop export \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table employee \

--export-dir /emp/emp_data

还可以用下面命令指定输入文件的分隔符

--input-fields-terminated-by ‘\t‘

如果运行报错如下:

则需要把localhost更改为ip或者域名。

示例如下,将点击流模型表导出到mysql

qoop export
--connect jdbc:mysql://hdp-node-01:3306/webdb --username root --password root??
--table click_stream_visit??
--export-dir /user/hive/warehouse/dw_click.db/click_stream_visit/datestr=2013-09-18
--input-fields-terminated-by ‘\001‘

<更多表的导出,可参照修改>

原文地址:https://blog.51cto.com/14473726/2447814

时间: 2024-10-20 21:04:58

大数据模块开发----结果导出的相关文章

大数据模块开发之结果导出

1. Apache SqoopSqoop是Hadoop和关系数据库服务器之间传送数据的一种工具.它是用来从关系数据库如:MySQL,Oracle到Hadoop的HDFS,并从Hadoop的文件系统导出数据到关系数据库.由Apache软件基金会提供.Sqoop:"SQL 到 Hadoop 和 Hadoop 到SQL".Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现.在翻译出的mapreduce中主要是对inputformat和outputformat进行定制.sq

大数据模块开发之数据预处理

1. 主要目的过滤"不合规"数据,清洗无意义的数据格式转换和规整根据后续的统计需求,过滤分离出各种不同主题(不同栏目path)的基础数据.2. 实现方式开发一个mr程序WeblogPreProcess(内容太长,见工程代码) public class WeblogPreProcess { static class WeblogPreProcessMapper extends Mapper<LongWritable, Text, Text, NullWritable> { T

大数据模块开发----统计分析

数据仓库建设好以后,用户就可以编写Hive SQL语句对其进行访问并对其中数据进行分析. 在实际生产中,究竟需要哪些统计指标通常由数据需求相关部门人员提出,而且会不断有新的统计需求产生,以下为网站流量分析中的一些典型指标示例. 注:每一种统计指标都可以跟各维度表进行钻取. 1.?流量分析1.1.?多维度统计PV总量按时间维度 -计算每小时pvs,注意gruop by语法 select count(*) as pvs,month,day,hour from ods_weblog_detail gr

大数据模块开发之数据采集

1. 需求在网站web流量日志分析这种场景中,对数据采集部分的可靠性.容错能力要求通常不会非常严苛,因此使用通用的flume日志采集框架完全可以满足需求.2. Flume日志采集系统2.1. Flume采集Flume采集系统的搭建相对简单:1.在服务器上部署agent节点,修改配置文件2.启动agent节点,将采集到的数据汇聚到指定的HDFS目录中针对nginx日志生成场景,如果通过flume(1.6)收集,无论是Spooling Directory Source和Exec Source均不能满

大数据模块开发----ETL

ETL工作的实质就是从各个数据源提取数据,对数据进行转换,并最终加载填充数据到数据仓库维度建模后的表中.只有当这些维度/事实表被填充好,ETL工作才算完成. 本项目的数据分析过程在hadoop集群上实现,主要应用hive数据仓库工具,因此,采集并经过预处理后的数据,需要加载到hive数据仓库中,以进行后续的分析过程. 1.?创建ODS层数据表1.1.?原始日志数据表 drop table if exists ods_weblog_origin; create table ods_weblog_o

大数据模块开发----数据仓库设计

1.?维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表(dimension) 维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析.这样的按..分析就构成一个维度.再比如"昨天下午我在星巴克花费200元喝了一杯卡布奇诺".那么以消费为主题进行分析,可从这段信息中提取三个维度:时间维度

数据仓库工程师、大数据开发工程师、BI工程师、ETL工程师之间有什么区别?

商务智能.商务智能工程师是商业智能行业的工程师.从需求分析师到数据仓库架构师.ETL工程师.数据分析工程师.报表开发工程师.数据挖掘工程师等,都可以称为BI工程师. ETL工程师:从事系统编程.数据库编程和设计,掌握各种常用编程语言的专业技术人员.也称为数据库工程师. 盲目地解释数据仓库的概念可能并不有趣.让我们从不同的角色开始. 老板:我是一家手机公司的老板.今天我要向董事会汇报.我将准备一份关于用户增长.用户保留率.用户活动以及过去三年中我手机中每个应用程序的使用率的报告.如果下面没有BI,

【大数据开发】你知道大数据语言的工具与框架吗?

为了解大数据的当前和未来状态,我们采访了来自28个组织的31位IT技术主管.我们问他们,"你在数据提取,分析和报告中使用的最流行的语言,工具和框架是什么?" 以下的文章是他们告诉我们的记录,经过总结如下. Python,Spark,Kafka 随着大数据和对人工智能AL/机器学习 ML 的推动,Scala和Python语言以及Apache Spark中越来越受欢迎. 对OLAP数据仓库的迁移,如果用 Python开发机器学习使用较少的结构.开发者编写Python ML模型非常方便,Py

如何自学大数据开发?

大数据技术怎么自学?大数据开发如何自学? 我们在学习大数据开发前需要先找到适合自己的方式方法,首先需要审视一下自身的情况,是否是以兴趣为出发点,对大数据是不是自己是真的感兴趣吗,目前对大数据的了解有多少,自己的学习能力和理解能力是否适合学习.如果是跨行业转岗是否做好了心理准备.根据不同基础水平可以分为三类: 第一类:零基础学员,对大数据行业和技术一无所知; 第二类:有一定的编程基础,对大数据行业略知一二,无发真正应该用; 第三类:有工作经验的工程师,对大数据行业了解,想转行大数据开发. 在搞清楚