千家信息网

大数据实践学习总结(3)--MapReduce

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,关于纠结,曾经很纠结搞大数据的人是否要学习代码,更何况自己是售前方向的。理解原理就可以了,后来发现,纠结的时间越来越多。就明白了,与其纠结是否要去搞代码,不如自己实际操作一下代码,找一个业务场景代入之
千家信息网最后更新 2025年02月04日大数据实践学习总结(3)--MapReduce

关于纠结,曾经很纠结搞大数据的人是否要学习代码,更何况自己是售前方向的。理解原理就可以了,后来发现,纠结的时间越来越多。就明白了,与其纠结是否要去搞代码,不如自己实际操作一下代码,找一个业务场景代入之后好好学习一下。简单来说:与其纠结,不如实干!



简单来说,MapReduce的学习开始感觉到吃力。可能是跟自己之前没有代码基础有关,虽是学有三年大数据的原理基础,但对相关代码的实现还是没有实际操作过。但敲完这一遍代码,看到最后的WEB结果展示。心里还是多少有些欣慰。对于一些技术,你知道,了解并能够运用到实际工作过程中是要有一个阶段的。


MAP阶段

实际上这一个过程就是要你能够将源文件中的,单词进行一一的统计,这里边用到python语句,写起来也很简单。就是一个简单的映射关系,很容易理解。

实际上,MAP是一个分的思想,相当于当你有大量数据的时候,你需要首先把数据分到不同机器上。而在实际操作过程上,相当于把你的大文件直接放在HDFS的集群上。每一台机器上都进行相关的映射操作。Hadoop上的代码跟VIM的代码基本相同,区别就在于是否前边要加上hadoop这个起始语句。这里还涉及到相关的路径引导,这里主要是在JAVA环境变量里设置,当你设置好之后,就可以通过+TAB键来完全工作。


Reduce阶段

这个是一个合并的过程,相当于对你之前映射后的文件来一个合并归约,而我这次的实践是wordcount操作,相当于是对所有重复的单词来一个统计。

它这个里边涉及到的有FIFO,遍历的算法实现。相当于把你各个机器的工作结果汇总到一台主PC上。而这一个阶段的代码要比MAP阶段多。这一块有数组的相关知识,还有累加函数,这一块是需要有相关函数包的理解的。


在学习MAPREDUCE过程中,发现自己最大的问题就是VIM命令的不熟悉,有些内容,只有你操作过你才能更深入的理解其实现原理。已前只是知道其原理,而在这次MAPREDUCE的学习实践过程中,发现自己的实际操作还是有些不理想,自己也对mapredeuce算是有了一个了解。周未再换一个数据集,再来把已经会的代码熟悉一遍。加油!



ulimit -a #查看所能读文件的能力#


cd /usr/local/src/ #打开hadoop的相应文件夹#

ls

ll #ll为查看文件的相关属性,ls为查看相关文件夹下文件#

touch *.* #建立某一个文件#

mkdir python_mr #建立一个文件夹#

cd /home/badou/python_mr/ #打开相关的mapreduce文件夹#

cd mapreduce_wordcount_python/ #进入相关词频统计函数,通过相应的共享文件目标,将源文件拷贝到此目录下#

rm output result.data #删除之前操作过输出的文档#


#本地查看源文件#

cat The_Man_of_Property.txt

#查看上传的文件,若文件太长,用ctrl+c可退出查看#

cat The_Man_of_Property.txt| head -1

#查看文件中第一个头部信息#

cat The_Man_of_Property.txt| head -2 | tr ' ' '\n'

#将所有的空格都转换成换行符#

cat The_Man_of_Property.txt| head -2 | tr ' ' '\n' | sort -k1 -nr |

#排序(k,k1,k1列标示,-n -nr按大小顺序OR倒序)#

cat The_Man_of_Property.txt| head -2 | tr ' ' '\n' | sort -k 1 | uniq -c |head

#把相同的行数进行统计#

cat The_Man_of_Property.txt| head -2 | tr ' ' '\n' | sort -k 1 | uniq -c | awk '{print$2"\t"$1}' |head

