Linux学习

查看系统中所用用户及信息
  • cat /etc/passwd
  • /etc/passwd 文件存放的是用户信息.由六个分号组成的7个信息,分别是:

字段

描述

用户名 (magesh):

已创建用户的用户名,字符长度 1 个到 12 个字符。

密码(x):

代表加密密码保存在 `/etc/shadow 文件中。

用户 ID(506):

代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。

群组 ID (507):

代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在 /etc/group文件中。

用户信息(2g Admin - Magesh M):

代表描述字段,可以用来描述用户的信息(LCTT 译注:此处原文疑有误)。

家目录(/home/mageshm):

代表用户的家目录。

Shell(/bin/bash):

代表用户使用的 shell 类型。

  • ls /home:直接查看home目录下有多少目录就可以知道当前系统下的用户名
  • 查看用户信息:who 查看当前登录用户的账户名

大数据框架之分区,分桶,分片

Hive分区
  • 是按照数据表的某列或者某些列分为多区,在hive存储上是hdfs文件,也就是文件夹形式。现在最常用的跑T+1数据,按当天时间分区的较多。
  • 把每天通过sqoop或者datax拉取的一天的数据存储一个区,也就是所谓的文件夹与文件。在查询时只要指定分区字段的值就可以直接从该分区查找即可。创建分区表的时候,要通过关键字 **partitioned by (column name string)**声明该表是分区表,并且是按照字段column name进行分区,column name值一致的所有记录存放在一个分区中,分区属性name的类型是string类型。
  • 当然,可以依据多个列进行分区,即对某个分区的数据按照某些列继续分区。
  • 向分区表导入数据的时候,要通过关键字partition((column name=“xxxx”)显示声明数据要导入到表的哪个分区
  • 设置分区的影响
  • 首先是hive本身对分区数有限制,不过可以修改限制的数量;
set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=1000; 
set hive.exec.dynamic.partition.mode=nonstrict; 
set hive.exec.parallel.thread.number=264;
  • hdfs对单个目录下的目录数量或者文件数量也是有限制的,也是可以修改的;
  • NN的内存肯定会限制,这是最重要的,如果分区数很大,会影响NN服务,进而影响一系列依赖于NN的服务。所以最好合理设置分区规则,对小文件也可以定期合并,减少NN的压力。
Hive分桶
  • 在分区数量过于庞大以至于可能导致文件系统崩溃时,我们就需要使用分桶来解决问题
  • 分桶是相对分区进行更细粒度的划分。分桶则是指定分桶表的某一列,让该列数据按照哈希取模的方式随机、均匀的分发到各个桶文件中。因为分桶操作需要根据某一列具体数据来进行哈希取模操作,故指定的分桶列必须基于表中的某一列(字段)要使用关键字clustered by 指定分区依据的列名,还要指定分为多少桶
create table test(id int,name string) cluster by (id) into 5 buckets .......

insert into buck select id ,name from p cluster by (id)
Hive分区分桶区别
  • 分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助
  • 不同于分区对列直接进行拆分,桶往往使用列的哈希值对数据打散,并分发到各个不同的桶中从而完成数据的分桶过程
  • 分区和分桶最大的区别就是分桶随机分割数据库,分区是非随机分割数据库