Hive的shell以及Hive参数的配置
Hive的shell
一:进入Hive的客户端之前
- 执行语句相关的
hive -e "sql" ;
hive -e "show dtabase;" 执行单个sql语句
执行顺序是:启动客户端–》执行语句–》退出客户端;
hive -f sql脚本;
创建一个文件shell.txt,写入sql脚本:
create database test_shell;
use test_shell;
create table stu(sid int,name string,age int);
insert into table stu values(1,"ZS",43);
select * from stu;
hive -f /home/hadoop/shell.txt
- 参数配置相关的
hive -hiveconf key=value;预设启动客户端的时候的参数值,一次只能预设一个
例如:hive -hiveconf hive.exec.mode.local.auto=true;本地模式启动
hive -i filename;通过一个文件来初始化参数的,可以一次性初始化多个参数
例如将这些写到一个文件file.txt中:
set hive.cli.print.header=true;
set hive.exec.mode.local.auto=true;
启动的hive的时候指定文件:hive -i /home/hadoop/file.txt
二:进入Hive的客户端之后
**- quit:退出hive的客户端
- set key=value:设置hive的参数值,这种修改的方式只对当前客户端生效
例如:
set mapreduce.job.reduces=3;设置reducetask的个数为3 - set key:查询当前key对应的value值
- set -v:打印所有的参数
- add FILE [file]:添加文件到hive的classpath中
- list FILE:查看当前classpath下所有的文件
- add jar:添加jar包到hive的classpath下
- list jar | jars :查看当前classpath下的所有jar
- ![amd] :在hive的客户端执行linux命令,支持查看,创建,删除,切换不行
例如:!ls; !pwd; !touch file; 可以 - dfs [dfs amd]:在hive的客户端执行hadoop命令
例如:
dfs -ls;查看
上传文件: dfs -put /home/hadoop/hive_data/a.txt /;这里上传文件速度很快,因为hive就是hdfs的客户端,表数据就存在hdfs上面,相当于只是移动位置而已; - source FILE;同mysql中的,用来加载sql脚本(一系列的sql语句)**
Hive参数的配置
对于一般参数,有以下三种设定方式:
- 配置文件 (全局有效)
- 命令行参数(对 hive 启动实例有效)
- 参数声明 (对 hive 的连接 session 有效)
一·:配置文件
Hive 的配置文件包括
用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml
默认配置文件:$HIVE_CONF_DIR/hive-default.xml
用户自定义配置会覆盖默认配置。 另外,Hive 也会读入 Hadoop 的配置,因为 Hive 是作为 Hadoop 的客户端启动的,Hive 的配 置会覆盖 Hadoop 的配置。 配置文件的设定对本机启动的所有 Hive 进程都有效。
二:命令行参数
启动 Hive(客户端或 Server 方式)时,可以在命令行添加-hiveconf param=value 来设定参数,例如:
bin/hive -hiveconf hive.root.logger=INFO,console
这一设定对本次启动的 session(对于 server 方式启动,则是所有请求的 session)有效。
三:参数声明
可以在 HQL 中使用 SET 关键字设定参数,例如:
set mapred.reduce.tasks = 10;
set mapreduce.job.reduces = 10;
这一设定的作用域也是 session 级的。
- set hive.exec.reducers.bytes.per.reducer= 每个 reduce task 的平均负载数据量
- Hive 会估算总数据量,然后用该值除以上述参数值,就能得出需要运行的 reduceTask 数
- set hive.exec.reducers.max= 设置 reduce task 数量的上限
- set mapreduce.job.reduces= 指定固定的 reduce task 数量
但是,这个参数在必要时<业务逻辑决定只能用一个 reduce task> hive 会忽略,比如在设置 了 set mapreduce.job.reduces = 3,但是 HQL 语句当中使用了 order by 的话,那么就会忽略该 参数的设置
上述三种设定方式的优先级依次递增。即参数声明覆盖命令行参数,命令行参数覆盖配置 文件设定。注意某些系统级的参数,例如 log4j 相关的设定,必须用前两种方式设定,因为 那些参数的读取在 session 建立以前已经完成了。