Hadoop,Linux,Hive基础

 Linux

根目录视图主要目录树

基础命令

1关闭Linux:

halt, shutdown -h now , poweroff

2重启linux:

reboot , shutdown -r now

3查看当前登录用户 whoami

切换用户: su tian

4修改用户密码

useradd [username] 添加用户

passwd [username]

5创建文件夹 : mkdir

6 查看目录内容 : ls

7 查看当前路径: pwd

8创建文件 : touch

9 vi 编辑文件

10查看文件 cat

11 追加 “aaa” : echo "aaa" >>文件

12cp -r /文件 拷贝

13移动文件 mv/

14 删除 rm

15 

过滤出/root/article.txt中带‘中国’的行。

方法一:grep '中国' /root/article.txt
方法二:sed -n '/中国/p' /root/article.txt
方法三:awk '/中国/ {print }' /root/article.txt

高级命令

1 grep [参数] '匹配关键字' fileName

2  sed

    sed    [参数]    [动作]

参数

    -n:使用安静模式。在一般 sed 的用法中,所有来自stdin的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed特殊处理的那一行或者动作.才会被列出来。
    -e:直接在命令列模式上进行 sed 的动作编辑。
    -f:直接将 sed 的动作写在一个文件内,-f file 则可以运行 file内的 sed 动作。
    -r:sed 动作支持的是延伸型正则表达式的语法。
    -i:直接修改读取的文件内容,而不是输出到终端。

动作

  a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现目前的下一行.
        c:取代,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行
        d:删除,d后面通常不接任何字符串
        i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现目前的上一行.
        p:将某个选择的数据印出。通常p会与参数 sed -n 一起运行
        s:取代,可以直接进行取代的工作。通常这个s的动作可以搭配正则表达式。例如:1,20s/old/new/g

3awk

 awk '{pattern + action}' {filenames}

awk 内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
    ARGC    :命令行参数个数
    ARGV    :命令行参数排列
    ENVIRON :支持队列中系统环境变量的使用
    FILENAME:awk浏览的文件名
    FNR     :浏览文件的记录数
    FS      :设置输入域分隔符,等价于命令行 -F选项,默认分隔符是\tab
    NF      :浏览记录的域的个数
    NR      :已读的记录数
    OFS     :输出域分隔符
    ORS     :输出记录分隔符
    RS      :控制记录分隔符
    $0      :整条记录
    $1      :表示当前行的第一个域

5.awk编程
5.1 变量和赋值
除了awk的内置变量,awk还可以自定义变量。
<1> 下面统计/etc/passwd的账户人数
命令    awk '{count++;print $0;} END{print "user count is ",count}' /etc/passwd
说明:count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。
<2> 上例中没有初始化count变量的值,妥当起见,还是先赋值
命令    awk 'BEGIN {count=0;print "[start]user count is ",count} {count++;print $0;} END{print "user count is ",count}'
<3> 统计某个文件夹下的文件占用的字节数
命令    ls -l|awk 'BEGIN {size=0;} {size+=$5;} END{print "[end]size is ",size}'
说明:统计不包括文件夹的子目录
5.2 条件语句
声明方式: 
    if表达式. {语句;}
    if表达式1. {语句;} else if表达式2. {语句;}
    if表达式. {语句;} else {语句;}
    <1> 统计某个文件夹下的文件占用的字节数,过滤4096大小的文件一般都是文件夹.
    命令    ls -l | awk 'BEGIN {size=0;print "[start]size is ",size} {if($5!=4096) {size+=$5;}} END{print "[end]size is ",size/1024/1024,"M"}'
5.3 循环语句
声明方式:
    while、do/while、for、break、continue

 seq

1. 命令格式
    seq [选项] 尾数
    seq [选项] 首数 尾数
    seq [选项] 首数 增量 尾数
2. 选项
    -f:--format,格式
    -s:--separator,字符串,使用指定的字符串分割数字默认使用个"\n"分割.
    -w:--sequal-width,在列前添加0,使得宽度相同

sort

1. 命令格式
sort选项.参数.
2.选项
-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
-k 指定排序的列

+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位

如果排序完成了,将重复的行仅显示一次。注意,若文件未排序,该命令失效。

uniq

1.命令格式
uniq [-ic] filename
2.参数
-i:忽略大小写
-c:统计每行重复的次数
-d或--repeated:仅显示重复出现的行列;

 wc命令

统计文件中有多少行,多少字,多少字符
1.命令格式
wc [-lwm] filename
2.参数
-l:仅显示行数
-w:仅显示字数英文单词个数.
-m:字符数

