Hadoop实战(10)_Sqoop import与抽取框架封装管理

CDH Hadoop系列目录:

我们好,这里是财富思维高校,我是尹长青

Hadoop实战(3)_虚拟机搭建CDH的全分布格局

穷人一生都在等候,等所谓的机遇,等条件成熟,头发等白了,心也等老了,既使条件成熟了,你也懒得干了。机会不是等出来的,是干出来的,不干永远不曾机会。

Hadoop实战(4)_Hadoop的集群管理和资源分配

干起来加以,边干边寻找机会,边干边成立条件,边干边修正,边干边完善,你是穷光蛋你怕什么!只要大方向是对的,也许最初看起来没有希望的事,最后就有了好的结果。

Hadoop实战(5)_Hadoop的运维经验

人生一场赌。穷人遇事爱说赌一把,人生一场赌,这是一种态度。赌是最能来看一个人脾性的,面对一向的利害得失,必须作出自己的判定和采取,哪怕你不拔取,也是一种态度,也要接受后果,你既然入了局,就无法不接受考验。

Hadoop实战(8)_CDH添加Hive服务及Hive基础

实际穷人最应当赌的就是命局:难道自己永远就是穷光蛋?只但是得付出代价,吐弃你的休养和娱乐,当你的情人在牌桌前激战时,你得坐到书桌前;当您的亲朋好友去畅游时,你得在都市的相继角落转悠,调查市场,寻找机会。

Hadoop实战(9)_Hive进阶及UDF开发

另外事情都是要付出代价的,成为大款将来,你能够不办事,只干自己喜爱的事,但从前,你必须比别人劳动更多。

Sqoop语法表明

Sqoop官方学习文档:

http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.9.0/

Sqoop import是对立于HDFS来讲,即从关全面据库import到HDFS上。

mysql的驱动包放到sqoop/lib下。

在同一的环境中,为何有些人穷,有的人却相对富一些啊?人与人中间最根本的距离不是高矮胖瘦,也不是单眼皮和双眼皮的问题,性格和思辨。

案例一:把多少导入到HDFS上

/root/project
mkdir sqoop_prj
cd sqoop_prj/
mkdir DBS
cd DBS/
touch DBS.opt

hadoop fs -mkdir /user/hive/warehouse/DBS
which sqoop

实践opt文件,无法传参,sqoop --options-file aa.opt-m,指定map数,假如抽取的表数据量大,则调大map数。假诺-m设置为5,5个线程,则在HDFS上暴发5个文本。

把sqoop写到shell脚本的功利,能够传参数。

#!/bin/sh
. /etc/profile

hadoop fs -rmr /user/hive/warehouse/DBS



sqoop import  --connect "jdbc:mysql://cdhmaster:3306/hive"    \
--username root                                                          \
--password 123456                                                        \
-m    1                                                             \
--table  DBS                                                           \
--columns   "DB_ID,DESC,DB_LOCATION_URI,NAME,OWNER_NAME,OWNER_TYPE"         \
--target-dir  "/user/hive/warehouse/DBS"    

#--where "length(DESC)>0"                                               \                               
#--null-string ''

bug,驱动问题

ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@3c1a42fa is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@3c1a42fa is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.

充实参数,参考

https://stackoverflow.com/questions/29162447/sqoop-import-issue-with-mysql

https://stackoverflow.com/questions/26375269/sqoop-error-manager-sqlmanager-error-reading-from-database-java-sql-sqlexcept

--driver com.mysql.jdbc.Driver

日增参数后的警示,

WARN sqoop.ConnFactory: Parameter --driver is set to an explicit driver however appropriate connection manager is not being set (via --connection-manager). Sqoop is going to fall back to org.apache.sqoop.manager.GenericJdbcManager. Please specify explicitly which connection manager should be used next time.

bug,sql语法问题,

Error: java.io.IOException: SQLException in nextKeyValue

去掉关键词列DESC,参考,

https://community.cloudera.com/t5/Data-Ingestion-Integration/sqoop-throws-SQLException-in-nextKeyValue/m-p/42653

