大数据----数据分析及Ptyhon实现

一、什么是大数据

              ”大数据”是一个体量特别大,数据类别特别大的数据集,首先是指数据体量(volumes)?大,指代大型数据集,一般在10TB。规模左右,但在实际应用中,很多企业用户把多个数据集放在一起,已经形成了PB级的数据量;其次是指数据类别(variety)大,数据来自多种数据源,数据种类和格式日渐丰富,已冲破了以前所限定的结构化数据范畴,囊括了半结构化和非结构化数据。接着是数据处理速度(Velocity)快,在数据量非常庞大的情况下,也能够做到数据的实时处理。最后一个特点是指数据真实性(Veracity)高,随着社交数据、企业内容、交易与应用数据等新数据源的兴趣,传统数据源的局限被打破,企业愈发需要有效的信息之力以确保其真实性及安全性。

二、Apache Hadoop介绍

2.1、下载

下载网址:http://hadoop.apache.org
计算器模拟器下载网址:http://www.cloudera.com/content/support/en/downloads/quickstart_vms.html
网上都能搜到,虚拟机运行页面
Xme5
一般情况下:
                普通用户 cloudera
                  密码:cloudera 拥有root用户权限

2.2、思想

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
这里写图片描述
HDFS:Hadoop特有的文件操作,允许大量的数据存储在Hadoop集群多个节点上,数据可以很大。集群中的数据被分为很多小的子集,每个block的内存默认是128MB
YARN:一个资源管理的任务调度的分布式框架
MapRduce思想:处理大数据的软件程序框架
这里写图片描述
MapReduce 框架来说:
分而治之思想
- map: 对每一部分数据进行分析处理
函数,包含 处理数据的逻辑代码(可以使用Java或Python)
- reduce:
函数,合并map处理数据的结果

过程:
    - input:
        设置要处理的数据存储在哪里???  hdfs  
    - map(keyIn, valueIn, keyOut, valueOut):
        指定处理数据的map函数
    - reduce(keyIn, valueIn, keyOut, valueOut):
        指定合并map函数处理的数据结构
    - output:
        要制定最终合并处理的数据结果存储的地方 hdfs

2.3、常用LINUX系统操作

代码 说明
ls ,ls -l = ll
    查看当前目录下的文件有哪些(list)
cd 目录名称 进入某个目录(change directory)
more 文件名称、less 文件名称 读取文件(文本文件,在Windows下使用记事本打开的文件)
head 文件名称 默认是显示前10行数据
tail 文件名称 默认是显示后10行数据
cat 文件名称 当且仅当,查看文件内容较少的时候
pwd 显示当前目录(print work derictory)
创建目录 mkdir 目录名称、mkdir -p bigdata/ai0404
-p 表示创建目录的父目录不存在的话,一并创建
两个特殊的目录
表示的是 上一级目录,比如: cd ..
表示的是 当前目录
touch 文件名称 创建文件
编辑文件 vim aa.txt 进入以后: i -> 显示插入模式Insert
Esc、:、x 保存文件内容
Esc、:、q! 退出编辑,不保存文件
cp 源文件 目标文件 拷贝文件
rm -rf 文件名称/目录名称 删除文件
mkdir -p bigdata/ai0404 若无创建的额文件,则创建
sduo yum install -y lrzsz 在虚拟机上安装程序 文件
rz 上传文件到虚拟机上

                  当使用Python开发完成mapper.py和reduce.py脚本以后,在linux系统上要执行的话,需要给予执行权限,命令如何:
c h m o d u + x w o r d c o u n t m a p p e r . p y chmod u+x wordcount_reducer.py

本地测试:
- wordcount_mapper.py
echo “hadoop mapreduce mapreduce python” | python wordcount_mapper.py
- wordcount_reducer.py
echo “hadoop mapreduce mapreduce python” | python wordcount_mapper.py | python wordcount_reducer.py

远程连接三大工具(开发大数据)

-a. 远程命令行工具
Xshell
-b. 远程编辑工具
Notepad++ 和 NppFTP 插件
-c. 远程文件上传下载工具
使用系统自带的lrzsz工具

三、词频统计WordCount(类似TF)

