大数据基础

大数据生态圈

1.大数据基本概念

大数据解决的问题:采集、存储、计算

大数据应用:抖音或者其他推荐、物流仓储等

大数据部门组织图

2.大数据之Hadoop

需要安装Hadoop服务端

2.1 HDFS(Hadoop Distributed File System)分布式文件系统

使用场景:适用一次写入多次读出

作用:文件上传下载


public class HdfsClient {

    private FileSystem fs;

    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        // 连接的集群nn地址
        URI uri = new URI("hdfs://hadoop102:8020");
        // 创建一个配置文件
        Configuration configuration = new Configuration();
        // 自定义参数
        configuration.set("dfs.replication", "2");
        // 用户
        String user = "atguigu";

        // 1 获取到了客户端对象
        fs = FileSystem.get(uri, configuration, user);
    }

    @After
    public void close() throws IOException {
        // 3 关闭资源
        fs.close();
    }

    
    // 创建目录
    @Test
    public void testmkdir() throws URISyntaxException, IOException, InterruptedException {
        // 2 创建一个文件夹
        fs.mkdirs(new Path("/xiyou/huaguoshan1"));
    }

    
    // 文件上传
    @Test
    public void testPut() throws IOException {
        // 参数解读:参数一:表示删除原数据; 参数二:是否允许覆盖;参数三:原数据路径; 参数四:目的地路径
        fs.copyFromLocalFile(false, true, new Path("D:\\sunwukong.txt"), new Path("hdfs://hadoop102/xiyou/huaguoshan"));
    }

    
    // 文件下载
    @Test
    public void testGet() throws IOException {
        fs.copyToLocalFile(false, new Path("hdfs://hadoop102/a.txt"), new Path("D:\\"), false);
    }

}

2.2 MapReduce 分布式运算程序
  • mapper映射拿到数据

  • reducer计算拿到的映射数据

  • 提交分布式任务

使用场景:适合PB级以上海量数据的离线处理(不擅长实时计算)

序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。

反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象

注:如果不序列化那么对象只能在本地计算机的内存中,而不能持久化到硬盘或者传输给其他服务器。

Mapper映射拿到数据


public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private Text outK = new Text();
    private IntWritable outV = new IntWritable(1);

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        // 1 获取一行
        // atguigu atguigu
        String line = value.toString();

        // 2 切割
        // atguigu
        // atguigu
        String[] words = line.split(" ");

        // 3 循环写出
        for (String word : words) {
            // 封装outk
            outK.set(word);

            // 写出
            context.write(outK, outV);
        }
    }
}

Reducer计算拿到的映射数据


public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
    private IntWritable outV = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

        int sum = 0;
        // atguigu, (1,1)
        // 累加
        for (IntWritable value : values) {
            sum += value.get();
        }

        outV.set(sum);
        // 写出
        context.write(key,outV);
    }
}

提交分布式任务


public class WordCountDriver {

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

        // 1 获取job
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        // 2 设置jar包路径
        job.setJarByClass(WordCountDriver.class);

        // 3 关联mapper和reducer
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

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

        // 5 设置最终输出的kV类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        // 6 设置输入路径和输出路径
        FileInputFormat.setInputPaths(job, new Path("D:\\input\\inputword"));
        FileOutputFormat.setOutputPath(job, new Path("D:\\hadoop\\output888"));

        // 7 提交job
        boolean result = job.waitForCompletion(true);
        System.exit(result ? 0 : 1);
    }
}

2.3 Yarn资源调度器

作用:分布式的操作系统平台。用于给新建任务分配cpu进行处理。可类比线程池调度线程。

3.大数据之Hive

需要安装Hive服务端

Hive 默认使用的元数据库为 derby,需要将 Hive 的元数据地址改为MySQL

作用:Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。

  • Hive 处理的数据存储在 HDFS
  • Hive 分析数据底层的实现是 MapReduce
  • 执行程序运行在 Yarn 上

Hive和数据库的对比:

Hive可以简单理解为数据库。但是数据库可以增删改查,Hive不建议改写,只用来作为数仓,读多写少。

数据库通过索引支持数据规模小的,Hive通过MapReduce进行并行计算支持数据规模大的。

4.大数据之HA

HDFS分布式文件系统:适合一次写入,多次读出

注:HA主要是用于使HDFS 和 YARN 高可用。

Hadoop存在的单点故障问题,解决单点故障的方案:

  • 搭建手动故障转移的HDFS-HA集群,
  • 搭建基于Zookeeper的自动故障转移的HDFS-HA集群
  • 搭建基于Zookeeper的自动故障转移的Yarn-HA集群
5.大数据之Flume

需要安装服务端

作用:实时读取服务器本地磁盘数据,将数据写入到HDFS

6.大数据之HBase

HBase的定义:分布式、可扩展的海量数据存储的NoSQL数据库。

7.大数据之Sqoop

用途:Mysql与HDFS(Hive、HBase)等框架之间的数据互导

8.大数据之Azkaban

Azkaban是Linkedin公司推出的一个任务调度系统

注:Ooize 相比 Azkaban 是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。

注:Azkaban中可以配置邮件报警、电话报警…

为什么需要任务调度系统?


## 任务调度。任务A和任务B完成后才能执行任务C
nodes:
 - name: jobC
   type: command
   # jobC 依赖 JobA 和 JobB
   dependsOn:
     - jobA
     - jobB
   config:
     command: echo "I’m JobC"
- name: jobA
   type: command
   config:
     command: echo "I’m JobA"
 - name: jobB
   type: command
   config:
     command: echo "I’m JobB"

9.大数据之Spark

Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。

Hadoop 的 MapReduce 是大家广为熟知的计算框架;但是实时数据还是得用Spark或者Flink

9.1 Scala语言开发

Spark是Scala开发的,所以需要学习Scala;Scala是源于Java,也是需要JAVA虚拟机

9.2 Spark Core

作用:核心编程

9.3 Spark SQL

作用:操作数据库

9.4 Spark Streaming

作用:用于流式数据的处理

10.大数据之Flink

Flink本身框架有Java和Scala,所以可以用Java或者Scala开发

Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值