#输出成Key-Value形式#

cat The_Man_of_Property.txt| head -2 | tr ' ' '\n' | sort -k 1 | uniq -c | awk '{print$2"\t"$1}' | sort -k2 -nr | head #将输出的K-Value形式进行排序并做头部10行显示#


#上传到hadoop系统中进行处理#

vim ~/.bashrc #进入JAVA的环境变量设置#

export PATH=$PATHJAVA_HOME/bin:/usr/local/src/hadoop-1.2.1/bin #修改引用,将匹配扩展到hadoop#

sourc ~/.bashrc #保存退出后,用命令使已配的环境变量生效#

hadoop fs -ls / #查看hadoop下文件#

hadoop fs -rmr /The_Man_of_Property.txt #删除已上传好的文档#

hadoop fs -put The_Man_of_Property.txt / #上传相应文档,注意:必须是本目录下文件#

hadoop fs -cat /The_Man_of_Property.txt | head #查看hadoop上的文件,但只能看到明文文件#

hadoop fs -text /The_Man_of_Property.txt | head #查看hadoop上的文件,可以看到密文文件和压缩文件#



#map.py 代码#

import sys #定义一个系统模块#

for line in sys.stdin: #从标准输入读取数据#

ss = line.strip().split(' ') #对一行字串进行处理,相当于用空格分隔每个分词,ss是很多单词#

for s in ss: #对每一个单词进行处理#

if s.strip() != "":

print "%s\t%s" % (s, 1) #如果每个单词不为完,则记这个单词为1 #

cat The_Man_of_Property.txt | head | python map.py | head #测试上边的代码是否成功#


#reduce.py 代码#

import sys


current_word = None

count_pool = []

sum = 0 #初始定义参数值#


for line in sys.stdin: #从标准输入读每一行数值#

word, val = line.strip().split('\t')

if current_word ==None: #当前单词是否为空做为判断条件#

current_word = word

if current_word != word:

for count in count_pool:

sum += count

print "%s\t%s" % (current_word, sum)

current_word = word

count_pool = []

sum = 0

count_pool.append(int(val)) #Key追加到相当数组中#

for count in count_pool:

sum += count #对Value相行重复次数求和#

print "%s\t%s" % (current_word, str(sum)) #输出相应的Key-Value值#


cat The_Man_of_Property.txt | python map.py | sort -k1 | python red.py | sort -k2 -nr |head #验证map.py跟red.py代码#


#run.sh shell脚本,用来启动map.py与red.py#

HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop" #设置目标路径,便于引用#

STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"

#设置STREAM_JAR_PATH路径,便于输入输出#


INPUT_FILE_PATH_1="/The_Man_of_Property.txt"

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" \

-reduce "python red.py" \

-file ./map.py \

-filt ./red.py #向HADOOP上上传相关文件#

./run.sh #直接运行这个shell脚本,调用hadoop运行相关python文件#



文件 代码 单词 实际 数据 过程 学习 阶段 输出 原理 文件夹 统计 函数 变量 就是 文档 机器 源文件 环境 路径 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 泉州市盘古网络技术有限公司 软件开发公司员工工资 江苏网络安全审计系统咨询中心 通信网络技术干啥的 网络安全靠人民 主题黑板报 无锡至强服务器 scada历史服务器容量 软件开发提成一般多少 科技和互联网公司的区别 湖北联想服务器虚拟化哪家便宜 优秀网络安全技能大赛 什么负责筹备协调网络安全工作 常州个人软件开发价格咨询 下载协作服务器是什么意思 汽车网络技术应用论文 成都环球中心棋牌软件开发 亚马逊企业是如何输入数据库的 岳麓区软件开发职业中专 医保软件查询提示数据库失败 系统软件开发协议书 银行软件开发中心 跳槽 服务器升级固态后系统迁移 网络安全四层含义 数据库如何更改日期 公交车查询系统数据库的设计 查询数据库阻塞 it小东网络安全 数据服务器管理教程 网络安全专题学习体会 网络安全设备的维保价格标准
0