一、Hive安装部署

1、下载安装

下载地址:http://archive.apache.org/dist/hive/

官方文档:https://cwiki.apache.org/confluence/display/Hive/Home#Home-HiveDocumentation

  1. 解压安装:tar -zxf /opt/software/zookeeper-3.5.7 -C /opt/module/
  2. 解决jar冲突问题:将lib目录下的log4j-slf4j-impl-2.10.0.jar重命名
  3. 配置并生效环境变量
1
2
3
#HIVE_HOME
export HIVE_HOME=/opt/module/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

2、配置文件

修改以下Hadoop配置文件,分发并重启集群

1. 修改core-site.xml

  • 命令:vim /opt/module/hadoop/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.atguigu.hosts</name>
<value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.atguigu.groups</name>
<value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.atguigu.users</name>
<value>*</value>
</property>

2. 修改yarn-site.xml

  • 命令:vim /opt/module/hadoop/etc/hadoop/yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!-- NodeManager使用内存数,默认8G,修改为4G内存(16g物理内存的改为2g或者是3g) -->
<property>
<description>Amount of physical memory, in MB, that can be allocated
for containers. If set to -1 and
yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
automatically calculated(in case of Windows and Linux).
In other cases, the default is 8192MB.
</description>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 容器最小内存,默认512M -->
<property>
<description>The minimum allocation for every container request at the RM in MBs.
Memory requests lower than this will be set to the value of this property.
Additionally, a node manager that is configured to have less memory than this value
</description>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>

<!-- 容器最大内存,默认8G,修改为4G -->
<property>
<description>The maximum allocation for every container request at the RM in MBs.
Memory requests higher than this will throw an InvalidResourceRequestException.
</description>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>

<!-- 虚拟内存检查,默认打开,修改为关闭(使用虚拟内存) -->
<property>
<description>Whether virtual memory limits will be enforced for containers.</description>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>

3、元数据部署

  1. 部署Derby

初始化Derby数据库:schematool -dbType derby -initSchema

  1. 部署MySQL

  2. 检查当前系统是否安装过Mysql:rpm -qa|grep mariadb

    1. 存在则移除:rpm -e --nodeps mariadb-libs
    2. 不存在则忽略
  3. 解压rpm安装包:tar -xf /opt/software/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /opt/software/mysql_jars

