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

离线分析 : hadoop生态圈 HDFS, MapReduce(概念偏多), hive(底层是MapReduce), 离线业务分析80%都是使用hive实时分析 : spark数据结构 : 二叉树(面试) 动态规划, redis数据库, SSM三大框架1. spring2. springMVC 3. mybatis

HDFSAPI

HDFS创建目录

@Testpublic 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删除目录

@Testpublic 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修改文件名

  @Testpublic 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("修改完成"); } 

获得文件详细信息

@Testpublic 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流上传

@Testpublic 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流下载

@Testpublic 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

大数据阶段划分及案例单词统计相关推荐

  1. 某银行信用卡中心——大数据反欺诈应用案例 2017-06-23 10:54 本篇案例为数据猿推出的大型“金融大数据主题策划”活动(查看详情)第一部分的系列案例/征文;感谢 百融金服 的投递 作为整体

    某银行信用卡中心--大数据反欺诈应用案例 2017-06-23 10:54 本篇案例为数据猿推出的大型"金融大数据主题策划"活动(查看详情)第一部分的系列案例/征文:感谢 百融金服 ...

  2. 大数据课程综合实验案例:网站用户行为分析

    大数据课程综合实验案例 1 案例简介 1.1 案例目的 1.2 适用对象 1.3 时间安排 1.4 预备知识 1.5 硬件要求 1.6 软件工具 1.7 数据集 1.8 案例任务 1.9 实验步骤 2 ...

  3. 【TOP100】100个中国大数据应用最佳实践案例—为您打开万亿元大数据产业的财富之门

    热门下载(点击标题即可阅读) ☞[下载]2015中国数据分析师行业峰会精彩PPT下载(共计21个文件) 2017年3月28日至29日,由工业和信息化部指导.中国信息通信研究院和数据中心联盟主办的&qu ...

  4. Hadoop经典案例——单词统计

    通过 Hadoop经典案例--单词统计,来演示 Hadoop集群的简单使用. (1)打开 HDFS 的 UI,选择Utilities→Browse the file system查看分布式文件系统里的 ...

  5. 全域赋能和智慧全球,阿里巴巴大数据技术前瞻与案例

    摘要:2016年1月20日,阿里云大数据产品家族数加在上海正式发布,在两年之后的今天,阿里云的大数据产品又有了什么样的发展变化呢?本文中阿里云高级产品专家班公就将为大家揭秘阿里巴巴大数据技术前瞻与案例 ...

  6. 大快搜索城市运河大数据政务管理平台案例解读

    2019独角兽企业重金招聘Python工程师标准>>> 大快搜索城市运河大数据政务管理平台案例解读 大数据在政务当中的应用对于提高问题解决的效率可谓大有帮助,但政务大数据平台的应用开 ...

  7. 科大讯飞交通超脑荣获 2019 年大数据应用最佳实践案例 TOP10

    12月5日,由中国计算机学会主办,CCF 大数据专家委员会承办的中国大数据技术大会(BDTC 2019)在北京长城饭店隆重举行.会上揭晓了由CCF大数据专家委员会组织评选的大数据应用最佳实践案例TOP ...

  8. Flink大数据实时计算系列-案例初体验:HotPages

    Flink大数据实时计算系列-案例初体验:HotPages 目录 HotPages代码 输入日志 运行结果 HotPages代码 /*** Copyright (c) 2018-2028 尚硅谷 Al ...

  9. Hadoop大数据平台开发与案例分析

    关于举办"Hadoop大数据平台开发与案例分析 "高级工程师 一.课程介绍 1. 需求理解 Hadoop 设计之初的目标就定位于高可靠性.高可拓展性.高容错性和高效性,正是这些设计 ...

最新文章

  1. sklearn 统计多分类和单分类结果的混淆矩阵API 写法 confusion_matrix 左边为真实值 上边为预测值
  2. BZOJ 1014 [JSOI2008]火星人prefix
  3. 使用xmake优雅地描述工程
  4. python123温度转换-python二级备考 day2
  5. 如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
  6. 单独一台机器测试Open×××加密隧道的问题和解决
  7. 后通用芯片时代: 专用芯片兴起背后的经济学
  8. linux man使用方法 和centos安装中文man包
  9. 操作文件的实用类,删除目录,清空目录,删除文件
  10. 温州动车事故中受伤的“我”,还好吗?
  11. 计算机存储信息的单位
  12. 微信小程序简单爱心点赞动画
  13. Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播
  14. python中怎样定位字符串中元素的位置_python查找字符串位置
  15. OpenCV函数remap详解
  16. JAVA之HttpClient+Jsoup实现代理IP爬虫
  17. [Win10+Excel365]尽管已启用VBA宏,Excel还是无法运行宏
  18. word查找参考文献引用格式
  19. Python调用高德地图API实现经纬度换算、地图可视化
  20. MySQL数据库讲解(三)

热门文章

  1. linux卸载mysql和myodbc_linux下卸载mysql rpm安装方式和源码安装方式的两种方法
  2. 天线下倾角示意图_《天线和下倾角.ppt
  3. PostgreSQL 10.1 手册_部分 IV. 客户端接口_第 33 章 libpq - C 库_33.13. 事件系统
  4. sccm 2007 r2 step by step 之十五 补丁管理
  5. applicationContext.xml详解
  6. dephi(pascal)中修改Label字体的样式(加粗,斜体,下划线)
  7. Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)
  8. 擴展 CommandField 類別 - 刪除提示訊息
  9. 软件测试 学习之路 linux vim编辑器
  10. 演变模型_开放组织的演变