Linux  安装

1源码安装

2bin 二进制

3rpm安装

4yum包安装

解压命令: tar -zxvf   包

                                                 Linux扩展技能                                                               

1SSH

SSH全称Secure Shell,用来取代传统telnet和R系列命令(rlogin,rsh,rexec等)远程登陆和远程执行命令的工具。

SSH是一种加密协议,不仅在登陆过程中对密码进行加密传送,而且对登陆后执行的命令的数据也进行加密,即使别人在网络上监听并截获了你的数据包,并看不到其中的内容。

1 chmod更改文件、文件夹权限。权限设置分2种,分别可以使用数字和符号。

语法:chmod [-R] 权限 文件/目

2 chown:更改文件所有者。此命令是change owner的简称,不过要被改变的用户要在/etc/passwd文件内存在才行,否则会报错,一般为root用户调用较多。

语法:chown [-R] 用户 文件/目录 或者 chown [-R] 用户:组名 文件/目录

3 chgrp更改文件所属用户组。此命令是change group的简称,要求被改变的组名要在/etc/group文件内存在才行,否则会报错。

语法:chgrp [-R] 用户组 文件/目录

                Hadoop

1Hadoop生态圈

 1HDFS特点

         a高容错和高可用性

        b流式数据访问

        c弹性存储,支持大规模数据群

        d简单一致性模型

        e移动计算而非移动数据

        f协议和接口多样性

        h多样的数据管理功能

2HDFS 

   Hadoop分布式文件系统

3HDFS组件角色

        NameNode(NN) 元数据管理者,管理NameSpace

          DataNode(DN)文件系统的工作节点

        Client  客户端

4读文件流程

        1 Cilent 向NameNode发送请求,寻找数据对应的数据库的位置信息

        2NameNode 返回文件对应的数据快元数据信息

        3由 Cilent 与DataNode直接通信,读取各个Block

5 写文件流程

 1Client向NameNode发送写数据请求,寻找可以写入的block

2Cilent找到对应的block 数据库所处的DataNode位置后开始写入操作

3待所有的数据库block 数据块写入后,Client接收到去全部写完ack答复, 报告新增的block

6HDFS 高可用性措施

        a冗余备份

        b 跨机架副本存放

        c心跳检测

        d数据完整性检测

        f安全模式

        e核心文件备份

        f空间回收

7 HDFS 常用命令

查看文件夹 : hdfs dfs -ls

创建目录: hdfs dfs -mkdir

删除目录: hdfs dfs -rm -r

下载文件岛到本地: hdfs dfs -copyToLocal 

  1. 从本地当前目录下,上传之前的index.html文件到hdfs的/tmp/tianliangedu目录中:
    1. hdfs dfs -copyFromLocal index.html /tmp/tianliangedu

查看文件大小: hdfs dfs -du -h

读文件JAVA

  public static void main(String[] args) throws IOException {
        // 1. 定义读取文件的路径
        String filePath = args[0];
        // 2. 创建hdfs配置
        Configuration conf = new Configuration();
        // 3. 打开创建FileSystem,对hdfs的抽象
        FileSystem fs = FileSystem.newInstance(conf);
        // 4. 创建一个Path。 对文件的引用
        Path path = new Path(filePath);
        // 5. FileSystem 打开输入流
        FSDataInputStream inputStream = fs.open(path);
        // 6. 将输入流的字节数组都读取出来
        byte[] bytes = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = inputStream.read(bytes)) > 0) {
            bos.write(bytes, 0, len);
        }
        byte[] byteArray = bos.toByteArray();
        // 7. 将字节数组抓化成字符串输出
        String result = new String(byteArray, "utf8");
        System.out.println(result);
    }

分布式计算框架Map/Reduce

1MapReduce

MapReduce是一种编程模型,是面向大数据并行处理的计算模型、框架和平台。

2MapReduce 基本特点

       a分不可靠

        b封装了实现细节

        c提供跨语音编程能力

3MapReduce主要功能

        1)数据划分和计算任务调度

        2)掌握/代码互相定位

        3)系统优化

        4)出错检测和恢复

4MapReduce运行流程

1 PreMap阶段: 将数据源进行切片 

2Map阶段: 将数据整理成  K -V键值对形式, Partation 进行分区, sort 排序,  

                本地规约: Combiner(可选)

Map和Reduce中间有一个Shuffle: 进行合并 ,排序

3Reduce阶段:运行相关任务

代码实现:

        