img

  1. 按照如下顺序执行rpm安装

    1. sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
    2. sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
    3. sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
    4. sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
    5. sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
  2. 删除mysql的数据存储路径下的所有内容(路径地址:/etc/my.cnf文件中datadir参数所对应的值):rm -rf ./*

  3. 初始化MySQL数据库:sudo mysqld --initialize --user=mysql

    1. 启动MySQL服务:sudo systemctl start mysqld
    2. 登录MySQL数据库(密码为刚刚生成的临时密码):mysql -uroot -p
    3. 修改密码:set password = password("新密码");
    4. 修改mysql库的user表:update mysql.user set host='%' where user='root';
    5. 刷新:flush privileges;
  4. 配置Hive元数据库为MySQL

    1. 拷贝JDBC驱动:cp mysql-connector-java-5.1.37.jar ./lib

    2. 配置Metastore到MySQL(在conf目录下新建hive-site.xml文件):vim ./conf/hive-site.xml

    3. <?xml version="1.0"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      <configuration>
          <!-- jdbc连接的URL -->
          <property>
              <name>javax.jdo.option.ConnectionURL</name>
              <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
          </property>
          <!-- jdbc连接的Driver-->
          <property>
              <name>javax.jdo.option.ConnectionDriverName</name>
              <value>com.mysql.jdbc.Driver</value>
          </property>
          <!-- jdbc连接的username-->
          <property>
              <name>javax.jdo.option.ConnectionUserName</name>
              <value>root</value>
          </property>
          <!-- jdbc连接的password -->
          <property>
              <name>javax.jdo.option.ConnectionPassword</name>
              <value>123456</value>
          </property>
          <!-- Hive默认在HDFS的工作目录 -->
          <property>
              <name>hive.metastore.warehouse.dir</name>
              <value>/user/hive/warehouse</value>
          </property>
          <!-- Hive元数据存储的验证 -->
          <property>
              <name>hive.metastore.schema.verification</name>
              <value>false</value>
          </property>
          
          <property>
          <name>hive.server2.thrift.port</name>
          <value>10000</value>
          </property>
       
          <property>
              <name>hive.server2.thrift.bind.host</name>
              <value>hadoop102</value>
          </property>
          
          <!-- 元数据存储授权  -->
          <property>
              <name>hive.metastore.event.db.notification.api.auth</name>
              <value>false</value>
          </property>
          
          <property>
              <name>hive.cli.print.header</name>
              <value>true</value>
          </property>
       
          <property>
              <name>hive.cli.print.current.db</name>
              <value>true</value>
          </property>
      
      </configuration>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31

      5. 初始化元数据库

      1. 登录MySQL:`mysql -uroot -p`
      2. 新建Hive元数据库:`create database metastore;`
      3. 初始化Hive元数据库:`schematool -initSchema -dbType mysql -verbose`

      6. ### 部署MetaStore Server

      在部署MySQL的基础上修改配置

      在hive-site.xml文件中添加配置信息:`vim conf/hive-site.xml`

      ```XML
      <!-- 指定存储元数据要连接的地址 -->
      <property>
      <name>hive.metastore.uris</name>
      <value>thrift://hadoop102:9083</value>
      </property>

      <!-- hiveserver2配置 -->
      <!-- 指定hiveserver2连接的host -->
      <property>
      <name>hive.server2.thrift.bind.host</name>
      <value>hadoop102</value>
      </property>
      <!-- 指定hiveserver2连接的端口号 -->
      <property>
      <name>hive.server2.thrift.port</name>
      <value>10000</value>
      </property>

二、Hive启动/停止

命令行方式访问只需启动MetaStore服务

  1. 启动MetaStore服务:hive --service metastore
  2. 启动HiveServer2服务:hive --service hiveserver2

三、Hive操作

1、命令行

  • 查看命令帮助:hive -help
常用选项 作用 举例
-d 应用于hive命令的变量替换
–database 指定要使用的数据库
-e 命令行中的SQL语句 hive -e "select * from test2;"
-f 文件中的SQL语句 hive -f /opt/module/hive/datas/hivef.sql
-H 打印帮助信息
–hiveconf 设置属性值
–hivevar 应用于hive命令的变量替换
-i 初始化SQL文件
-S 交互式Shell中的静默模式
-v 详细模式(将执行的SQl回显到控制台)

2、HiveServer2

  • 查看命令帮助:beeline -help
常用选项 作用 举例
-u JDBC连接地址 beeline -u jdbc:hive2://hadoop102:10000 -n wuqiuxu
-n JDBC连接用户名

四、Hive客户端操作(HQL)

启动本地客户端:命令行

启动远程客户端:HiveServer2(JDBC连接)

1、数据库配置

查看当前所有配置信息:set;

2、DDL 数据定义

数据库操作

创建数据库 CREATE

  • 默认存储路径:/user/hive/warehouse/*.db
1
2
3
4
5
CREATE [REMOTE] (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[MANAGEDLOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

设置数据库 ALTER .. SET ..

  • 数据库其他的元数据信息都是不可以修改的,包括数据库名和数据库所在的目录位置
1
2
3
4
5
6
7
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);   -- (Note: SCHEMA added in Hive 0.14.0)

ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)

ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)

ALTER (DATABASE|SCHEMA) database_name SET MANAGEDLOCATION hdfs_path; -- (Note: Hive 4.0.0 and later)

切换数据库 USE

1
2
USE database_name;
USE DEFAULT;

删除数据库 DROP

1
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

数据表操作

创建表 CREATE

默认将表名作为HDFS上表对应的存储路径的名字,但通过localtion指定存储路径,就不会修改路径名字为表名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])]
[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]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];

-- ROW FORMAT DELIMITED
DELIMITED
[FIELDS TERMINATED BY char [ESCAPED BY char]]
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char]
[NULL DEFINED AS char] -- (Note: Available in Hive 0.13 and later)
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
字段 说明
CREATE TABLE 创建表
EXTERNAL 创建外部表
COMMENT 为表和列添加注释
PARTITIONED BY 创建分区表
CLUSTERED BY 创建分桶表
SORTED BY 对桶中的一个或多个列另外排序
ROW FORMAT Fields:指定字段之间的分隔符Collection:指定集合中元素间的分隔符Map:指定map集合中键值对间的分隔符Lines:指定每行记录间的分隔符SerDe:Serialize/Deserialize的简称,若未指定Row Format,则用自带的SerDe
STORE AS 指定存储文件类型
LOCATION 指定表在HDFS上的存储位置
AS 根据查询语句结果创建表
LIKE 复制现有的表结构,但是不复制数据

修改表 ALTER TABLE

更新表属性(set)
1
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
重命名表(rename to)
1
ALTER TABLE table_name RENAME TO new_table_name;
更新列(change)
  • 可更新列名/类型/位置/注释
1
2
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
[COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
增加/替换列(add / replace)
  • 增加列:字段位置在所有列后面,partition列前
  • 替换列:表示替换表中所有字段,即可更新列、增加列、删除列
1
2
3
4
ALTER TABLE table_name 
[PARTITION partition_spec] -- (Note: Hive 0.14.0 and later)
ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
[CASCADE|RESTRICT] -- (Note: Hive 1.1.0 and later)
清空表(truncate)
  • 只能删除管理表,不能删除外部表中数据
1
TRUNCATE [TABLE] table_name [PARTITION partition_spec];
删除表(drop)
1
DROP TABLE [IF EXISTS] table_name [PURGE];     -- (Note: PURGE available in Hive 0.14.0 and later)
修改分区
1
2
3
4
5
6
7
-- 新增分区
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
-- 重命名分区
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
-- 删除分区
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE];

查询表 SELECT

1
2
3
4
5
6
7
8
9
10
[WITH CommonTableExpression (, CommonTableExpression)*]    (Note: Only available starting with Hive 0.13.0)
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[LIMIT [offset,] rows]
顺序 书写次序 执行次序
1 select from
2 distinct on
3 from join
4 join where
5 on group by
6 where having
7 group by select
8 having distinct
9 distribute bycluster by distribute by cluster by
10 sort by sort by
11 order by order by
12 limit limit
13 union/union all union /union all

Show

1
2
3
4
5
6
7
8
9
-- Show Databases/Tables/Columns/Views/Materialized Views/Partitions/Indexes/Functions..
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];
SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name];
SHOW TABLES [IN database_name] ['identifier_with_wildcards'];
SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards'];
SHOW PARTITIONS table_name;
SHOW CREATE TABLE ([db_name.]table_name|view_name);
SHOW FUNCTIONS [LIKE "<pattern>"];
..

Describe

1
2
3
4
5
6
7
8
9
10
11
12
-- Describe Database/Table/View/Materialized View/Column/Partition..
DESCRIBE DATABASE [EXTENDED] db_name;
DESCRIBE SCHEMA [EXTENDED] db_name; -- (Note: Hive 1.1.0 and later)
DESCRIBE [EXTENDED|FORMATTED]
table_name[.col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )* ];
DESCRIBE [EXTENDED|FORMATTED] table_name[.column_name] PARTITION partition_spec;
..

-- Describe Function
DESCRIBE FUNCTION <function_name>;
DESCRIBE FUNCTION EXTENDED <function_name>;
..

4、DML数据操作

数据导入

装载数据 LOAD

  • 加载HDFS上的文件到hive表中,采用类似剪切的方式到表的映射目录下
1
2
3
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
Load data 加载数据
Local 从本地加载数据到hive表,否则是从HDFS加载数据到Hive表
Inpath 加载数据的路径
Overwrite 覆盖表中已有数据,否则表示追加
Into table 加载数据到哪张表中
Partition 加载数据到指定分区

插入数据 INSERT

  • 不支持插入部分字段
1
2
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
into 以追加数据的方式插入到表或分区,原有数据不会删除
overwrite 会覆盖表中已存在的数据

查询结果创建表 As Select

见数据表操作-创建表

创建表时加载数据 Location

见数据表操作-创建表

数据导出 INSERT OVERWRITE

  • hive会自动创建导出目录,但是由于是overwrite,所以导出路径一定要写准确,否则存在误删数据的可能
1
2
3
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
SELECT ... FROM ...
local 导出到本地,否则导出到HDFS

数据迁移 EXPORT / IMPORT

导出到HDFS

1
2
EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])] 
TO 'export_target_path' [ FOR replication('eventid') ]

导入到指定Hive

1
2
3
IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]] 
FROM 'source_path'
[LOCATION 'import_target_path']

数据修复 MSCK

1
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

5、UDF函数操作

  1. 添加UDF函数jar包
1
add jar ./datas/myudf.jar;
  1. 创建函数并关联jar包

    1. 临时函数

    2. create temporary function my_len as "com.atguigu.hive.MyStringLength";
      
      1
      2
      3
      4
      5

      3. 永久函数

      4. ```SQL
      create function my_len2 as "com.atguigu.hive.udf.MyUDF" using jar "hdfs://hadoop102:8020/udf/myudf.jar";
  • 删除永久函数:
1
drop function my_len2;

6、执行计划

1
EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query

五、Hive API

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies>
常用类 作用 常用参数 常用方法
org.apache.hadoop.hive.ql.exec.UDFArgumentException UDF函数异常类
org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException UDF函数参数个数异常类
org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException UDF函数参数类型异常类
org.apache.hadoop.hive.ql.metadata.HiveException Hive异常类
org.apache.hadoop.hive.ql.udf.generic.GenericUDF UDF函数接口
org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector 鉴别器类 返回参数个数:length 返回参数类型:getCategory
org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory 类型鉴别器

六、Hive常见配置

1、hive-site.xml

可参考

  1. 默认配置文件:hive-default.xml.template
  2. 官方文档:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
常用配置参数 描述
hive.cli.print.header 是否打印当前表头
hive.cli.print.current.db 是否打印当前库头
hive.exec.mode.local.auto 是否本地模式
hive.exec.mode.local.auto.inputbytes.max local mr的最大输入数据量
ive.exec.mode.local.auto.input.files.max local mr的最大输入文件个数
hive.exec.dynamic.partition 是否开启动态分区
hive.exec.dynamic.partition.mode 严格模式 | 非严格模式
hive.exec.max.dynamic.partitions 所有执行MR的节点上,最大可创建的动态分区
hive.exec.max.dynamic.partitions.pernode 每个执行MR的节点上,最大可创建的动态分区
hive.exec.max.created.files 整个MR Job中,最大可以创建的HDFS文件
hive.error.on.empty.partition 当有空分区生成时,是否抛出异常
hive.exec.compress.intermediate 是否开启hive中间传输数据压缩功能
mapreduce.job.reduces 分配Reduce的个数(-1为按数据量分配)
mapreduce.map.output.compress 是否开启mapreduce中map输出压缩功能
mapreduce.map.output.compress.codec 设置mapreduce中map输出数据的压缩方式(全类名)
hive.exec.compress.output 开启hive最终输出数据压缩功能
mapreduce.output.fileoutputformat.compress 开启mapreduce最终输出数据压缩
mapreduce.output.fileoutputformat.compress.codec 设置mapreduce最终数据输出压缩方式(全类名)
mapreduce.output.fileoutputformat.compress.type 设置mapreduce最终数据输出压缩方式
hive.map.aggr 是否在Map端进行聚合
hive.groupby.mapaggr.checkinterval 在Map端进行聚合操作的条目数目
hive.groupby.skewindata 有数据倾斜的时候进行负载均衡
hive.cbo.enable 是否开启CBO
hive.compute.query.using.stats
hive.stats.fetch.column.stats
hive.stats.fetch.partition.stats
hive.optimize.ppd 是否开启谓词下推
hive.auto.convert.join 是否自动选择MapJoin
hive.mapjoin.smalltable.filesize 大表小表的阈值
hive.optimize.bucketmapjoin 是否开启SMB
hive.optimize.bucketmapjoin.sortedmerge
hive.input.format 输入格式(全类名)
hive.exec.reducers.bytes.per.reducer 每个Reduce处理的数据量
hive.exec.reducers.max 每个任务最大的reduce数
hive.skewjoin.key join记录条数的分拆阈值
hive.optimize.skewjoin 是否join出现倾斜
mapreduce.input.fileinputformat.split.maxsize 最大切片值
hive.merge.mapfiles 是否在map-only任务结束时合并小文件
hive.merge.mapredfiles 是否在map-reduce任务结束时合并小文件
hive.merge.size.per.task 合并文件的大小
hive.merge.smallfiles.avgsize 启动独立map-reduce任务进行文件merge的输出文件平均大小阈值
hive.map.aggr 是否map端执行combiner
hive.fetch.task.conversion Fetch抓取模式
hive(default)> set 是否开启任务并行
hive.exec.parallel.thread.number 同一个sql允许最大并行度
hive.strict.checks.no.partition.filter 严格模式是否不允许分区表不用分区过滤
hive.strict.checks.orderby.no.limit 严格模式是否不允许order by后没有limit
hive.strict.checks.cartesian.product 严格模式是否不允许笛卡尔积查询

表格 还在加载中,请等待加载完成后再尝试复制

2、hive-log4j2.properties

需修改文件名:mv conf/hive-log4j2.properties.template conf/hive-log4j2.properties

常用配置参数 描述
property.hive.log.dir log日志文件存放位置

3、hive-env.sh

需修改文件名:mv conf/hive-env.sh.template conf/hive-env.sh

常用配置参数 描述
HADOOP_HEAPSIZE JVM堆内存大小

附:Hive脚本

MetaStore & HiveServer2群起

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数1为进程名,参数2为进程端口
function check_process()
{
pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
echo $pid
[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}

function hive_start()
{
metapid=$(check_process HiveMetaStore 9083)
# nohup:表示不挂起,关闭终端进程也会继续保持运行状态
# 文件描述符:
cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
# /dev/null:linux文件系统中的一个文件,被称为黑洞,所有写入该文件的内容会被自动丢弃
cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"
[ -z "$metapid" ] && eval $cmd || echo "MetaStroe服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动"
}

function hive_stop()
{
metapid=$(check_process HiveMetaStore 9083)
[ "$metapid" ] && kill $metapid || echo "Metastore服务未启动"
server2pid=$(check_process HiveServer2 10000)
[ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动"
}

case $1 in
"start")
hive_start
;;
"stop")
hive_stop
;;
"restart")
hive_stop
sleep 2
hive_start
;;
"status")
check_process HiveMetaStore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常"
check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常"
;;
*)
echo Invalid Args!
echo 'Usage: '$(basename $0)' start|stop|restart|status'
;;
esac