大数据培训hadoop实操_第1页
大数据培训hadoop实操_第2页
大数据培训hadoop实操_第3页
大数据培训hadoop实操_第4页
大数据培训hadoop实操_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hadoop实操北京东方国信科技股份有限公司1提纲日常中问题解决四一Hadoop脚本开发三异构数据库的同步二ETL流程部署与调度2Hadoop脚本开发注意事项大家在刚刚开始写脚本时可能很不习惯,习惯了oracle的存储过程。Hive中是没有存储过程的,需要我们写shell脚本来代替像oracle的存储过程。Hive数据库中的函数用show functions命令查看hive支持那些函数,有一些oracle的函数在hive中是没有的需要我们自己开发自定义函数。Hive语句Hive 不支持一条一条用insert插入操作,也不支持update操作。Sql编写尽量不要太复杂,用标准sql写格式要求比较

2、严格。Shell编写 hive数据库中没有游标,for循环等我们如果在开发中用到只能用shell中的for等来遍写程序。脚本都是用shell来编写,用shell来调用hive库。3Shell简介什么是ShellShell是一个独立于OS的应用程序,是介于使用者和 Unix/Linux 操作系统的核心程序(kernel)之间的接口,是一个具有交互性的命令行解释器。Shell的作用解释键入的命令以及执行一些特定的功能,如果是程序则传到内核执行。常用的Shell Bourne Shell(sh, bash):最早被大量使用而且标准化的shellC shell(csh, tcsh):易于使用且会话性强

3、,最早提供alias、history、job control功能Korn shell(ksh):语法与sh兼容4Bash初始化过程bash检查文件/etc/profile是否存在.如果存在,bash则读取该文件;否则跳过.bash检查用户主目录下的文件.bash_profile是否存在.如果存在,bash则读取该文件;否则跳过.bash检查用户主目录下的文件.bash_login是否存在.如果存在,bash则读取该文件;否则跳过.bash检查用户主目录下的文件. profile是否存在.如果存在,bash则读取该文件;否则跳过.这些步骤都结束完后,就显示默认的提示符$.5使用变量来保存参数信息

4、可以使用变量来保存系统命令参数的替换信息。SRC_FILE= /var /log/ messages DST_FILE= /var /log/ messages.1 cp $ SRC_FILE $ DST_FILE 6设置环境变量环境变量配置有三种方法:修改/etc/profile文件修改用户目录下的.bashrc文件直接在shell下修改我们一般在shell中来加载环境变量export NLS_LANG=awk -F: if($1 =SHELL_LANGUAGE) print $2 /src/public/hdp_shell.configexport ORACLE_HOME=awk -F:

5、if($1 =ORA_CLIENT_PATH) print $27Shell程序Shell程序: 一种解释执行的脚本语言,类似于DOS 下的.bat文件,但功能更强. Shell是按行解释执行的,注释在行首加#,习惯文件的第一行以”#!/bin/sh”开头,指明使用哪种解释器.执行方式(三种):sh /dve/null 2&1Then echo “peter is here”Else echo “peters not in the list.”fi12多分支条件语句格式: if condition_1 then commands_1 elif condition_2 then commands

6、_2 elif condition_3 then commands_3 . else commands_n fi示例:#!/bin/bashecho n “enter your login name :”Read NAMEIf -z $NAME | “$NAME” = “” ; then echo “you did not enter a name”elif “$NAME” = “root” ;then echo “hello root”elif “$NAME” = “louise” ;then echo “hello louise”else echo “you are not root”fi

7、 13条件控制语句示例示例: #!/bin/shhour=date+%Hcase $hour in 01-9 | 101) echo “Good morning!”; 1234567) echo “Good afternoon!”; *) echo echo “Good evening!”;esac14循环语句结构for循环: for in done结构 for variable in list-of-valuesdo commands mandDonewhile循环: while - do - done结构 只要循环条件为真就继续循环下去。while conditiondo commands

