dataocean平台用继承spark的python脚本来实现抓取es数据到hive

在大数据生态里,ES作为一个极致搜索平台,可依据json格式快速在线查询过滤以及修改数据,由于json数据是半结构化数据,所以从hive数仓数据交换到es很简单,但是从es交换到hive就需要对应字段切分,现在基本上使用的都是scala,java来实现,虽然这些语言是多线程的,也能实现很多功能需求,但同样的开发难度和维护难度也上去了。

你需要配置环境,比如连接es的,数据导入hive的,这些常用maven来实现

阿里云这些还好,可以在网上下载相关包,但是对于一些定制化的大数据平台,你只能离线配置相关环境。

环境搭配完成后,对于抓取到的es数据你需要按照json数据来一一切分传入到大数据平台

最后再打成jar包,创建作业调度运行

这一套下来的开发成本还是很大的,我们细想一下,在同一个大数据生态里,为什么我们还要利用其他的语言和环境来做这个数据传输,为什么不能直接在平台里做,在平台里开发呢?

于是简单方便的python便应运而生,就只需要几行代码就可以轻松搞定。

首先是写好要运行的sql以及相关临时表和导入表,数据会从es的表里先临时导入到临时表,再从临时表里把数据写到我们的目标hive表

需要注意的是select的列要按表列顺序一个个的写出来,否则会数据错位

tmpTable='test1'
sql='insert overwrite table pro.tab select col1,col2,col3 from {}'.format(tmpTable)

最后是建main函数,在大数据平台里的python作业,统一把main函数当作主函数,并继承spark,在函数里配置es的ip,端口,索引,最后运行spark里的sql函数,静待数据成功。

def main(spark):
    df = spark.read \
        .format("org.elasticsearch.spark.sql") \
        .option("es.nodes", "xx.xx.xx.xx") \
        .option("es.port","xxxx") \
        .option("es.resource", "xxxxxxxxxxxx/xxxxxxxx") \
        .load()
    # df.show(20)
    df.createOrReplaceTempView(tmpTable)
    spark.sql(sql)
    

查询验证数据

select * from pro.tab limit 10

数据正常,完美

后续可完善调度,发布到任务,至此一个作业开发完毕

附录:完整代码

#/bin/python3 
# 系统临时表,表名无需更改
tmpTable='test1'

# 运行的sql,需要改表名,字段列也需一个个按顺序排出,否则数据会错位
# 这个表名是hive平台里的table_name
sql='insert overwrite table pro.tab select col1,col2,col3 from {}'.format(tmpTable)

def main(spark):
    df = spark.read \
        .format("org.elasticsearch.spark.sql") \
        .option("es.nodes", "xx.xx.xx.xx") \
        .option("es.port","xxxx") \
        .option("es.resource", "tab/tab") \
        .load()
    # df.show(20)
    df.createOrReplaceTempView(tmpTable)
    spark.sql(sql)
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神芷迦蓝寺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值