小记--------nifi通过作业流模板 添加模板-修改属性-启动

mysqlToHiveORC-作业流
集群模式、使用GenerateTableFetch进行分流SQL语句---ExecuteSQLRecord执行SQL语句---ConverAvroToORC将avro格式转换为ORC格式---PutHDFS写入hdfs(写入的路径指定到hive表load的默认路径下)
 
一、在画布上手动创建标准作业流
1.GenerateTableFetch处理器配置
select name , date , time from yu.qiang WHERE date < DATE_FORMAT(NOW(),'%Y-%m-%d') and date > DATE_FORMAT(DATE_SUB(NOW(),INTERVAL +1 DAY),'%Y-%m-%d');
 
1.Database Connection Pooling Service 选择DBCPConnectionPool(下面将如何配置)
 
2.Database Type : 选择mysql数据库类型
 
3.Table Name :要同步的mysql表名
 
4.Partition Size : 每一块的数据大小(假设要同步的mysql表行数是1000,如果该位置配置100,那么会分成10条sql语句;例:select * from test limit 100 ; select * from test limit 100 offset 100;select * from test limit 100 offset 200;)
 
5.Column for Value Partitioning :要查询的字段(如果不写则是 select * )
 
6.Additional WHERE clause : 给定生成后的SQL语句where条件(例:DATE_FORMAT(create_time,'%Y-%m-%d') > DATE_FORMAT(DATE_SUB(NOW(),INTERVAL +4 DAY),'%Y-%m-%d') and  DATE_FORMAT(create_time,'%Y-%m-%d') < DATE_FORMAT(NOW(),'%Y-%m-%d') 通过该where条件可以进行抽取部分数据)
 
1.1 DBCPConnectionPool配置
Database Connection URL : jdbc:mysql://IP:PORT/DatabaseName?characterEncoding=UTF-8&zeroDateTimeBehavior=round
 
Database Driver Class Name : com.mysql.jdbc.Driver
 
Database User :  数据库用户名 
 
Password :  数据库密码
 
配置完成后点启动
 
2.ExecuteSQLRecord处理器配置
Database Connection Pooling Service : 使用和GenerateTableFetch处理器同样的Database connection pool 即可
 
Record Writer : 使用默认Avro格式即可
 
3.ConvertAvroToORC处理器配置
ORC Configuration Resources:需要指定nifi集群中的hive-site.xml路径
 
Compression Type:压缩格式类型,可选可不选
 
Hive Table Name:要落地的hive表名(需要提前将表创建好)
 
 
4.PutHDFS处理器配置
Hadoop Configuration Resources:需要指定nifi集群中hadoop的core-site.xml和hdfs-site.xml位置路径
 
Directory:最后落地到hdfs的路径(因为我们要直接同步到hive表中,所以将该路径直接指定到集群中hive同步数据的路径下)
 
Conflict Resolution Strategy:append(追加策略)
 
5.配置好所有的处理器后创建流(也就是从上之下用箭头连起来)
需要注意的是因为我们想要完全利用集群的资源,所以在GenerateTableFetch处理器和ExecuteSQLRecord处理器的连接处需要配置
设置为轮询Round robin  这样GenerateTableFetch处理器就会把分成的若干SQL语句以轮询的方式给到集群中所有节点。
 
*按照以上操作之后启动整个作业流,不出意外的情况下是可以进行数据落地到hdfs上。
但是要注意的是我们要落地到hive中,所以需要提前执行创建hive的SQL语句。如果有分区那么也需要提前执行分区语句
 