8、 manddone15for循环语句示例这个循环是打印当前目录下的所有文件示例:#!/bin/bashFor loop in lsdo echo $loopdone 16while循环语句示例一下是一个基本的while循环,测试条件是:如果counter小于5,那么条件返回真。Counter从0开始,每次循环处理是,counter加1。示例:#!/bin/bashcounter=0While $counter lt 5 do counter=expr $counter + 1 echo $counterdone17Expr命令expr是对shell变量进行算术运算的操作示例:$ count=0

9、$ count=$count+1$ echo $count显示为0+1$ count=expr $count+1$ echo $count显示为118awkAwk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。Awk抽取信息后,才能进行其他文本操作。调用awk:Awk -F field-separator commands input-file(s)cat grade.txt 19sedSed的编辑命令:sed是一个非交互性文本流编辑器,它编辑文件或标准输入导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。20Sed示例删除文本的第一行删除文

10、本的最后一行把文本中的night替换成NIGHT21HiveQl语法hive建表语法格式 external 外部表,类似于mysql的csv引擎 partitioned by 指定分区字段 clustered by sorted by 可以对表和分区 对某个列进行分桶操作,也可以利用sorted by对某个字段进行排序 row format 指定数据行中字段间的分隔符 和数据行分隔符 stored as 指定数据文件格式:textfile sequence rcfile inputformat (自定义的inputformat 类) location 指定数据文件存放的hdfs目录Hive建表

11、语法22Hive建表语句create table dwa_v_d_wap_mb_url_label ( month_id string,day_id string,device_number string,prov_id string,url_1 string , url_2 string,url_3 string,url_4 string,url_5 string,url_6 string,url_7 string,url_8 string,url_9 string,url_10 string)partitioned by (month string,day string)row forma

12、t delimited fields terminated by | ;23hiveql 修改表 增加分区 ALTER TABLE dwa_v_d_wap_mb_url_label ADD PARTITION (month =201405, day=24) location /user/hive/warehouse/mouth=201405/day=12; 修改表 删除分区 ALTER TABLE dwa_v_d_wap_mb_url_label DROP PARTITION (month =201405, day=24 ); 修改表 重命名表 ALTER TABLE table_name R

13、ENAME TO new_table_name 修改表 修改字段 ALTER TABLE test_change CHANGE a a1 STRING AFTER b;24数据的加载加载hdfs上的文件到指定分区表LOAD DATA INPATH /user/hive/warehouse/XXX.TXT overwrite into table dwa_v_d_wap_mb_url_label partition(month=201405,day=24)加载本地文件到指定分区表LOAD DATA LOCAL INPATH /ftpdir/XXX.AVL OVERWRITE INTO TABLE

14、 dwa_v_d_wap_mb_url_label partition(month=201405,day=24) ;25数据的加工insert overwrite table zb_dwa.DWA_V_D_WAP_MB_URL_LABEL partition (month = 201405, day = 24) select 201405, 24, device_number, prov_id, max(case when a.rn = 1 then w3_prod_third_type else null end), max(case when a.rn = 2 then w3_prod_t

15、hird_type else null end), max(case when a.rn = 3 then w3_prod_third_type else null end), max(case when a.rn = 4 then w3_prod_third_type else null end), max(case when a.rn = 5 then w3_prod_third_type else null end), max(case when a.rn = 6 then w3_prod_third_type else null end), max(case when a.rn = 7

16、 then w3_prod_third_type else null end), max(case when a.rn = 8 then w3_prod_third_type else null end), max(case when a.rn = 9 then w3_prod_third_type else null end), max(case when a.rn = 10 then w3_prod_third_type else null end) from (select *, ROW_NUMBER() OVER(distribute by device_number sort BY

17、total_cnt desc) rn from (select 201405 month_id, 24 day_id, b.device_number, v_id, w3_prod_third_type, sum(total_cnt) total_cnt from zb_dwa.dwa_d_cus_3g_nuser_flag a join zb_dwa.dwa_s_d_wap_mb_url b on a.device_number = b.device_number and a.month_id = 201405 and a.day_id = 24 and concat(b.month_id,

18、 b.day_id) in (20140524, 20140523, 20140522, 20140521, 20140520, 20140519, 20140518) group by b.device_number, v_id, w3_prod_third_type) a) a where a.rn $v_logfileelse touch $v_logfileFi#判断文件是否存在不存在创建一个为空的日志文件参数1是文件的路径,参数2是日志文件名34Oracle中的配置表create table hdpPROCEDURE_INFO( USER_NAME VARCHAR2(50), PRO

