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

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
sqoop 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‘
<更多表的导出,可参照修改>

原文地址:http://blog.51cto.com/13587708/2287123

时间: 2024-10-10 05:24:46

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

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

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

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

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元喝了一杯卡布奇诺".那么以消费为主题进行分析,可从这段信息中提取三个维度:时间维度

iOS开发-博客导出工具开发教程(附带源码)

前言: 作为一名学生, 作为一名iOS开发学习者, 我个人浏览信息包括博客, 更多的选择移动终端.然而, csdn并没有现成的客户端(不过有个web版的). 之前曾经看到一款开源的导出工具, 但是它是基于Windows平台的.导出的也仅仅是PDF格式.而且, 对于文章的导出, 需要精确URL.无法做到边浏览别导出. 另外, 我想实现的是, 可以在没有网络的情况下, 浏览自己收藏的文章.并且, 对于自己收藏的文章, 可以分类管理. 最关键的是, 对于自己的文章, 可以做一个备份.我曾经遇到过这样一

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

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

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

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