环境

环境使用:hadoop3.1,Python3.6,ubuntu18.04

Hadoop是使用Java开发的,推荐使用Java操作HDFS。

有时候也需要我们使用Python操作HDFS。

本次我们来讨论如何使用Python操作HDFS,进行文件上传,下载,查看文件夹,以及如何使用Python进行MapReduce编程。

使用Python操作HDFS

首先需要安装和导入hdfs库,使用pip install hdfs。

1. 连接并查看指定路径下的数据

from hdfs import * client = Client('http://ip:port') #2.X版本port 使用50070 3.x版本port 使用9870client.list('/') #查看hdfs /下的目录

2. 创建目录

client.makedirs('/test')client.makedirs('/test',permision = 777 ) # permision可以设置参数

3. 中命名、删除

client.rename('/test','123') #将/test 目录改名为123client.delete('/test',True) #第二个参数表示递归删除

4.下载

将/test/log.txt 文件下载至/home目录下。

client.download('/test/log.txt','/home')

5. 读取

with client.read("/test/[PPT]Google Protocol Buffers.pdf") as reader:    print reader.read()

其他参数:

read(args, *kwds)

hdfs_path:hdfs路径

offset:设置开始的字节位置

l- ength:读取的长度(字节为单位)

buffer_size:用于传输数据的字节的缓冲区的大小。默认值设置在HDFS配置。

encoding:指定编码

chunk_size:如果设置为正数,上下文管理器将返回一个发生器产生的每一chunk_size字节而不是一个类似文件的对象

delimiter:如果设置,上下文管理器将返回一个发生器产生每次遇到分隔符。此参数要求指定的编码。

progress:回调函数来跟踪进度,为每一chunk_size字节(不可用,如果块大小不是指定)。它将传递两个参数,文件上传的路径和传输的字节数。称为一次与- 1作为第二个参数。

6.上传数据

将文件上传至hdfs的 /test下。

client.upload(‘/test’,’/home/test/a.log’)

Python-MapReduce

编写mapper代码,map.py:

import sysfor line in sys.stdin: fields = line.strip().split() for item in fields: print(item + ' ' + '1')

编写reducer代码,reduce.py:

import sysresult = {}for line in sys.stdin: kvs = line.strip().split(' ') k = kvs[0] v = kvs[1] if k in result: result[k]+=1 else: result[k] = 1for k,v in result.items(): print("%s\t%s" %(k,v))

添加测试文本,test1.txt:

tale as old as timetrue as it can bebeauty and the beast

本地测试执行map代码:

`cat test1.txt | python map.py`结果:

tale 1as 1old 1as 1time 1true 1as 1it 1can 1be 1beauty 1and 1the 1beast 1

本地测试执行reduce代码:

cat test1.txt | python map.py | sort -k1,1 | python reduce.py

执行结果:

and 1be 1old 1beauty 1true 1it 1beast 1as 3can 1time 1the 1tale 1

在Hadoop平台执行map-reduce程序

本地测试完毕,编写脚本在HDFS中执行程序

脚本:run.sh (请根据本机环境修改)

HADOOP_CMD="/app/hadoop-3.1.2/bin/hadoop"STREAM_JAR_PATH="/app/hadoop-3.1.2/share/hadoop/tools/lib/hadoop-streaming-3.1.2.jar"INPUT_FILE_PATH_1="/py/input/"OUTPUT_PATH="/output"$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH# Step 1.$HADOOP_CMD jar $STREAM_JAR_PATH \-input $INPUT_FILE_PATH_1 \-output $OUTPUT_PATH \-mapper "python map.py" \-reducer "python reduce.py" \-file ./map.py \-file ./reduce.py \

添加执行权限chmod a+x run.sh;执行测试:bash run.sh,查看结果:

练习

1. 文件合并去重

输入文件file1的样例如下:

20150101 x

20150102 y

20150103 x

20150104 y

20150105 z

20150106 x

输入文件file2的样例如下:

20150101 y

20150102 y

20150103 x

20150104 z

20150105 y

根据输入文件file1和file2合并得到的输出文件file3的样例如下:

20150101 x

20150101 y

20150102 y

20150103 x

20150104 y

20150104 z

20150105 y

20150105 z

20150106 x

对于两个输入文件,即文件file1和文件file2,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件file3。为了完成文件合并去重的任务,你编写的程序要能将含有重复内容的不同文件合并到一个没有重复的整合文件,规则如下:

第一列按学号排列;

学号相同,按x,y,z排列。

2. 挖掘父子关系

输入文件内容如下:

child parent

Steven Lucy

Steven Jack

Jone Lucy

Jone Jack

Lucy Mary

Lucy Frank

Jack Alice

Jack Jesse

David Alice

David Jesse

Philip David

Philip Alma

Mark David

Mark Alma

输出文件内容如下:

grandchild grandparent

Steven Alice

Steven Jesse

Jone Alice

Jone Jesse

Steven Mary

Steven Frank

Jone Mary

Jone Frank

Philip Alice

Philip Jesse

Mark Alice

Mark Jesse

你编写的程序要能挖掘父子辈关系,给出祖孙辈关系的表格。规则如下:

孙子在前,祖父在后

孙子相同,祖父的名字按照A-Z排列

小编寄语