19、CNAME VARCHAR2(100), PROC_DESC VARCHAR2(200), CONDITION VARCHAR2(500), EXPECTED VARCHAR2(10), ABCD_FENZU VARCHAR2(10), IF_VALID VARCHAR2(10), CYCLE_DM VARCHAR2(10), INTERFACE_NO VARCHAR2(10)tablespace HDP_TBS pctfree 10 initrans 1 maxtrans 255 storage ( initial 160 minextents 1 maxextents unlimited

20、);- Add comments to the columns comment on column PROCEDURE_INFO.USER_NAME is 用户名,如:GM;comment on column PROCEDURE_INFO.PROCNAME is 过程名,如:P_XXXXXX;comment on column PROCEDURE_INFO.PROC_DESC is 过程描述;comment on column PROCEDURE_INFO.CONDITION is 最大长度控制在500内。前驱语句,如:SELECT COUNT(1) FROM STG.ODS_EXECUTE_

21、LOG T WHERE T.PROCNAME IN (P_AAA, P_BBB) AND T.ACCT_MONTH = V_ACCT_MONTH|V_ACCT_DATE 只可以写这两种日期变量,可以加链路;comment on column PROCEDURE_INFO.EXPECTED is 前驱应得出的结果。如果有3个前置过程就应该是3.;comment on column PROCEDURE_INFO.CYCLE_DM is 周期 M,D;comment on column PROCEDURE_INFO.INTERFACE_NO is 接口编号(ABC_FENZU为“Z”时有效,数值同经

22、分表DM.DM_TABLE_TO_FILE.INTERFACE_NO);35配置表(一)配置表中存放的内容如下:36配置表(二)SELECT COUNT(1) FROM HDP.Ods_Execute_Log t WHERE t.Procname IN (P_GM_ABC_SERV_BILL_ALL_D, P_GM_C_USER_DEPART_D, P_GM_C_USER_DEPART_D, P_GM_C_CUST_D, P_GM_WO_BASE_FLAG_D, P_CP_GRPCUST_SERV_FLAG_D, P_GM_B_ACTIVE_D) AND t.Acct_Month = to_c

23、har(VVV_ACCT_DATE) AND t.RESULT = SUCCESS配置表hdp.PROCEDURE_INFO中condition字段存放的是前驱语句如下:配置表hdp.PROCEDURE_INFO中EXPECTED字段存放的是前置过程的个数。当前置语句执行的结果等于EXPECTED字段中的值时,满足条件执行后续脚本。37入库脚本入库脚本核心代码如下:hive -e use ca; LOAD DATA LOCAL INPATH /ftpdir/ftpdir03/DHDP023$v_acct_day01.AVL OVERWRITE INTO TABLE ca_g_ext_info

24、; exit; 2&1 |tee -a $v_logfile /dev/null入库通过load方式加载到hive表中,生成的日志放到v_logfile变量中,后面通过日志来判断文件是否入库成功。38数据加工脚本数据加工核心代码如下:INSERT overwrite table CA.CA_APP_NUMBER partition(month_part = V_ACCT_MONTH) SELECT V_ACCT_MONTH, , T.APP_DESC, T.HOST_DESC, COUNT(DISTINCT T.USER_NO), sum(VISIT_TIMES), CASE WHEN T.A

