大数据阶段划分及案例单词统计

大数据阶段的重要课程划分

离线分析 : hadoop生态圈 HDFS, MapReduce(概念偏多), hive(底层是MapReduce), 离线业务分析80%都是使用hive

实时分析 : spark

数据结构 : 二叉树(面试) 动态规划, redis数据库, SSM三大框架
	1. spring
	2. springMVC
	3. mybatis

HDFSAPI

HDFS创建目录

@Test
	public void mkdirTest() throws IOException {

		//1 获得文件系统的连接

		Configuration config=new Configuration();

		config.set("fs.defaultFS", "hdfs://10.0.152.47:8020");

		FileSystem fs=FileSystem.get(config);

		//2 操作HDFS API  创建目录
		fs.mkdirs(new Path("/customMk"));

		//3 关闭资源

		fs.close();

		System.out.println("创建完成");

	}

HDFS删除目录

@Test
	public void deleteMk() throws IOException {

		//1 获得文件系统的连接

		Configuration config=new Configuration();

		config.set("fs.defaultFS", "hdfs://10.0.152.47:8020");

		FileSystem fs=FileSystem.get(config);

		//2 操作HDFS API  创建目录
		fs.delete(new Path("/customMk"),true);
		//3 关闭资源

		fs.close();

		System.out.println("删除完成");

	}

HDFS修改文件名

	@Test
	public void testRename() throws IOException {

		//1 获得文件系统的连接

		Configuration config=new Configuration();

		config.set("fs.defaultFS", "hdfs://10.0.152.47:8020");

		FileSystem fs=FileSystem.get(config);

		//2 操作HDFS API  修改名称
		fs.rename(new Path("/a.txt"), new Path("/d.txt"));
		//3 关闭资源

		fs.close();

		System.out.println("修改完成");

	}

获得文件详细信息

@Test
	public void getFileInfo() throws IOException {

		//1 获得文件系统的连接

		Configuration config=new Configuration();

		config.set("fs.defaultFS", "hdfs://10.0.152.47:8020");

		FileSystem fs=FileSystem.get(config);

		/*
		 *
		 *  while(String str:strs){
		 *
		 *  	System.out.println(str);
		 *  }
		 *
		 * */

		 RemoteIterator<LocatedFileStatus> listfiles=fs.listFiles(new Path("/"), true);

		 while(listfiles.hasNext()) {

			 LocatedFileStatus status=listfiles.next();
			 //输出文件名称
			 System.out.println(status.getPath().getName());
			 //输出文件块
			 System.out.println(status.getBlockSize());

			 //文件的长度
			 System.out.println(status.getLen());

			 //文件的权限
			 System.out.println(status.getPermission());

			 //文件的副本数量
			 System.out.println(status.getReplication());

			 //文件的所属者
			 System.out.println(status.getOwner());
		 }

	}

hadoop环境变量

  1. 解压hadoop2.7.2到一个非中文的路径下
  2. 为hadoop设置环境变量** HADOOP_HOME**
  3. 配置path路径(不详细介绍,网上很多)%HADOOP_HOME%/bin
  4. 把编译过后的本地库文件拷贝到hadoop目录下的bin文件夹下

通过IO流操作HDFS

字符流和字节流

  • 字节流: 字节流什么都能读 , 字节, 图片 , 音乐, 视频, 文件
  • 字符流: 只能读取文本
  • 字节流直接操作的是文件的本身, 字符流操作之中还存在缓冲区, 使用普通字节流处理中文的时候想要读取很多行可能出现乱码
  • 使用字节流操作文本的时候, 如果不关闭资源, 同样可以把内容输出到文本中, 但是使用字符流操作文本的话, 如果没有关闭资源, 或者没有清空缓存区. 内容时不会输出到文本中的

IO流上传

@Test
	public void filePut() throws IllegalArgumentException, IOException {

		//1 获得文件系统
		Configuration config=new Configuration();

		config.set("fs.defaultFS", "hdfs://10.0.152.47:8020");

		FileSystem fs=FileSystem.get(config);

		// 2创建输入流

		FileInputStream  input=new FileInputStream(new File("c:/hello.txt"));

		// 3获得输出流

		FSDataOutputStream  fos=fs.create(new Path("/hello21.txt"));

		// 流拷贝 把input中的内容交给 output输出
		IOUtils.copyBytes(input, fos, config);

		// 5关闭资源 

		IOUtils.closeStream(input);

		IOUtils.closeStream(fos);

	}

IO流下载