最后小编帮助大家整理了一套python教程,下面展示了部分,希望也能帮助对编程感兴趣,想做数据分析,人工智能、爬虫或者希望从事编程开发的小伙伴,毕竟python工资也还可以,如果能帮到你请点赞、点赞、点赞哦~~

python与hadoop的结合_跟着小编一起学习使用Python操作Hadoop,Python-MapReduce相关推荐

  1. python写闲鱼脚本_你想要的闲鱼日常操作,Python 给你实现了

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...

  2. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  3. python人工智能入门书籍推荐-小编就给大家推荐几本python机器学习入门书!

    很多人对于机器学习很感兴趣,所以想要通过一些书籍来学习研究,那么有哪些机器学习入门书籍推荐呢?本文小编就给大家推荐几本python机器学习入门书,大家可以去书店具体购买. 有哪些机器学习入门书籍推荐呢 ...

  4. 学python买什么书-Python爬虫入门看什么书好 小编教你学Python

    Python爬虫入门看什么书好 小编教你学Python 时间:2018-01-12     来源:Python爬虫入门讲解 生活在21世纪的互联网时代,各类技术的发展可谓是瞬息万变,这不今天编程界又出 ...

  5. 跟着小甲鱼学python怎么样_跟着小甲鱼的python视频学习,小白能够接受吗?

    查看: 3709|回复: 14 跟着小甲鱼的python视频学习,小白能够接受吗? 电梯直达 发表于 2018-4-29 16:57:27 | 只看该作者 |倒序浏览 |阅读模式 马上注册,结交更多好 ...

  6. python怎么画飞天小海龟_跟着 “小海龟” 畅游画图世界

    原标题:跟着 "小海龟" 畅游画图世界 Python程序中内置了一种绘图模块Turtle(海龟),翻译过来叫海龟绘图. Python turtle能做什么 它是一个绘图方式,Pyt ...

  7. python常用的表达式有关系表达式_数学关系式 表示成正确的 Python表达式为_________。_学小易找答案...

    [单选题]下列选项中,不属于 Python特点的是_______. [判断题]在经济计量分析中,模型参数一旦被估计出来,就可直接运用于实际的计量经济分析. [多选题]计量经济模型的应用在于( ) [填 ...

  8. 十位数和个位数交换python_整型变量 x中存放了一个两位数,要将这个两位数的个位数字和十位数字交换位置,例如,13变成31,正确的Python表达式是________。_学小易找答案...

    [多选题]计量经济学检验主要是检验模型是否符合计量经济方法的基本假定.检验内容包括( ) [填空题](_)是运用理论计量经济学提供的工具,研究经济学中某些特定领域的经济数量问题. [多选题]下列属于时 ...

  9. python爬取网页汉字_程序小技巧:Python3借助requests类库3行代码爬取网页数据!快来...

    爬取网页数据是python很长干的一件事情,不过做起来基本上都是很冗长的一段代码,看起来复杂,不宜理解.今天给大家分享一个小诀窍,利用python3中的requests类库进行爬取网页数据. 我们先看 ...

最新文章

  1. Kali Linux又增加一个顶级域名kali.download
  2. 直播 | 腾讯天衍实验室张子恒:详细解读天衍实验室知识图谱对齐技术
  3. python 正则表达式语法大全_Python 之父撰文回忆:为什么要创造 pgen 解析器?
  4. 【机器学习】决策树知识点小结
  5. apache mesos_Apache Mesos + Marathon和Java EE
  6. php ci 框架 扩展缓存类,CodeIgniter扩展核心类实例详解
  7. 【李宏毅机器学习】Convolutiona Neural Network 卷积神经网络(p17) 学习笔记
  8. 对于一组给定的叶子结点_高糊图片可以做什么?Goodfellow等人用它生成一组合理图像...
  9. 中国移动首款自主品牌5G手机上市:同步支持NSA/SA
  10. 罗永浩回应做主播赚钱还债;360 否认裁员;Kubernetes 1.18 版本发布| 极客头条
  11. WEB标准学习路程之CSS:7.表格,滚动条,打印
  12. JAVA共通関数--システム時刻を取得する(1)
  13. kworker内核工作队列详解
  14. javascript教程
  15. 下载的ContentType设置
  16. 多媒体网路multimedianetworkingCDN的全称是Content Delivery NetworkSIP(Session Initiation Protocol)是一个应用层的信
  17. 程序员复试都准备什么_考研复试一般能过吗 主要都考什么
  18. 德昂年会—北京站圆满落幕
  19. N个鸡蛋放进M个篮子问题
  20. 支付宝广告投放形式有哪些?支付宝广告的投放方向!

热门文章

  1. ConstraintLayout内的控件填充满空间
  2. (Jira)Bug提单规范小结
  3. EOF-DataScience:数据预处理/特征工程之线性变换—四种特征缩放Scaling算法简介、标准化standardization、归一化Normalization的概述与区别
  4. 华侨大学计算机学院保研情况,华侨大学计算机科学与技术学院导师简介:张国亮...
  5. 测试接口生成文档的工具 APIFOX
  6. python数据处理——同一行或同一列的错位相减法
  7. 高群耀:电影分区放映帮助民族电影走出国门
  8. 电大中专计算机等级考证,电大中专文凭有什么用吗?
  9. golang for循环详解
  10. c# 微信公众号开发(一)服务器配置,验证token