25、PP_DESC LIKE %聊天通讯% THEN 01 WHEN T.APP_DESC LIKE %影音图像% THEN 02 WHEN T.APP_DESC LIKE %系统输入% THEN 03 WHEN T.APP_DESC LIKE %网络邮件% THEN 04 ELSE 99 END APP_ID FROM CA.CA_INFO_HTTP_APP_M T WHERE T.month_part = V_ACCT_MONTH GROUP BY T.APP_DESC, T.HOST_DESC; 39日志信息的捕获 v_result=cat $v_logfile | grep -s FAIL

26、ED | awk -F : print $1 /dev/null echo *RESULT:$v_result #如果sql执行成功,执行结果状态置为SUCCESS,并从执行日志中获取执行记录数 if $v_result != FAILED ; then v_retcode=SUCCESS v_retinfo=SUCCESS v_rowline_temp=sed -n /Rows loaded to/p $v_logfile /dev/null v_rowline=echo $v_rowline_temp |awk -F print $1 /dev/null if $v_rowline = ;

27、 then v_rowline=0 fi #如果sql执行失败,执行结果状态置为FAIL,并获取执行日志中的失败信息 else v_retcode=FAIL v_retinfo=cat $v_logfile | grep -s FAILED /dev/null v_retinfo=$v_retinfo/ v_retinfo=$v_retinfo/ /| v_rowline=0 fi脚本执行过程中生成的日志在v_logfile中,通过对日志文件的分析来判断是否执行成功或失败。返回success和fail40练习通过以上学习,大家动手操作创建三张表,分别为用户主表,用户url表和用户一周内访问ur