创建hive分区表
CREATE TABLE `ods_order_info_nifi` (
  `id_` string  COMMENT '订单id',
  `order_no` string  COMMENT '订单编号:目前和订单id一样,14位{日期(年月)6位+8位序列号(位数不足补0)}',
  `vehicle_id` int  COMMENT '车辆id',
  `vehicle_series_id` int  COMMENT '车型/车系ID',
  `vehicle_brand` string  COMMENT '车辆品牌描述',
  `vehicle_series` string  COMMENT '车辆型号描述',
  `vehicle_license` string  COMMENT '车牌号',
  `driver_id` int  COMMENT '司机id',
  `driver_name` string  COMMENT '司机姓名',
  `driver_mobile` string  COMMENT '司机手机',
  `renter_id` int  COMMENT '乘客id',
  `renter_full_name` string  COMMENT '乘客姓名',
  `renter_mobile` string  COMMENT '乘客手机',
  `order_type` int  COMMENT '订单类型。0、实时订单 1、预约订单',
  `state` int  COMMENT '订单流转状态:1已下单,2、已接单,3用车中,4到达目的地,5未支付,6已支付完成,7司机到达约定地点',
  `cancel` int  COMMENT 'cancel:0未取消,1用户取消,2司机取消,3超时未接单,系统自动取消,4客服取消, 5第三方派单取消',
  `work_flow` int  COMMENT 'work_flow:0未结束,1已结束;',
  `close_remark` string  COMMENT '关闭订单备注(运营平台操作)',
  `close_time` string  COMMENT '关闭订单时间',
  `close_user_id` int  COMMENT '关闭订单管理员Id',
  `end_reason` string  COMMENT '取消原因。数据字典。以逗号相隔。',
  `create_time` string  COMMENT '订单创建时间',
  `cancel_time` string  COMMENT '取消时间',
  `estimate_geton_time` string  COMMENT '预估上车时间',
  `wait_time` string COMMENT '等待时长。单位:s',
  `wait_mile` int  COMMENT '空驶里程',
  `plan_model` string  COMMENT '预定车型',
  `actual_model` string  COMMENT '实际使用车型',
  `begin_time` string  COMMENT '订单分时计费开始时间\r\n            注:\r\n            分时:1、创建订单后15分钟没取车,时间为创建时间+15分钟,\r\n                       2、15分钟内取车,为取车时间 \r\n            日租:为创建订单时间 加 日租时间',
  `end_time` string  COMMENT '用户还车成功时间,或者客服关闭订单时间',
  `get_on_time` string  COMMENT '乘客上车时间',
  `begin_address_code` string  COMMENT '发起地行政区域代码',
  `navigation_brand` int  COMMENT '1.百度 2.高德。默认为2:高德地图',
  `Encrypt` int  COMMENT '1:GCJ-02测绘局标准\r\n            2:WGS84 GPS标准\r\n            3:BD-09百度标准\r\n            4:其他',
  `city_name` string  COMMENT '下单所属城市名称',
  `open_lng` double  COMMENT '订单起始位置经度。乘客预计上车地点经度',
  `open_lat` double  COMMENT '订单起始位置纬度。乘客预计上车地点纬度',
  `open_location` string  COMMENT '订单起始位置信息。乘客预计上车地点位置信息',
  `close_lng` double  COMMENT '订单结束位置经度。乘客预计下车地点经度',
  `close_lat` double  COMMENT '订单结束位置纬度。乘客预计下车地点纬度',
  `close_location` string  COMMENT '订单结束位置信息。乘客预计下车地点位置信息',
  `receive_lng` double  COMMENT '司机接单位置经度',
  `receive_lat` double  COMMENT '司机接单位置纬度',
  `go_on_lng` double  COMMENT '乘客上车位置经度。司机点击用户已上车的按钮后记录',
  `receive_location` string  COMMENT '司机接单位置信息',
  `go_on_lat` double  COMMENT '乘客上车位置纬度。司机点击用户已上车的按钮后记录',
  `go_on_location` string  COMMENT '乘客上车位置信息。司机点击用户已上车的按钮后记录',
  `arrive_lng` double  COMMENT '司机到达位置经度。乘客实际下车位置的经度',
  `arrive_lat` double  COMMENT '司机到达位置纬度。乘客实际下车位置的纬度',
  `arrive_location` string  COMMENT '司机到达位置信息。乘客实际下车的位置信息',
  `close_gps_time` string  COMMENT '结束时上传gps时间',
  `charge_mileage` int  COMMENT '订单里程',
  `price_low_speed` int  COMMENT '低速等待时长',
  `peak_up_price` int  COMMENT '高峰时段时间加价金额。单位:分',
  `night_up_price` int  COMMENT '夜间时段里程加价金额。单位:分',
  `pay_type` int  COMMENT ' 支付方式:1-微信支付,2-支付宝,3-余额,4-企业支付,5-优惠支付,6-线下支付,8-零元支付,11-银联支付,13-云闪付H5',
  `pay_enterprise_id` int  COMMENT '支付企业id',
  `pay_time` string  COMMENT '支付完成时间',
  `call_mode` int  COMMENT '叫车方式(0:实时:1预约)',
  `act_id` int  COMMENT '活动ID',
  `markup_multiple` decimal(10,2)  COMMENT '加价倍率',
  `passenger_num` int  COMMENT '乘客人数',
  `appointment_start_time` string  COMMENT '预约开始时间',
  `appointment_end_time` string  COMMENT '预约结束时间',
  `pay_estimate` int  COMMENT '预估费用。单位:分',
  `esDistance` double  COMMENT '预估里程',
  `esTime` int  COMMENT '预估时间',
  `pay_all` int  COMMENT '支付费用(可能比产生费用少,比如优惠券之类)',
  `pay_normal` int  COMMENT '产生费用:里程费 + 时间费 + 过桥费 + 停车费 + 高速费 + 远途费 + ...',
  `book_tip` int  COMMENT '预约服务费。单位:分',
  `passenger_tip` int  COMMENT '附加费。单位:分',
  `parking_tip` int  COMMENT '停车费。单位:分',
  `pontage_tip` int  COMMENT '过桥费。单位:分',
  `tollfee_tip` int  COMMENT '高速费。单位:分',
  `mileage_price` int  COMMENT '里程费。单位:分',
  `hour_price` int  COMMENT '时长费。单位:分',
  `empty_price` int  COMMENT '空驶费。单位:分',
  `far_up_price` int  COMMENT '远途加价金额。单位:分',
  `other_up_price` int  COMMENT '其他加价金额。单位:分',
  `service_fee` int  COMMENT '抽成比例',
  `driver_income` int  COMMENT '抽成之后的实际价格。司机最终收入(司机端显示)。单位:分',
  `company_income` int  COMMENT '平台收入。单位:分',
  `disbursements` int  COMMENT '是否系统垫付。0:否1:是',
  `driver_evaluate_state` int COMMENT '用户评价状态。0、未评审 1、已评审 2、系统评价',
  `renter_evaluate_state` int  COMMENT '用户评价状态。0、未评审 1、已评审 2、系统评价',
  `cancel_reason_desc` string COMMENT '取消原因',
  `field1` string ,
  `fieid2` string ,
  `field3` string ,
  `field4` string ,
  `field5` string  COMMENT '备用5',
  `expected_vehuse_time` string  COMMENT '预计用车时间',
  `renter_order_remark` string  COMMENT '乘客备注',
  `bespeak_type` string  COMMENT '预约类型(BESPEAK:预约,IMMEDIATE:即时,SHUTTLE:接送机,DAILY_RENT:日租,HALF_DAILY_RENT:半日租)',
  `is_voice` int  COMMENT '是否语音订单',
  `by_car_type` int  COMMENT '用户下单操作,"1":快车 "2":出租车 "3":专车 4:一键呼叫多种车型',
  `by_car_type_mode` string COMMENT '呼叫方式,1:快车,2:出租车,3:专车,多种方式用逗号分隔',
  `push_order_type` int  COMMENT '下单场景,1:常规订单,2:摇一摇订单',
  `order_business_type` int  COMMENT '订单业务类型:"1":快车 "2":出租车 "3":专车  系统派单成功后,更新该字段的值',
  `order_base_id` int  COMMENT '订单基础表id',
  `driver_arrive_appoint_time` string  COMMENT '司机到达约定地点时间',
  `driver_arrive_appoint_lng` double  COMMENT '司机到达约定地点经度',
  `driver_arrive_appoint_lat` double  COMMENT '司机到达约定地点纬度',
  `driver_arrive_appoint_location` string  COMMENT '司机到达约定地点名称',
  `order_source` int  COMMENT '订单来源,1、东风出行APP 2、高德地图 3、H5 4、滴滴 5、东风出行敬老版  6.东风商旅、7.云闪付H5',
  `is_invoice` int  COMMENT '是否已开票,0、未开票  1、已开票',
  `company_service_fee` int  COMMENT '司管公司分成比例',
  `company_service_income` int  COMMENT '司管分成金额。单位:分',
  `vehiclel_company_service_fee` int  COMMENT '车管公司分成比例',
  `vehiclel_company_service_income` int  COMMENT '车管分成金额。单位:分',
  `channel_service_fee` int  COMMENT '渠道分成比例',
  `channel_service_income` int  COMMENT '渠道分成金额。单位:分',
  `driver_fee` int  COMMENT '司机分成比例',
  `vehiclel_company_id` int  COMMENT '车管方id',
  `company_service_id` int  COMMENT '司管方id',
  `channel_service_id` int  COMMENT '渠道方id',
  `first_renter_no` int  COMMENT '一级账号(父账号)',
  `second_renter_no` int  COMMENT '二级账号(祖账号)',
  `first_reward_per` int  COMMENT '一级分成占比',
  `second_reward_per` int  COMMENT '二级分成占比',
  `first_order_award` int  COMMENT '一级订单分成金额(父)',
  `second_order_award` int  COMMENT '二级订单分成金额(祖)',
  `adjust_amount` int  COMMENT '客服调价金额',
  `old_pay_normal` int  COMMENT '原金额',
  `free_amount` int  COMMENT '免单金额',
  `refund_amount` int  COMMENT '已退款金额',
  `deduct_travel` int  COMMENT '行程费用退款金额',
  `deduct_addition` int  COMMENT '附加费用退款金额',
  `deduct_empty` int  COMMENT '空驶费用退款金额',
  `open_oid` string  COMMENT '第三方订单id',
  `open_pid` string  COMMENT '第三方乘客id',
  `is_replace` int  COMMENT '是否是代付订单:0-否,1-是',
  `receive_time` string  COMMENT '司机接单时间,即时单跟begintime相同',
  `driver_source` int  COMMENT '接单的司机终端 0 司机端 1车机版',
  `black_num_flag` int  COMMENT '是否是风险订单,0否,1是',
  `activity_amount` int  COMMENT '活动打折金额 单元分',
  `coupon_amount` int  COMMENT '优惠券优惠金额',
  `start_poi_id` string  COMMENT '起点poiId',
  `end_poi_id` string  COMMENT '终点poiId',
  `driver_property` int  COMMENT '司机标识:0 社会  1自营',
  `badge_id` int  COMMENT '司机徽章id',
  `marker_symbol` int  COMMENT '灰度标记')
