Python+Hadoop streamming 编写分布式程序

本文详细介绍如何将本地开发的模型部署至Hadoop平台进行大规模数据预测,包括编写Mapper.py、Hadoop服务器设置、创建输入输出文件夹、上传文件及编写执行脚本等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给了个任务是将自己开发好的模型和程序放到Hadoop平台上去执行,之前只是开发模型,不负责这些工作,第一次做,记录一下。

step1:编写一个Mapper.py

将代码的预测部分封装起来,在Mapper.py中整体有两部分,第一部分是加载模型,第二部分是模型预测,

类似:

# encoding=utf-8
import sys
import terminal_predict as pred
#加载模型
pred.model_init()
#预测
print('input the test sentence:')
for line in sys.stdin:
    pred.predict_online(line)

step2:Hadoop服务器相关设置

1.将我们的代码和模型,全部放在Hadoop服务器的本地某个路径下,如:/data/person_ner_online下面,整个项目中需要用到的文件全部放在同一级目录下,不能存在二级目录中,也不能在程序中从某个文件夹里导入自己的py。

2.登录到自己数据输入的Hadoop目录下:

hadoop fs -ls /data/work

3.创建输入文件夹:

 hadoop fs -mkdir /data/work/input

4.在本地终端创建自己的输入文件

vim 123.txt

5.将该输入文件上传到Hadoop的input目录下:

hadoop fs -put 123.txt /data/work/input

6.创建运行结果存储的输出文件夹output

hadoop fs -mkdir /data/work/output

step3:编写shell脚本

脚本模板如下,一般情况下我们只针对输入输出文件做一些改动即可。

#!/bin/bash

# 修改自己的输入输出目录即可
INPUT_DIR=/data/input/testCorpus.txt
OUTPUT_DIR=/data/output

hadoop fs -test -e ${OUTPUT_DIR}
if [ $? -eq 0 ] ;then
    hadoop fs -rmr ${OUTPUT_DIR}
else
    echo "${OUTPUT_DIR} not found!"
fi

hadoop jar /usr/local/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar \
	-archives hdfs://ns3-backup/dw_ext/up/ext/content/Python.zip#Python \
	-input hdfs://ns3-backup${INPUT_DIR} \
	-output hdfs://ns3-backup${OUTPUT_DIR} \
	-mapper "Python/bin/python Mapper.py" \
	-jobconf mapred.map.tasks=15 \
	-jobconf mapred.job.name="Mapper" \
	-file bert_config.json \
	-file bert_model.ckpt.data-00000-of-00001 \
	-file bert_model.ckpt.index \
	-file bert_model.ckpt.meta \
	-file checkpoint \
	-file bert_lstm_ner.py \
	-file conlleval.py \
	-file data_process.py \
	-file lstm_crf_layer.py \
	-file label2id.pkl \
	-file label_list.pkl \
	-file terminal_predict.py \
	-file tf_metrics.py \
	-file utils.py \
	-file model.ckpt-3173.data-00000-of-00001 \
	-file model.ckpt-3173.index \
	-file model.ckpt-3173.meta \
	-file Mapper.py \
	-file tokenization.py \
	-file modeling.py \
	-file vocab.txt

特别注意:

1. archives hdfs  这里面的一般的Python路径一般是默认的Hadoop平台上的Python环境,如果我们在本地是用Python3跑的代码,在平台上默认用Python2,则会出现不兼容的问题,所以我们可以自己打包一个自己的开发环境,然后放到指定路径下,然后通过该参数指定我们的开发环境的路径,这样就可以解决环境兼容问题了。

2. -file 里是我们代码执行时需要调用的所有的输入文件,如果有代码是放在一个包(文件夹),或者模型在一个文件夹下,我们必须把这些所有的代码和文件都拉出来,放在最外面的一级目录,这样才可以push到Hadoop上去。

step4:将.sh脚本也放在Hadoop平台的本地,执行.sh

我们的模型预测就可以在Hadoop上运行了,最后运行结束后可以去

hadoop fs -ls /data/work/output

下查看输出文件,即可看到预测结果:

hadoop fs -cat /data/output/part-00000

 

 

关于Hadoop和编写分布式程序的资料,可以参考这篇博客:

https://www.cnblogs.com/joyeecheung/p/3760386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值