Hadoop Streaming 使用 Python + NLTK 进行大数据分词心得

Hadoop Streaming 就是使用 hadoop jar命令 调用streaming jar包进行MR. 通过标准输入和标准输出进行交互. 脚本语言如python会从标准输入中读, 向标准输入中写.

hadoop jar 命令有两种类型的参数, generic options 和 command options. 在格式上 必须先写generic options. 

以下英文转自:https://hadoop.apache.org/docs/r1.2.1/streaming.html

bin/hadoop command [genericOptions] [streamingOptions]

The Hadoop generic command options you can use with streaming are listed here:

Parameter Optional/Required Description
-conf configuration_file Optional Specify an application configuration file
-D property=value Optional Use value for given property
-fs host:port or local Optional Specify a namenode
-jt host:port or local Optional Specify a job tracker
-files Optional Specify comma-separated files to be copied to the Map/Reduce cluster
-libjars Optional Specify comma-separated jar files to include in the classpath
-archives Optional Specify comma-separated archives to be unarchived on the compute machines

给一个我自己的例子:

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.8.0.jar \
	-files /home/uname/PycharmProjects/untitled/pExtract/p_mapper.py,/home/uname/PycharmProjects/untitled/pExtract/p_reducer.py,hdfs://127.0.0.1:9000/output/part-00000 \
	-D mapred.map.tasks=7 \
	-D mapred.reduce.tasks=3 \
	-input /input/casetext_LF.txt \
	-output /p/above2000 \
	-mapper "python p_mapper.py" \
	-reducer "p_reducer.py"

-files参数: 指定要放到hadoop分布式缓存的文件, 用逗号分开. 可以指向hdfs中的文件, 在脚本调用的时候只要写文件名就可以了, 不必写全路径

-mapper -reducer参数: 指定脚本, 在上面这个例子里, mapper用的是命令形式, reducer直接填了文件名. 如果直接填文件名的话,脚本头上要加环境信息, 比如python就要加:  #!/usr/bin/env python


NLTK 是一个比较特殊的python 库, 它自己还会提供一个download功能, 下载一下语料库, 分词库, 当时遇到的问题是hadoop streaming调用NLTK的函数时, 找不到NLTK自己的语料库, 解决办法:

扫描二维码关注公众号,回复: 2198768 查看本文章
nltk.data.path.append('/path/to/data')

在代码中显式指定NLTK的语料库文件夹 nltk_data 的位置


Hadoop Streaming 的logs位置:

在HADOOP_HOME的 logs/userlogs下, python脚本可以通过向标准错误中print信息, 来记录日志:

print >> stderr, "error message"
由于各种发行版的log位置和log编码方式都不一样, 我建议可以在python 脚本里指定一个位置自己写入文件记录日志. 可以在所有slave上开一个所有人都拥有写入权限的文件夹, 让脚本输出目录.





猜你喜欢

转载自blog.csdn.net/rav009/article/details/80707761