package com.tledu.mapReudce;

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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.util.StringTokenizer;



public class MapReduce {


    public static class WordCountMapper extends Mapper<Object, Text,Text, IntWritable>{
        @Override
        protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
            //map 数据处理,将输入的kv 转换成输出的kv
            //词频统计,输出的kv 是word freq的类型数据,
            //输入的value是不是一行数据,多个单词用空格分割
            //1将单词提取出来
            StringTokenizer str = new StringTokenizer(value.toString(),",");
            while (str.hasMoreTokens()){
                //获取到了每个单词
                String wordStr =str.nextToken();
                //输出kv形式,k就是这个单词,value是个数
                Text word = new Text(wordStr);
                IntWritable one = new IntWritable(1);
                //将数据输出
                context.write(word,one);

            }
        }

    }


    public  static class  WordCountReduce extends Reducer<Text, IntWritable, Text,IntWritable>{
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            //key 聚合过来的key
            //values 是key的多有的值
            //求频率,计数
            int sum = 0;
            for (IntWritable val : values){
                sum +=val.get();
            }
            //求出了综合
            context.write(key,new IntWritable(sum));
        }
    }

    public  static  void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        //dirver是驱动,将整个流程打通
        //创建配置
        Configuration conf = new Configuration();
        //创建任务
        Job job = Job.getInstance(conf,"job021-tianbiao-wordcount");

        //运行的主类 mapper, combine, reducer
        job.setJarByClass(MapReduce.class);
        job.setMapperClass(WordCountMapper.class);
        job.setCombinerClass(WordCountReduce.class);
        job.setReducerClass(WordCountReduce.class);

        //配置输出的 kv形式
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //指定输入和输出目录
        FileInputFormat.addInputPath(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        //开启任务。等待执行
        System.exit(job.waitForCompletion(true) ? 0 :1);
    }
    }

                                                MapReduce进阶

1文件格式

面向行/列

类型名称

是否可切分

优点

缺点

面向行

文本文件格式(.txt)

查看方便编辑简单

无压缩占空间大、传输压力大、数据解析开销大

面向行

sequenceFile序列文件格式(.seq)

原生支持、二进制kv存储、支持行和块压缩

本地查看不方便:小文件合并成kv结构后不易查看内部数据

面向列

rcfile文件格式(.rc)

数据加载快、查询快、空间利用率高、高负载能力

每一项都不是最高

面向列

orcfile文件格式(.orc)

兼具了rcfile优点,进一步提高了读取、存储效率、新数据类型的支持

每一项都不是最高

2压缩格式 

压缩格式按其可切分计算性,分为可切分计算和不可切分计算两种。

可切分性

类型名称

是否原生

优点

缺点

适用场景

可切分

lzo(.lzo)

压缩/解压速度快,合理的压缩率

压缩率比gzip低,非原生、需要native安装

单个文件越大,lzo优点越明显,压缩完成后>=200M为宜

可切分

bzip2(.bz2)

高压缩率超过gzip,原生支持、不需要native安装,用linux bzip可解压操作

压缩/解压速率慢

处理速度要求不高、压缩率要求高的情况

不可切分

gzip(.gz)

压缩/解压速度快,原生/native都支持,使用方便

不可切分,对cpu要求较高

压缩完成后<=128M的文件适宜

不可切分

snappy(.snappy)

高压缩/解压速度,合理的压缩率

压缩率比gzip低,非原生、需要native安装

适合作为map->reduce或是job数据流中间的数据传输格式

先安装lzo

安装lzo命令:

yum -y install lzo lzo-devel hadooplzo hadooplzo-native

再安装lzop

安装lzop命令:

yum install lzop

分布式资源管理与任务调度框架Yarn

1Yarn 是什么

  • Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)
  • 一种新的Hadoop资源管理器,一个通用资源管理系统
  • 为上层提供统一的资源管理与任务调度及监控,提高了集群管理效率、资源使用率、数据共享效率

2 MRV1存在的主要问题

  • JobTracker单点故障,如果它挂掉,整个系统无法运转
  • JobTracker负载过重,限制了集群扩展,随着节点规模的增大,成为集群的瓶颈
  • 仅支持MR计算框架,适合批处理、基于磁盘的计算

资源与计算没有很好的解耦设计,一个集群只能使用一个计算框架,如Hadoop&MapReduce集群、Spark集群、Tez集群等