28、l排名前十标签表将数据从本地加载到hive数据库中的用户主表和用户url表中用shell脚本写加工过程,实现用户一周访问前十的url,将结果插入url前十的标签表中通过sqoop或者文件同步到关系型数据库中41练习创建用户主表CREATETABLEdwa_d_cus_3g_nuser_flag(area_idstring,user_idstring,cust_idstring,device_numberstring,pay_modestring,user_typestring,user_statusstring,innet_datestring,product_idstring,product

29、_namestring,product_classstring,product_class_namestring,is_innetstring,part_idstring,prov_idstring)PARTITIONEDBY(month_idstring,day_idstring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY| 42练习创建用户url表CREATETABLEdwa_s_d_wap_mb_url(month_idstring,day_idstring,device_numberstring,gprs_typestring,w3_prod_third_

30、typestring,w3_prod_second_typestring,w3_prod_first_typestring,total_cntbigint,total_flowbigint,total_timebigint,client_typestring)PARTITIONEDBY(monthstring,daystring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY|43练习创建用户一周内访问url排名前十的表create table dwa_v_d_wap_mb_url_label ( month_id string,day_id string,devic

31、e_number string,prov_id string,url_1 string , url_2 string,url_3 string,url_4 string,url_5 string,url_6 string,url_7 string,url_8 string,url_9 string,url_10 string)partitioned by (month string,day string)row format delimited fields terminated by | ;44提纲日常中问题解决四一Hadoop脚本开发三异构数据库的同步二ETL流程部署与调度45异构数据库数

32、据如何同步?CREATE TABLE CA_APP_NUMBER(acct_month string , area_no string , app_desc string , host_desc string , user_num double , visit_times double , app_id string )row format delimited fields terminated by t ;CREATE TABLE CA_APP_NUMBER(acct_month varchar2(24) , area_no varchar2(24) , app_desc varchar2(

33、24) , host_desc varchar2(24) , user_num number(10,5) , visit_times number(10,5) , app_id varchar2(24) );Hive表Oracle表异构数据库数据的同步目前有两中方式:传统的方式通过导出文件落地的方式通过hadoop生态系统中的组件sqoop不落地方式46文件落地传输方式经分一体机Hadoop集群TEXTSqluldr从oracle导出文件Hive加载异构数据库数据同步传统方式通过文件落地的形式,方便以后的维护。47文件入库Oracle数据库导出文件/home/oracle/sqluldr2.b

34、in safe=yes user=$v_oracle_user/$v_oracle_pwd$v_oracle_database query=$v_query log=$v_log_file field=0 x01 ncharset=CHINESE_CHINA.ZHS16GBK charset=UTF8 file=$v_txt_file“文件load到hive数据库中LOAD DATA LOCAL INPATH $v_txt_file OVERWRITE INTO TABLE $v_table_name PARTITION (MONTH_PART=$v_month,DAY_PART=$v_day

35、);48Sqoop传输方式经分一体机Hadoop集群Sqoop数据同步Sqoop是一种连接 传统关系型数据库 和 Hadoop 的桥梁,把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS HBase 和 Hive) 中。把数据从 Hadoop 系统里抽取并导出到关系型数据库里。49Sqoop export的使用方法sqoop export -connect /sqoop -username sqoop -password sqoop -table cities -export-dir cities-connnect: 指定JDBC URL-username/password:my

36、sql数据库的用户名-table:要导入的数据库表export-dir:数据在HDFS上存放目录50Sqoop export示例将数据从hadoop中导入到关系型数据库中/opt/mapr/sqoop/sqoop-1.2.0/bin/sqoop export -connect jdbc:oracle:thin:5:1521:lndwres -username ui -password ui -table ODS_D_USER_TAG_M -export-dir /user/hive/warehouse/gn.db/ods_d_user_tag_m_091/month_part=$v_month

37、/day_part=$v_day -fields-terminated-by | ;51Sqoop import使用方法sqoop import -connect /sqoop -username sqoop -password sqoop -target-dir cities -table cities-connnect: 指定JDBC URL-username/password:mysql数据库的用户名-target-dir:数据在HDFS上存放目录-table:要读取的数据库表52Sqoop import示例/opt/mapr/sqoop/sqoop-1.2.0/bin/sqoop im

38、port -hive-overwrite -connect jdbc:oracle:thin:5:1521:lndwres -username HADOOP -password HADOOP -target-dir /user/hive/warehouse/gm.db/gm_test/day_part=10/area_part=2105 -m 10 -split-by user_id -table GM_TEST -columns DAY_ID,AREA_NO,ACCT_MONTH,ACCESS_NBR -fields-terminated-by 001 -where DAY_ID=10 an

39、d AREA_NO=2105将数据从关系型数据库导入Hadoop中/opt/mapr/sqoop/sqoop-1.2.0/bin/sqoop import -hive-overwrite -connect jdbc:oracle:thin:10:1521:lndw1 -username JFdf -password ZHAOxi -target-dir /user/hive/warehouse/ci.db/ci_g_ext_info -m 1 -table CI.CI_G_EXT_INFO -fields-terminated-by 001;53提纲日常中问题解决四一Hadoop脚本开发三异构

40、数据库的同步二ETL流程部署与调度54ETL环境要求服务器环境JAVA环境:JDK5.0或JDK5.0以上版本。JDK5.0:需要在安装包app/WEB-INFO/lib/ 下加入livetribe-jsr223.jar。应用服务器:TOMCAT6.X。数据库环境数据库:数据库为ORACLE且必须为9i或以上版本。或者GP。客户端环境IE:IE6.0及IE6.0以上版本。需要安装Adobe Flash Player10.X插件。FIREFOX:需要安装Adobe Flash Player10.X插件。55Etl部署准备好以上环境,按以下步骤进行部署。为该系统在数据库上建立相应的的用户如:user/user;修改perties 中关于数据库信息配置。启动TOMCAT 运行系统。连接到数据库,依次执行安装包中initdb目录下的01-frame.sql, oralce 数据库执行 03-hesper-ORACLE-init.sql,GP数据库执行03-hesper-GP-init.sql修改 img/l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论