李嘉诚

案例二:数据写Hive普通表(非分区表)

# mysql
create table test (id int, pdate date);
insert into test(id, pdate) values (1, '2017-11-05');
insert into test(id, pdate) values (2, '2017-11-06');
insert into test(id, pdate) values (3, '2017-11-05');
insert into test(id, pdate) values (4, '2017-11-06');

# hive
drop table if exists test;
create table test(id int, pdate string);

--hive-import,指定要写入hive表,该参数无value。

--hive-overwrite

--hive-table,test。

一个小故事,阿K从小家境不佳,家里还有六个兄弟,负担特别重,读完初中就不行以辍学,以打工赚钱来养家,修理工、服务员、保安门童….什么都干过,生活的不方便没有打倒他,反而让他愈发坚强自立!他不甘于这样穷困的生活,暗暗在心里发誓,一定要有所作为!他一面打工一边留意着市场情状,留意着现行强烈的获利项目,思考着温馨的下一步计划,机缘巧合下,他因此朋友介绍
,代理了一个做背景的墙画项目,用模具在墙上绘画,不需要其余基础,就足以画出大幅生动的画,他觉得这些墙画市场前景分外大,果断拿出装有积蓄去代理了,经过一年时光的鼎力,这一年他付出了常人几倍、甚至十几倍的奋力,其中费力只有和睦了解,他打响了,生意做得风生水起,开了几家店,也毕竟地点富裕的小老董了!那听起来有点像个神话,我们姑且不去挤他的泡沫,至少这种情势是足以借鉴的。

案例三:写Hive分区表,so,salesorder

注意事项:

1、用哪些字段做分区?
始建时间,而不是last_modify_time

Q:
用创设时间抽取至hive分区,订单状态变化周期是45天,订单状态变化后,hive数据如何共同?

hive不协助update,每一日抽取近15天的订单到Hive的独家分区里。Hive是做总结分析,平时最关心是前几天的意况。

# cdhmaster
cd ~
mysql -uroot -p123456 < so.sql
ERROR 1046 (3D000) at line 3: No database selected

vi so.sql
use test;

mysql -uroot -p123456 < so.sql

# hive
CREATE TABLE so (
  order_id bigint,
  user_id bigint,
  order_amt double ,
  last_modify_time string
) partitioned by (date string);

Sqoop执行后,注意:

  • 会在该用户HDFS的home目录下,爆发一个与源表同名的目录,如/user/root/so
    万一sqoop import至hive成功,该目录会自动删掉。
  • 在履行的目录下爆发一个java文件,即opt转化的MR Job代码。
  • sqoop import中,无论hive表是什么列分隔符,均可以自动匹配。

Sqoop抽取框架封装:

  • 建一个mysql配置表,配置需要抽取的表及信息;
  • Java读取mysql配置表,动态生成opt文件;
  • Java中实施Process类调本地系统命令—sqoop –options-file opt文件;

Sqoop-imp -task 1 “2015-04-21”

Sqoop-imp “2015-04-21”

广大人想成为富豪,他不是不了解该怎么办,而是不敢真的那么做。总是有太多顾虑,面对前景的累累不确定因素,他不去想一万,总去想只要,越想越可怕,结果许多的可能性就在这种犹豫和等待中化为乌有。人在应付生活中的各个危险时,日常凭着经验和本能,不用考虑就能作出抉择。比如,你不会去站在不稳的石块上,也不会把手伸进火里。之所以这么,就因为你有过惨痛的阅历,时辰候有成百上千血的训诫。在同一个地点跌倒的意况是很少的,烫过一回击你就不会再去犯法。退步是一种名贵的阅历,它会令人获取经验,变得聪明。犯错误不可怕,可怕的是对犯错误的害怕。很六个人一连担心创业退步,又失去了现有的平安收入,落得个俗话说的偷鸡不成倒蚀一把米。

Sqoop export

# mysql test
create table so1 as 
select * from so where 1=0;

源头必须是HDFS/Hive,目的关周密据库。

表so1的datelast_modify_time修改为varchar