@Test
	public void getFile() throws IllegalArgumentException, IOException {

		//1 获得文件系统
		Configuration config=new Configuration();

		config.set("fs.defaultFS", "hdfs://10.0.152.47:8020");

		FileSystem fs=FileSystem.get(config);

		//2 获得输入流,从HDFS读取 

		FSDataInputStream input=fs.open(new Path("/hello21.txt"));

		//3 获得输出流 

		FileOutputStream output=new FileOutputStream(new File("c:/hello21.txt"));

		//4 流拷贝

		IOUtils.copyBytes(input, output, config);

		IOUtils.closeStream(input);
		IOUtils.closeStream(output);

	}

MapReduce核心思想

  • MapReduce优点:

    • 编写分布式程序简单, 可以简单的实现两个接口, 皆可以开发出一套分布式计 算程序
    • 由于是在hadoop上运行的, 可以很方便的横向扩展
  • MapReduce缺点:
    • 延迟高, 不能实时进行分析处理, 只能做离线分析
  • MapReduce分阶段处理:
    • 文本文件 --> inputFormat --> map --> shuffle --> reduce --> outputFormat

WordCount单词统计案例

map阶段
对数据进行切片, 每一个切片对应一个mapTask , 假如一个文件被切成了10个切片, 就存在10个mapTask任务并行运行, 互不干扰
reduce阶段
把每个mapTask阶段的输出进行整合

步骤:

  1. 文本 : inputFormat 输出到 map<K,V>

    java python hadoop

    hdfs html css

    javascript scala

    scala css hdfs

  2. FileInputFormat 会读取一行文本输出给map 切分为 <>k ,v > 对, key 是文本中的偏移量, V 是文本中的内容 <0, java python hadoop>

    <1, hdfs html css >

    <2, javascript scala > ... <10 , scala css hdfs >

    String word = value.toString(); ---->java python hadoop String[ ] words = word.split(" ");----> [java , python , hadoop]

  3. 接下来 , map 要输出给reduce <K, V > K:文本的内容, V: 单词出现的次数
  4. Reduce进行接收 <K, V > K:文本的内容, V: 单词出现的次数

在整个MapReduce运行的时候存在如下进程: 1. mapTask 2. reduceTask 3. MRAPPMaster 任务管理的进程

hadoop的序列化

如果要进行对象的传输, 则传输的内容必须进行序列化, 所以hadoop就创建了一些序列化类型

对象 序列化
Long longWritable
Int IntWrieable
String Text

Wordcount代码

本地运行

1. 编写WordCountMap
package org.qianfeng.wordcount;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/**
 *
 * @author wubo
 *
 *Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
 *
 *输入 key 文本中偏移量
 *value 文本中的内容
 *
 *输出 key 是文本的内容
 *
 *value 是单词出现的次数
 */
public class WordCountMap extends Mapper<LongWritable, Text, Text, IntWritable>{

	private Text k=new Text();

	@Override
	protected void map(LongWritable key, Text value,Context context)
			throws IOException, InterruptedException {
		// TODO Auto-generated method stub

		//1 获取一行的数据 

		String line=value.toString();

		//2 切割  按照空格切分

		String[] words=line.split(" ");

		for(String word:words) {

			k.set(word);   //把String类型的word 转换为Text类型
			//3 输出到Reduce
			context.write(k, new IntWritable(1));
		}
	}
	//需要实现Map方法编写业务逻辑
}
2. 编写WordCountReduce
package org.qianfeng.wordcount;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

/**
 *
 * @author wubo
 *
 *
 *hello 1
 *hadoop 1
 *
 *hadoop 1
 *
 *hadoop 2
 *
 *把相同key的values进行累加
 */

public class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{

	@Override
	protected void reduce(Text key, Iterable<IntWritable> values,
			Context context) throws IOException, InterruptedException {
		// TODO Auto-generated method stub

		int sum=0; 

		for(IntWritable count:values) {

			sum+=count.get();

		}

		//输出
		context.write(key, new IntWritable(sum));

	}

}

3. 编写Driver
package org.qianfeng.wordcount;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class Driver {

	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

		//1 获得配置信息 

		Configuration config=new Configuration();
		// 实例化 job类 并且把配置信息传给job
		Job job=Job.getInstance(config);

		// 通过反射机制 加载主类的位置
		job.setJarByClass(Driver.class);

		//设置map和reduce类
		job.setMapperClass(WordCountMap.class);
		job.setReducerClass(WordCountReduce.class);

		//设置map的输出
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);

		//设置redue的输出
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);

		//设置文件的输入 输出路径

		FileInputFormat.setInputPaths(job, new Path(args[0]]));

		FileOutputFormat.setOutputPath(job, new Path(args[1]]));

		//提交任务 

		boolean result=job.waitForCompletion(true);

		System.exit(result?0:1);

	}
}