词频统计WordCount(类似TF)
属于大数据框架中 最经典的案例:
统计文件中每个单词出现的个数
-1、准备数据
将要分析的数据存储到HDFS文件系统中
命令:
# 创建目录
hdfs dfs -mkdir -p /user/cloudera/wordcount/input
# 上传数据文件
hdfs dfs -put /home/cloudera/bigdata/wc.data /user/cloudera/wordcount/input
-2、使用Python编码,实现wordcount统计
- input
要读取处理分析数据的路径
默认情况下,一行一行的读取文件中的数据
- mapper
函数 ,进行分析处理
- reducer
函数,合并map函数输出的结果

当使用Python开发完成mapper.py和reduce.py脚本以后,在linux系统上要执行的话,需要给予执行权限,命令如何:

chmod u+x wordcount_mapper.py
chmod u+x wordcount_reducer.py

本地测试:

wordcount_mapper.py
echo “hadoop mapreduce mapreduce python” | python wordcount_mapper.py
wordcount_reducer.py
echo “hadoop mapreduce mapreduce python” | python wordcount_mapper.py | python wordcount_reducer.py

3、运行Python编写的WordCountt在YARN

hadoop jar \
/usr/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.12.0.jar \
-files /home/cloudera/word_count/wordcount_mapper.py,\
/home/cloudera/word_count/wordcount_reducer.py \
-mapper “python wordcount_mapper.py” \
-reducer “python wordcount_reducer.py” \
-input /user/cloudera/wordcount/input.wc \
-output /user/cloudera/wordcount/output

具体代码如下:
map文件

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
# 从标准输入读取数据
for line in sys.stdin:
    # hadoop spark hadoop spark spark 
    # 去除读取每条数据前后空格, 并按照空格分割
    for word in line.strip().split():
        print "%s\t%d" %(word, 1)

reduce文件

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
# 定义变量存储 单词 和 词频
current_word = None 
current_count = 1
for line in sys.stdin:
    # 读取mapper函数输出的结果
    word, count = line.strip().split("\t")  
    # 判断当前是否存单词
    if current_word:
        if word == current_word:
            current_count += int(count)
        else:
            print "%s\t%d" %(current_word, current_count)
            current_count = 1
    # 赋值当前单词
    current_word = word
# 处理读物最后一行数据
if current_count >= 1:
    print "%s\t%d" %(current_word, current_count)

四、IBM股价分析

-a. 创建目录stock,拷贝wordcount_mapper.py和wordcount_reducer.py文件至stock目录
重命名文件:
m v w o r d c o u n t m a p p e r . p y s t o c k m a p p e r . p y mv wordcount_reducer.py stock_reducer.py
-b. 开发代码
-c. 本地测试:
$ more stock-ibm.csv | python stock_mapper.py | sort -k1| python stock_reducer.py > stock-ibm.output
-d. 集群测试
读取HDFS上的数据,将程序提交运行在YARN上。
/user/cloudera/stock/input

具体方法如上个案例
注要安装matplotlib可视化:sudo yum install python-matploylib
代码:
map文件

#!/usr/bin/python
# -*- coding:utf-8 -*-


import sys
for line insys.stdin:
    row=line.split(",")
    open_price = float(row[1])
    close_price=float(row[-3])
    change = (open_price-close_price)/open_price*100
    chage_text=str(round(change,1))+"%"
    print("%s\t%d"%(chage_text,1)

reduce文件

import sys

current_word=None
current_count=1

for line in sys.stdin:
    #读取mapper函数输出结果
    word,count=line.strip().split("\t")
    if current_word:
        if word==current_word:
            current_count+=int(count)
        else:
            print "%s\t%d"%(current_word,current_count)
            current_count=1
    current_word=word
#处理读取最后一行数据
if current_count>=1:
    print "%s\t%d"%(current_word,current_count)



import matploylib.pyplot as plt
with open("/home/cloudera/stock/part-0000",'rb') as f:
x,y=[],[]
for line in f.readlines():
data=line.split()
x.append(float(data[0].strip('%')))
y.append(float(data[1])))
print('Max:',max(x))
print('Min:',max(x))
plt.bar(x,y,width=0.1)
plt,show()

猜你喜欢

转载自blog.csdn.net/sakura55/article/details/81173362
今日推荐