- 一、什么是大数据
- 二、Apache Hadoop介绍
- 2.1、下载
- 2.2、思想
- 2.3、常用LINUX系统操作
- 三、词频统计WordCount(类似TF)
- 四、IBM股价分析
一、什么是大数据
”大数据”是一个体量特别大,数据类别特别大的数据集,首先是指数据体量(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 |
|
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系统上要执行的话,需要给予执行权限,命令如何:
chmodu+xwordcountmapper.py
c
h
m
o
d
u
+
x
w
o
r
d
c
o
u
n
t
m
a
p
p
e
r
.
p
y
本地测试:
- 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目录
重命名文件:
mvwordcountmapper.pystockmapper.py 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()