打成jar包在集群上运行

1. 导出jar包

2. 上传jar包到Linux 在集群中运行
  • 上传的方法很多, 这里不说
  • 在Linux中启动hadoop
  • 上传文件到HDFS
$HADOOP_HOME/bin/hdfs dfs -put a.txt /a.txt
  • 输入如下命令
$HADOOP_HOME/bin/hadoop jar wc.jar /a.txt /output
  • 打开文件查看结果
$HADOOP_HOME/bin/hdfs dfs -cat /output/pa...

原文地址:https://www.cnblogs.com/xiayangdream/p/9975158.html

时间: 2024-10-09 17:42:32

大数据阶段划分及案例单词统计的相关文章

基于大数据技术推荐系统算法案例实战视频教程(项目实战)

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

老李分享:大数据性能调优案例

老李分享:大数据性能调优案例 1.“空间换时间”以及“内存中处理数据” 比如user_id.csv文件中有20万个不同的user_id,根据user_id去查其对应的用户最近发表的一篇帖子,取出post_id,post_title.post_time和user_id(post表中查,post表中有一列是user_id,表示帖子所属者),而帖子数目有大概两百万,那么如何处理呢?我的解决方案是:A. 先将post表post_id,post_title.post_time和user_id这四列导出到p

0065 animation:动画、动画序列、动画常见属性、 动画简写方式、速度曲线细节、案例大数据热点图、案例奔跑的熊大

什么是动画 动画是 CSS3 中最具颠覆性的特征之一,可通过设置多个节点来精确的控制一个或者一组动画,从而实现复杂的动画效果 动画的基本使用 先定义动画 在调用定义好的动画 语法格式(定义动画) /* keyframes: 关键帧 */ @keyframes 动画名称 { 0% { width: 100px; } 100% { width: 200px } } 语法格式(使用动画) div { /* 调用动画 */ animation-name: 动画名称; /* 持续时间 */ animati

大数据量表结构设计案例

在处理大数据量的表时,会消耗数据库的大量性能,所以,在设计数据库表时,要考虑到此种现象,将数据库设计的合理合法,来提高数据库性能减小数据库压力. 当表记录太多,如产品.的订单.大量客户等,是数据库访问压力的主要来源,此时,从数据库拆分表的角度来减轻压力,可以采用如下两种方法: 1.对表进行水平分割 水平分割:以该表主键PK的某个值为界限,将该表的记录水平拆分为两个表 2.对表进行垂直分割 垂直分割:表字段太多,按照表字段拆分,将一个表垂直分解为两个表 例:有产品表,数据量为10w,数据量稳定:

Spark Streaming从Kafka中获取数据,并进行实时单词统计,统计URL出现的次数

1.创建Maven项目 创建的过程参考:http://blog.csdn.net/tototuzuoquan/article/details/74571374 2.启动Kafka A:安装kafka集群:http://blog.csdn.net/tototuzuoquan/article/details/73430874 B:创建topic等:http://blog.csdn.net/tototuzuoquan/article/details/73430874 3.编写Pom文件 <?xml v

电商大数据平台运维案例

技术栈 数据流向 平台规模差异化,隔离化 YARN: https://baike.baidu.com/item/yarn/16075826?fr=aladdin 今天先到这儿,希望对您在系统架构设计与评估,团队管理, 项目管理, 产品管理,团队建设 有参考作用 , 您可能感兴趣的文章: 互联网电商购物车架构演变案例互联网业务场景下消息队列架构互联网高效研发团队管理演进之一消息系统架构设计演进互联网电商搜索架构演化之一企业信息化与软件工程的迷思企业项目化管理介绍软件项目成功之要素人际沟通风格介绍一

Spark2.0从入门到精通:Scala编程、大数据开发、上百个实战案例、内核源码深度剖析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

大数据实时流统计视频教程(项目实战)

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

【PPT&amp;视频】《陈新河:万亿元大数据产业新生态》——央视网大数据名人讲堂之大数据产业系列

[PPT&视频]<陈新河:万亿元大数据产业新生态>--央视网大数据名人讲堂之大数据产业系列 原创 2016-07-16 陈新河 软件定义世界(SDX) 热门下载(点击标题即可阅读) ?[下载]2015中国数据分析师行业峰会精彩PPT下载(共计21个文件) 因微信限制,部分图不能显示出来,高清完整版全文请扫描二维码,见每篇文章底部专栏 <陈新河:万亿元大数据产业新生态>--央视网大数据名人讲堂之大数据产业系列 嘉宾介绍 陈新河   中关村大数据产业联盟副秘书长 Talking