HIVE 总结 二 ,配置,tez,及常用命令和数据类型
文章目录
1.MySQL最小化安装
-
检查系统上是否有残留的SQL,先进行卸载工作
rpm -qa |grep mariadb sudo rpm -e --nodeps mariadb-libs
-
将MySQL的安装包(.tar)拷贝到服务器上,进行解压到指定文件夹
mkdir mysql-lib tar -xf mysql...(mysql全路径) -C mysql-lib(解压到指定文件夹)
-
执行rpm安装,最小安装如图红框标识,按照以下顺序安装
#安装缺少的依赖 yum install -y libaio #最小化安装MySQL sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
-
删除配置文件指向的内容
#查看值 cat /etc/my.cnf #删除/var/lib/mysql目录下的所有内容 cd /var/lib/mysql #注意执行命令的位置 sudo rm -rf /var/lib/mysql/*
-
初始化MySQL数据库
sudo mysqld --initialize --user=mysql
-
查看临时生成的root临时密码
sudo cat /var/log/mysqld.log
-
启动MySQL服务
#启动服务 sudo systemctl start mysqld #查看状态 sudo systemcrl status mysqld
-
登录,改密码
mysql -uroot -p #(粘贴临时密码) #第一步设置root用户的密码 set password =password("123456");
-
修改默认用户表,支持任意主机IP进行连接
update mysql.user set host='%' where user='root'; #再重启MySQL服务即可
sudo systemctl restart mysqld
2.Hive 安装
-
上传hive压缩包到指定目录下 apache-hive-3.1.2-bin.tar.gz
-
解压到/opt/module下
tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
-
修改环境变量
sudo vim /etc/profile.d/my_env.sh #添加内容 #HIVE_HOME export HIVE_HOME=/opt/module/hive...(hive的解压目录) export PATH=$PATH:$HIVE_HOME/bin
-
解决日志jar冲突
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
-
HIVE源数据配置到MySQL数据库中
拷贝驱动 将MySQL的JDBC驱动拷贝到Hive的lib目录下
cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib
在hive/conf目录下创建hive-site.xml
vim $HIVE_HOME/conf/hive-site.xml
添加内容
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- jdbc连接的URL metastore 指定元数据库名--> <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> <!-- 指定hiveserver2连接的端口号 --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <!-- 指定hiveserver2连接的host --> <property> <name>hive.server2.thrift.bind.host</name> <value>hadoop102</value> </property> <!-- 指定存储元数据要连接的地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://hadoop102:9083</value> </property> <!-- 元数据存储授权 jdbc方式想要连接元数据得关闭--> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> <!-- Hive元数据存储版本的验证 jdbc方式想要连接元数据得关闭--> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <!-- hiveserver2的高可用参数,开启此参数可以提高hiveserver2的启动速度 --> <property> <name>hive.server2.active.passive.ha.enable</name> <value>true</value> </property> </configuration>
3.安装tez引擎
-
简介
Tez是一个hive的运行引擎,性能优于MapReduce
MapReduce在运行过程中会进行多次落盘(写磁盘)操作,Tez则在内存中进行,所以tez速度比MapReduce快,但是很耗内存资源
-
讲tez安装包拷贝到集群
#解压到指定目录 mkdir -p /opt/module/tez tar -zxvf /opt/software/tez-0.10.1-SNAPSHOT-minimal.tar.gz -C /opt/module/tez #上传到HDFS hadoop fs -mkdir /tez hadoop fs -put /opt/software/tez-0.10.1-SNAPSHOT.tar.gz /tez
-
在Hadoop配置文件夹下新建tez-site.xml文件
vim $HADOOP_HOME/etc/hadoop/tez-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定tez依赖包的在hdfs中的全路径 --> <property> <name>tez.lib.uris</name> <value>${fs.defaultFS}/tez/tez-0.10.1-SNAPSHOT.tar.gz</value> </property> <!-- --> <property> <name>tez.use.cluster.hadoop-libs</name> <value>true</value> </property> <!-- 分配给tez的内存 --> <property> <name>tez.am.resource.memory.mb</name> <value>1024</value> </property> <!-- 分配给tez的处理器核数 --> <property> <name>tez.am.resource.cpu.vcores</name> <value>1</value> </property> <!-- 基于yarn提供的内存,分配给java进程的百分比,默认是0.8,具体大小取决于mapreduce.reduce.memory.mb和mapreduce.map.memory.mb。 --> <property> <name>tez.container.max.java.heap.fraction</name> <value>0.4</value> </property> <!-- 每个tez任务可以使用内存大小 --> <property> <name>tez.task.resource.memory.mb</name> <value>1024</value> </property> <!-- 每个tez任务可以使用的cpu核数 --> <property> <name>tez.task.resource.cpu.vcores</name> <value>1</value> </property> </configuration>
-
修改Hadoop的环境变量
vim $HADOOP_HOME/etc/hadoop/shellprofile.d/tez.sh #将一下内容粘贴进去 去掉括号中的内容 hadoop_add_profile tez function _tez_hadoop_classpath { hadoop_add_classpath "$HADOOP_HOME/etc/hadoop" after hadoop_add_classpath "/opt/module/tez/*" after (tez的解压目录) hadoop_add_classpath "/opt/module/tez/lib/*" after (tez目录下的lib目录) }
-
修改hive的计算引擎
vim $HIVE_HOME/conf/hive-site.xml #在末尾添加内容
<property> <name>hive.execution.engine</name> <value>tez</value> </property> <property> <name>hive.tez.container.size</name> <value>1024</value> </property>
-
调节容量调度器的资源调度策略
vim $HADOOP_HOME/etc/hadoop/capacity-scheduler.xml
<!-- 将0.1 该成1 --> <property> <name>yarn.scheduler.capacity.maximum-am-resource-percent</name> <value>0.1</value> <description> Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications. </description> </property>
-
jvm堆内存溢出
字yarn-site.xml中添加以下代码,或者修改相应节点
<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
-
解决日志jar包冲突
rm /opt/module/tez/lib/slf4j-log4j12-1.7.10.jar
4.启动Hive
-
登录MySQL,新建hive的元数据库
mysql -uroot -p create databse metastore; quit;
-
初始化hive元数据库
schematool -initSchema -dbType mysql -verbose
-
启动metastore和hiveserver2两个服务
Hive 2.x以上版本,要先启动这两个服务,否则会报错
#新窗口启动metastore hive --service metastore #新窗口启动hiveserver2 hive --service hiveserver2 #--- 可以将以上两个服务启动以后台的形式运行 nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 & nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &
-
启动Hadoop
看之前的文章
-
启动hive客户端
1.以启动beeline 客户端
$HIVE_HOME/bin/beeline -u jdbc:hive2://hadoop102?:10000 -n test
2.启动hive客户端
hive #或者 $HIVE_HOME/bin/hive
启动后都是类SQL的客户端界面,以及使用类SQL的语法
3.以外部工具连接hive数据库(略)
5.常用命令
-
bin/hive -help
bin/hive -help #在hive命令行里创建一个表student,并插入1条数据 create table student(id int,name string); insert into student values(1,"zhangsan"); select * from student;
-
“-e”不进入hive的交互窗口执行sql语句
bin/hive -e "select id from student;"
-
“-f”执行脚本中sql语句
#在sql脚本中写入正确的sql语句 #执行案例 bin/hive -f /opt/module/hive/datas/hivef.sql #将执行结果写入文件 bin/hive -f /opt/module/hive/datas/hivef.sql > /opt/module/datas/hive_result.txt
-
其他操作
#退出hive窗口 hive(default)>exit; hive(default)>quit; #退出jdbc beeline 连接的窗口 !quit #在hive cli命令窗口中如何查看hdfs文件系统 dfs -ls /; #查看在hive中输入的所有历史命令 cat /home/test/.hivehistory #查看在beeline中输入的所有历史命令 cat /home/test/.beeline/history
6.常见属性
-
运行日志配置
1.Hive的log默认存放在指定目录下
修改$HIVE_HOME/conf/hive-log4j.properties.template文件名称为hive-log4j.properties
2.在hive-log4j.properties文件中修改log存放位置
hive.log.dir=/opt/module/hive/logs -
参数配置
-- 查看所有的配置信息 hive>set;
参数的配置三种方式
(1)配置文件方式
默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml
用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效
(2)命令行参数方式 启动Hive时,可以在命令行添加-hiveconf param=value来设定参数
bin/hive -hiveconf hive.execution.engine=tez;
仅对本次hive启动有效
(3) 可以在HQL中使用SET关键字设定参数
set hive.execution.engine=tez;
仅对本次hive 启动的会话有效
上述三种设定方式的优先级依次递增。
即配置文件<命令行参数<参数声明。
注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,
因为那些参数的读取在会话建立以前已经完成了
7.hive数据类型
-
基本数据类型
HIVE MySQL JAVA 长度 例子 TINYINT TINYINT byte 1byte有符号整数 2 SMALINT SMALINT short 2byte有符号整数 20 INT INT int 4byte有符号整数 20 BIGINT BIGINT long 8byte有符号整数 20 BOOLEAN 无 boolean 布尔类型,true或者false TRUE FALSE FLOAT FLOAT float 单精度浮点数 3.14159 DOUBLE DOUBLE double 双精度浮点数 3.14159 STRING VARCHAR string 字符系列。可以指定字符集。可以使用单引号或者双引号。 ‘now is the time’ “for all good men” TIMESTAMP TIMESTAMP 时间类型 BINARY BINARY 字节数组 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数
-
集合数据类型
数据类型 描述 语法示例 STRUCT 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。2 struct()例如struct<street:string, city:string> MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 map()例如map<string, int> ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 Array()例如array Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套
-
测试
-
hive建表
create table test( name string, friends array<string>, children map<string, int>, address struct<street:string,city:string,email:int> ) row format delimited fields terminated by ',' collection items terminated by '_' map keys terminated by ':' lines terminated by '\n';
row format delimited fields terminated by ‘,’ – 列分隔符
collection items terminated by ‘_’ --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
map keys terminated by ‘:’ – MAP中的key与value的分隔符
lines terminated by ‘\n’; – 行分隔符
-
将json文件放入test.txt 放入指定目录
-
{ "name": "songsong", "friends": ["bingbing" , "lili"], //列表Array, "children": { //键值Map, "xiao song": 18, "xiaoxiao song": 19 } "address": { //结构Struct, "street": "hui long guan", "city": "beijing", "email": "10010" } }
-
hive导入本地的文本数据测试表
load data local inpath '/opt/module/hive/datas/test.txt' into table test;
-
查询
select friends[1],children['xiao song'],address.city from test
//键值Map, "xiao song": 18, "xiaoxiao song": 19 } "address": { //结构Struct, "street": "hui long guan", "city": "beijing", "email": "10010" }
}
-
hive导入本地的文本数据测试表
load data local inpath '/opt/module/hive/datas/test.txt' into table test;
-
查询
select friends[1],children['xiao song'],address.city from test
-