COMMENT '约车订单基本信息表'
PARTITIONED BY (
  `month` string)
CLUSTERED BY (
  id_)
  INTO 5 BUCKETS
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'hdfs://nameservice1/user/hive/warehouse/ods.db/ods_order_info_nifi'
  
 
 
CREATE external  TABLE `ods_qiang` (
  `name` string  COMMENT '姓名',
  `date` string  COMMENT '日期',
  `time` string COMMENT '时间戳')
COMMENT 'test信息表'
 
 
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'hdfs://nameservice1/user/hive/warehouse/ods.db/ods_qiang'
 
 
  
  
创建hive分区
alter  table ods.ods_order_info_nifi add if not exists partition (month='201910') location '201910';
 
 
alter  table ods.ods_order_info_nifi add if not exists partition (month='202008') location '202008';
 
 
 
 
 
 
2.进入接口开发:
2.0 创建processor group
 
需要传递的参数有:
component
    1.name:processor group name
    2.position:x轴、y轴坐标
    3.disconnectedNodeAcknowledged:false
revision
    1.clientId :服务器clientId 通过 GET http://{nifiHost}/nifi-api/flow/client-id 获取。
    2.version 写死 0 
 
2.1添加模板
POST http://cdh6-df3:8380/nifi-api//process-groups/{当前模板所在processorGroupId}/template-instance
需要传入的参数:
  1. disconnectedNodeAcknowledged: false(固定)
  2. originX: x轴坐标(double)
  3. originY: y轴坐标(double)
  4. templateId: 模板Id 获取:GET http://172.16.252.195:8380/nifi-api/flow/templates 通过返回值的name 获取到templateId
 
返回值:
获取到每一个processor的processorId
 
 
 
配置 GenerateTableFetch 处理器
PUT http://ip:port/nifi-api/processors/{processorsId}
 
 
配置ExecuteSQLRecord
 
 
配置ConvertAVroToORC
 
 
配置PutHDFS
 
启动processor group 中 所有的processor
PUT http://{nifihost}/nifi-api/flow/process-groups/{processgroupId}
 
 
posted @ 2020-09-24 23:43  于二黑  阅读(752)  评论(0编辑  收藏  举报