民间有一种捕猴子的措施,在一块木板上挖六个洞,刚好够猴子的手伸进去。木板前面放一些花生,猴子看到花生就呼吁去抓。结果,抓了花生的手握紧成拳头,无法从洞里再缩回来,木板成了一块活生生的束缚。猴子就这么严刻抓着它的花生,被人稳操胜算捉去。可怜的猴子!它因而这样,是因为它太缺食物,把食物看得太重了。缺钱,穷人往往就会把钱也正是一种负担。钱这种事物对众人都拥有巨大的吸引,如果过于倚重,那可能就会促成人们生活重心的舞狮,令人们忽视一些比钱更关键的事物……

Sqoop工具打包

Flow etl 执行所有已布置的表抽取。

Flow etl -task 1

Flow etl -task 1 2017-01-01

  • 读取mysql的extract_to_hdfsextract_db_info,按照部署音信生成.opt文件。
  • 通过Java的Process类调Linux命令:sqoop --options-file opt文件

idea打包Flow.jar,'D:/Java/idea/IdeaProjects/Hive_Prj/src/META-INF/MANIFEST.MF' already exists in VFS,删掉文件夹META-INF

db.properties是访问mysql数据库的部署。

extract_db_info,抽取的表来自的数据库的布置。

Flow.jar上传至/root/project/lib

/root/project/bin,创建Flow命令。

配置FLOW_HOME

vi /etc/profile

export FLOW_HOME=/root/project

source /etc/profile

配置db.properties

# FLOW_HOME
mkdir conf

vi db.properties

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://cdhmaster:3306/test
db.user=root
db.password=123456

配置sqoop option目录sqoop/opts

# FLOW_HOME
mkdir -p sqoop/opts

即便要在执行时爆发日志,需要支出jar时配置log4j。

ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@310d117d is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@310d117d is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.

HDFSExtract.java,扩张部署--driver com.mysql.jdbc.Driver,重新打包上传。

学业可以对应做修改,如sh ./so.sh

# /root/project/sqoop_prj/DBS
vi so.sh

Flow etl -task 1 $yestoday

你或许还想看

数据解析/数据挖掘/机器学习

Python数据挖掘与机具学习_通信信用风险评估实战(1)——读数据

Python数据挖掘与机具学习_通信信用风险评估实战(2)——数据预处理

Python数据挖掘与机具学习_通信信用风险评估实战(3)——特征工程

Python数据挖掘与机具学习_通信信用风险评估实战(4)——模型磨炼与调优

爬虫

Python爬虫实战之爬取链家维也纳房价_01简单的单页爬虫

Python爬虫实战之爬取链家布宜诺斯Ellis房价_02把小爬虫变大

Python爬虫实战之爬取链家布宜诺斯Ellis房价_03存储

Python爬虫实战之爬取链家台北房价_04链家的模仿登录(记录)

搜狗词库爬虫(1):基础爬虫架构和爬取词库分类

搜狗词库爬虫(2):基础爬虫框架的运转流程


微信公众号「数据解析」,分享数据数学家的自身修养,既然遇见,不如一起成人。

管理 1

多少解析

转载请讲明:转载自微信公众号「数据解析」


先天就享受到此处,希望能给你带来一些启示。本人从事互联网行业十多年。为回馈我的读者,现在免费享受一本价值3000元电子版图书一册——《暴利赚钱18招》

那本暴利项目挣钱18招,是我透过多年坚定的搜寻与履行的结晶。该书首要帮忙想致富的对象很快的在互联网上赚到钱,并且包含了实体转型互联网、互联网思维互联网营销互联网集团的制作、怎样赢得流量、如何包装暴利产品等内容;既能帮忙到一些尚未资源、没有背景的草根创业者赚到钱,又能轻松在社会的烈性竞争中脱颖而出,并方便不败之地。

一看便知,一学就会,一用就成!

自家在书里写了无数暴利互联网赚钱的实战经验,管理公司营销经历,也总结了众四人失利的缘故,成功的缘故,希望我们能从中收益。

群众号《财富思维社群》

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注