安装组件
- mysql
- metastore
- hiveserver2
这里搭建是使用的metastore的远程模式
1、mysql安装
参照mysql安装
2、安装
2.1、下载安装包
wget http://dlcdn.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
tar -xvf apache-hive-3.1.2-bin.tar.gz
2.2、配置
2.2.1、进入hive下的conf目录,复制一份hive-env.sh
cp hive-env.sh.template hive-env.sh
2.2.2、 hive-env.sh
HADOOP_HOME=/usr/local/src/hadoop
export HIVE_CONF_DIR=/usr/local/src/apache-hive-3.1.2-bin/conf
2.2.3、hive-site.xml
默认配置在hive-default.xml.template 有说明
vim $HIVE_CONF_DIR/conf/hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://bigdata3:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>bigdata3</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://bigdata3:9083</value>
</property>
2.2.4、分开配置目录
cp apache-hive-3.1.2-bin hiveserver2 #用来启动hiveserver2
cp apache-hive-3.1.2-bin hive-metastore #用来启动metastore
区分配置的原因:
在搭建hive metastore代理(拆分hive集群自己开发的服务)时,无法共用配置。共用配置也可以的
3、mysql库
3.1、上传connect jar
wget http://r98hqakjo.hn-bkt.clouddn.com/mysql-connector-java-5.1.39.jar?e=1648103087&token=266QXNOMpolsjVaAbedGSo5SlBF_aI6oqrUPonGU:3xcxXgOt0RsV3TZz9HZs02O3umw= -P $path
mv mysql-connector-java-5.1.39.jar?e=1648103087 mysql-connector-java-5.1.39.jar
3.1、创建元数据库
mysql -uroot -proot
create database hive; #可以叫其他名字,配置修改好即可
3.2、初始化元数据库
cd apache-hive-3.1.2-bin/
bin/schematool -dbType mysql -initSchema
4、hadoop配置代理用户
<property>
<name>hadoop.proxyuser.root.hosts</name>
<!-- root是指hive的启动用户,注意替换,不然会报hadoop不响应 -->
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<!-- root是指hive的启动用户,注意替换,不然会报hadoop不响应 -->
<value>*</value>
</property>
4、启动
后台启动metastore
nohup bin/hive --service metastore 2>&1 >> /var/metastore.log &
首先需要启动hiveserver2前台启动:bin/hive --service hiveserver2
后台启动:nohup bin/hive --service hiveserver2 2>&1 >> /var/hive2.log &
bin/beeline 连接hiveserver2 (如果beeline报错参考下面这个博客即可)
troubleshooting
1、日志调试
前台启动
bin/hive --service hiveserver2 --hiveconf hive.root.logger=DEBUG,console #如果不生效可以直接修复$HIVE_HOME/conf/hive-log4j.properties文件
2、元数据初始化问题
问题背景:
mysql 库用存储过程将大小表名改为小写表名后,在insert into语句报错
ERROR [pool-6-thread-132] DataNucleus.Datastore: Error thrown executing CREATE TABLE `SEQUENCE_TABLE`
(
`SEQUENCE_NAME` VARCHAR(255) BINARY NOT NULL,
`NEXT_VAL` BIGINT NOT NULL,
CONSTRAINT `SEQUENCE_TABLE_PK` PRIMARY KEY (`SEQUENCE_NAME`)
) ENGINE=INNODB : Table 'sequence_table' already exists
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'sequence_table' already exists
解决
:怀疑是初始化元数据有问题库,备份元数据信息,重新执行元数据初始化脚本解决
bin/schematool -dbType mysql -initSchema
附:
解决字段描述中文乱码问题
ALTER TABLE `COLUMNS_V2` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
3、select count(*) 卡在 Killcommand xxx job
问题背景
select count(*) 卡在 Killcommand xxx job ,手动执行mapreduce能够间隙性成功
Application application_1649846876537_0002 failed 2 times due to Error launching appattempt_1649846876537_0002_000002. Got exception: org.apache.hadoop.net.ConnectTimeoutException 链接不上
解决
: 根据报错发现label下面绑定了两台机器,一台调整了安全组,一台未调整导致。重新调整安全组后成功
另外再资源不够情况下也会出现这种情况,需要调整队列资源
4、hiveserver启动卡住
修改日志等级,排查发现卡在链接hdfs阶段。重启hdfs解决
5、hive client修改参数失败报错
报错
It is not in list of params that are allowed to be modified at runtime
原因
hive开启鉴权后,不允许设置在session
6、hive索引参数导致的问题
hive.optimize.index.filter设置为true时,hive会开启自动创建索引模式,内部修改hive代码没有兼容这一逻辑,记录下
7、hive分割符问题
7.1、背景:
正常建表,采用默认的分隔符:hive 默认的字段分隔符为ascii码的控制符\001,建表的时候用fields terminated by '\001',如果要测试的话,造数据在vi 打开文件里面,用ctrl+v然后再ctrl+a可以输入这个控制符\001。按顺序,\002的输入方式为ctrl+v,ctrl+b。导致无法导入textfile文件
7.2、解决
指定特定的特殊符号作为分隔符:
#指定字段使用空格分割,行有换行符分割
CREATE TABLE test(id int, name string ,tel string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\ ' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
8、强制删除hive库
drop database $dbname cascade;
网友评论