大数据离线

Posted lifuwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据离线相关的知识,希望对你有一定的参考价值。

Hive

Hive的安装部署

1. 上传tar包

2. 解压    tar -zxvf hive-1.2.1.tar.gz -C /export/server

3. 安装mysql数据库
#在线安装
yum install mysql mysql-server mysql-devel 
完成后,用  /etc/init.d/mysqld start    启动mysql
mysql #启动mysql控制台
mysql>; USE mysql; 
mysql>; UPDATE user SET Password=PASSWORD(‘newpassword‘) WHERE user=‘root‘; #设置密码
mysql>; FLUSH PRIVILEGES; 
#允许远程登录 
mysql -u root -p 
Enter Password: <your new password> 
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘密码‘ WITH GRANT OPTION;
service  mysqld start #启动mysql服务  

4. 配置hive
(a)配置HIVE_HOME环境变量  
    vi conf/hive-env.sh 配置其中的$hadoop_home
(b)配置元数据库信息  
    vi  hive-site.xml 
    添加如下内容:
<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>username to use against metastore database</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
        <description>password to use against metastore database</description>
    </property>
</configuration>

5. 安装hive和mysql完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
    如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
    mysql -uroot -p
    #(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
    GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘root‘ WITH GRANT OPTION;
    FLUSH PRIVILEGES;

6. Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的 /home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar

----------------------------------------------------------------------------------------------------------------
Hive几种使用方式:
1.Hive交互shell      bin/hive
    
2.Hive JDBC服务(参考java jdbc连接mysql)
    
3.hive启动为一个服务器,来对外提供服务
    bin/hiveserver2
    nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
        
    启动成功后,可以在别的节点上用beeline去连接
    bin/beeline -u jdbc:hive2://mini1:10000 -n root
        
    或者
    bin/beeline
    ! connect jdbc:hive2://mini1:10000

Hive基本操作

DDL操作

1. 创建库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT database_comment]      #关于数据块的描述
  [LOCATION hdfs_path]          #指定数据库在HDFS上的存储位置
  [WITH DBPROPERTIES (property_name=property_value, ...)];    #指定数据块属性
2. 查询库
show databases; #显示所有库名
desc database [extended] dbname;     #显示数据库的详细属性信息
select current_database();     #查看当前正在使用的库名
3. 删除库
drop database dbname;
drop database if exists dbname;
drop database if exists dbname cascade;    #删除包含表的数据库
4. 创建表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
    [(col_name data_type [COMMENT col_comment], ...)]
    [COMMENT table_comment]
    [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
    [CLUSTERED BY (col_name, col_name, ...)
    [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
    [ROW FORMAT row_format]
    [STORED AS file_format]
    [LOCATION hdfs_path]
说明:
1、  EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径( LOCATION)。Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
2、  LIKE 允许用户复制现有的表结构,但是不复制数据。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE existing_table;
3、  ROW FORMAT  DELIMITED
    [FIELDS TERMINATED BY char]
    [COLLECTION ITEMS TERMINATED BY char]
    [MAP KEYS TERMINATED BY char]
    [LINES TERMINATED BY char] | SERDE serde_name
    [WITH SERDEPROPERTIES
    (property_name=property_value, property_name=property_value,...)]
hive 建表的时候默认的分割符是‘01‘,若在建表的时候没有指明分隔符,load 文件的时候文件的分隔符需要是‘01‘;若文件分隔符不是‘001‘,程序不会
报错,但表查询的结果会全部为‘null‘;用 vi 编辑器 Ctrl+v 然后 Ctrl+a 即可输入‘01‘ -----------> ^A
4、  PARTITIONED BY
分区表指的是在创建表时指定的 partition 的分区空间。一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。表和列名不区分大小写。分区是以字段的形式在表结构中存在,通过 describe table 命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。
5、  STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。TEXTFILE 是默认的文件格式,使用DELIMITED 子句来读取分隔的文件。
6、 CLUSTERED BY INTO num_buckets BUCKETS
对于每一个表(table)或者分,Hive 可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive 也是针对某一列进行桶的组织。Hive 采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
#默认的内部表
create table student(id int, name string, sex string, age int,department string) 
row format delimited fields terminated by ",";
#外部表
create external table student_ext(id int,name string,sex string,age int,department string)
row format delimited fields terminated by "," 
location "/hive/student";
#分区表
create external table student_ptn(id int, name string, sex string, age int,department string)
partitioned by (city string)
row format delimited fields terminated by ","
location "/hive/student_ptn";
#分桶表
create external table student_bck(id int, name string, sex string, age int,department string)
clustered by (id) sorted by (id asc, name desc) into 4 buckets
row format delimited fields terminated by ","
location "/hive/student_bck";
#使用CTAS创建表
create table student_cast as select * from student where id < 95012;
#复制表结构
create table student_copy like student;

5. 查询表

#查看表的信息
desc student;
desc formatted student;
#查看分区信息
show partitions student_ptn;
#查看表的详细建表语句
show create table student_ptn;

6. 修改表

#修改表名
alter table student rename to new_student;
#增加一个字段
alter table new_student add columns (score int);
#修改一个字段
alter table new_student change name new_name string;
#添加多个分区
alter table student_ptn add partition(city="hangzhou") partition(city="chongqing") partition(city="ningbo");
#动态分区
create table student_ptn_age(id int,name string,sex string,department string) partitioned by (age int);
insert overwrite table student_ptn_age partition(age) select id,name,sex,department,age from student_ptn;
#删除分区
alter table student_ptn drop partition (city=‘beijing‘);
#清空表
truncate table student_ptn;

DML操作

Load

LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO
TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
1 、  filepath
相对路径,例如:project/data1
绝对路径,例如:/user/hive/project/data1
完整 URI,例如:hdfs://namenode:9000/user/hive/project/data1
filepath 可以引用一个文件(在这种情况下,Hive 将文件移动到表中),或者它可以是一个目录(在这种情况下,Hive 将把该目录中的所有文件移动到表中)。
2、  LOCAL
如果指定了 LOCAL, load 命令将在本地文件系统中查找文件路径。
3、  OVERWRITE 
如果使用了 OVERWRITE 关键字,则目标表(或者分区)中的内容会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。

以上是关于大数据离线的主要内容,如果未能解决你的问题,请参考以下文章

大数据手撕大数据离线计算方案

ElasticSearch实战(四十五)-Spark 大数据数据离线同步方案

手撕大数据离线计算方案

ElasticSearch实战(四十五)-Spark 大数据离线同步方案

手把手教你大数据离线综合实战 ETL+Hive+Mysql+Spark

VSCode自定义代码片段13——Vue的状态大管家