3        Yarn 特点

  • 资源管理与计算框架解耦设计,一个集群资源共享给上层各个计算框架,按需分配,大幅度提高资源利用率
  • 运维成本显著下降,只需运维一个集群,同时运行满足多种业务需求的计算框架
  • 集群内数据共享一致,数据不再需要集群间拷贝转移,达到共享互用
  • 避免单点故障、集群资源扩展得到合理解决

4 运行流程

        1用用户向发出指令, RescourceManager 收到后 调度NodeManager

        2 NodeManager 创建Contriner 同时启动Applicaiton

        3 ApplicationMaster 向RescourceManager 注册,申请资源,

        4申请到资源后 与对应的NodeManager通信 ,启动Container任务,运行Task

        5Task  运行,向NodeManager,ApplicantionMaster汇报自己状态

        6完成后 Application Master 向ResourceManager申请注销并关闭自己

5Yarn调度策略

调度名称

特点

FIFO Scheduler(先进先出)

默认的队列内部调度器,只有一个队列,所有用户共享

,简单好理解,无法控制用户的资源使用,造成集群的可用性很差。一般不在生产环境使用。

Capacity Scheduler(容器调度器

多用户、分队列、ACL控制、不支持抢占式,队列内部依然是FIFO,也可以采用Fair

Fair Scheduler(公平调度器)

多用户、分队列、ACL控制、支持抢占式,队列内部不是FIFO,而是公平分配的方式

                                                                Hive基础 

1数据仓

        a英文名称为Data Warehouse,可简写为DW

        b为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合

        c单个数据存储,出于分析性报告和决策支持目的而创建

        d为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制

    通俗解释:

        a面向分析的存储系统

        b一个面向主题的,集成的,不可修改的,反应历史变化的数据集合,用于数据分析,辅助管理决策。

        面向主题:指数据仓库中的数据按照一定的主题域进行组织

        集成:指对原有分散的数据库经过系统加工,整理得到的消除元数据中的不一致性

        不可修改:指一旦某个数据进入仓库以后只需要定期的加载,刷新,不会更改

        反映历史变化:指通过这些信息,对企业的发展历程和未来趋势做出定量分析预测

  • 数据仓库和数据库对比分析
    • 主要联系
      • 两者均是用来存储数据的,即均为数据的存储载体。
      • 数据仓库也是数据库,是数据库的一种衍生、延深应用。
      • 数库仓库和数据库之间存在数据交互,即你中有我、我中有你。
        • 数据库中的在线数据推送到离线的数据仓库用于分析处理
        • 数据仓库中分析处理的结果数据也通常推送到关系数据库中,便于前台应用的可视化展现应用。
      • 数据仓库的出现,并不是要取代数据库,且当下大部分数据仓库还是用关系数据库管理系统来管理的,即数据库、数据仓库相辅相成、各有千秋。
    • 主要区别
      • 数据库是面向事务的设计,数据仓库是面向主题设计的。
      • 数据库一般存储在线交易数据,实时性强存储空间有限,数据仓库存储的一般是历史数据,实时性弱但存储空间庞大。
      • 数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余。
      • 数据库是为捕获数据而设计,即实时性强吞吐量弱,数据仓库是为分析数据而设计,即吞吐量强实时性弱。

        

                                       Hive基本使用

1 切换hive 用户:  su  hive

2常用命令查看: show databases

3查看数据库: show databases;

4创建数据库:create database 库名

5选择数据库 use   库名

6 查看数据库中的表: show  tables;

7 创建表:  create table 表名(列名 类型,列名 类型)

8向表中插入数据: insert into

9查询数据表中的数据: select * from 表名称

10删除一个表:drop table 表名称

                         Hive 运行流程

 数值类型

类型

说明

TINYINT

1-byte signed integer

from -128 to 127

SMALLINT

2-byte signed integer

from -32,768 to 32,767

INT

INTEGER

4-byte signed integer

from -2,147,483,648 to 2,147,483,647

BIGINT

8-byte signed integer

from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

FLOAT

4-byte single precision floating point number

DOUBLE

8-byte double precision floating point number

PRECISION 

DECIMAL

Decimal datatype was introduced in Hive0.11.0

(HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976)

2.2 日期类型

类型

说明

TIMESTAMP

UNIX时间戳和可选的纳秒精度

DATE

描述特定的年/月/日,格式为YYYY-MM-DD

2.3 字符串

类型

说明

string

最常用的字符串格式,等同于java String

varchar

变长字符串,hive用的较多,最长为65535

char

定长字符串,比varchar更多一些,一般不要超过255个字符

2.4 布尔类型

类型

说明

boolean

等同于java的boolean用的很少

2.5 字节数组

类型

说明

binary

字节数组类型,可以存储任意类型的数据用的很少

2.6 复杂(集合)数据类型

数据类型

描述

字面语法示例

STRUCT

和C语言中的struct或者”对象”类似,都可以通过”点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastdt STRING},那么第1个元素可以通过字段名.first来引用

struct(

‘John’,

‘Doe’)

MAP

MAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取值’Doe’

map(‘first’, ‘John’,

‘last’,

‘Doe’)

ARRAY

数组是一组具有相同类型的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第1个元素可以通过数组名[0]进行引用

ARRAY(

‘John’,

‘Doe’)

. 数据操作分类

操作分类

具体操作

sql备注

DDL

•创建数据库

•建/删除表

•修改表结构

•创建/删除视图 

•显示命令

Create/Drop/Alter Database

Create/Drop/Truncate Table

Alter Table/Partition/Column

Create/Drop/Alter View

Create/Drop Index

Create/Drop Function

Show functions;

Describe function;

DML

•数据插入(insert,load)

load data...into table

insert overwrite table 

DQL

•数据查询(select)

正在上传…重新上传取消正在上传…重新上传取消

1  DDL

  1. 元数据:描述数据的数据
  2. 表分类:主要分内表和外表
    1. 内表:元数据和数据本身均被hive管理。删除表则全部删除。
    2. 外表:元数据被hive管理,数据本身存储在hdfs,不受hive管理。删除表则只删除元数据,数据本身不变

  1. 关键词解释
  • external: 创建内部表还是外部表,此为内外表的唯一区分关键字。
  • comment col_comment: 给字段添加注释
  • comment table_comment: 给表本身添加注释
  • partitioned by: 按哪些字段分区,可以是一个,也可以是多个
  • clustered by col_name... into num_buckets BUCKETS:按哪几个字段做hash后分桶存储
  • row format:用于设定行、列、集合的分隔符等设置
  • stored as : 用于指定存储的文件类型,如text,rcfile等
  • location : 设定该表存储的hdfs目录,如果不手动设定,则采用hive默认的存储路径

CREATE  TABLE student(
id string comment '学号',
username string comment '姓名',
classid int comment '班级id',
classname string comment '班级名称'
)
comment '学生信息主表'
partitioned by (come_date string comment '按入学年份分区')
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\001' 
LINES TERMINATED BY '\n'
STORED AS  textfile;

2 DML 

  • 创建一个文本文件存储的表,并以"\t"作为分隔符,方便构造和上传数据
  • CREATE  TABLE student(
    id string comment '学号',
    username string comment '姓名',
    classid int comment '班级id',
    classname string comment '班级名称'
    )
    comment '学生信息主表'
    partitioned by (come_date string comment '按入学年份分区')
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' 
    LINES TERMINATED BY '\n'
    STORED AS  textfile;
    

    构造与表对应的输入文件

  • 将本地数据文件加载到表中
  • LOAD DATA local INPATH './student.txt' OVERWRITE INTO TABLE student PARTITION (come_date=20170903);

    加载HDFS数据文件

  • 将之前的本地文件上传至自己的hdfs目录中
  • hdfs dfs -copyFromLocal student.txt /tmp/tianliangedu/input_student_info

DML        

加载数据脚本

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

  • 创建一个文本文件存储的表,并以"\t"作为分隔符,方便构造和上传数据
    CREATE  TABLE student(
    id string comment '学号',
    username string comment '姓名',
    classid int comment '班级id',
    classname string comment '班级名称'
    )
    comment '学生信息主表'
    partitioned by (come_date string comment '按入学年份分区')
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' 
    LINES TERMINATED BY '\n'
    STORED AS  textfile;
    

  • 将本地数据文件加载到表中
    LOAD DATA local INPATH './student.txt' OVERWRITE INTO TABLE student PARTITION (come_date=20170903);

. DQL

脚本模板

SELECT [DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list [HAVING condition]]
[ CLUSTER BY col_list
   | [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]
]
[LIMIT number]
	DISTRIBUTE BY col_list
以指定字段作为key作hash partition,保证相同的key会到同一个reduce去处理。
	Sort By col_list
以指定字段作为单个reduce排序的key,保证单个reduce内的key有序排列输出。
	Order By col_list
只会生成一个reduce任务,对全部排序
	CLUSTER BY col_list
以指定字段作为key做hash partition,保证相同key会到同一个reduce去处理。该命令相当于distributed by col_list和sort by col_list的联合使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值