Hive之将本地文件导入Hive、使用 MySQL 存储 Metastore、Hive中常用的交互命令、Hive 其他命令操作、使用 JDBC 方式访问 Hive、编写 hive 服务启动脚本

一:将本地文件导入Hive案例

  1. 需求:
     将本地/opt/module/datas/student.txt这个目录下的数据导入到hive的student(id int, name string)表中。
  2. 数据准备:
     ⑴在/opt/module/datas/student.txt 这个目录下准备数据 
          
  3. 启动hive,在数据库中创建的student表,并声明文件分隔符’\t’ 
     sql为:create table student(id int,name string) row format delimited fields terminated by '\t';
  4.  加载/opt/module/datas/student.txt 文件到 student 数据库表中。 
     sql:load data local inpath '/opt/module/datas/student.txt' into table student;
      
  5.   遇到的问题
      ⑴现在我们使用的是一个102连接窗口启动hive数据库,如果我们再打开一个102连接窗口去启动hive,就会报错
           
           我们在第二个窗口也启动hive试试:
           
       ⑵原因:
           Metastore(元数据) 默认存储在自带的 derby 数据库中,只支持一个hive客户端连接。
           推荐使用 MySQL 存储 Metastore;       

二:Mysql安装

  1. 查看mysql是否安装,如果安装了,可以先卸载掉
     
  2.  版本:
     
  3. 上传到Linux上
     
  4. 将文件解压到/usr/local/目录下
      
     
  5. 修改文件夹的名称
     
  6. 检查并创建用户和用户组
     

  7. 创建data文件夹

  8. 授权授权目录和用户
     

  9. 安装并初始化
     命令如下:datadir就是安装路径,basedir就是根目录
     /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
     

  10. 复制启动脚本到资源目录
     

  11. 增加mysqld服务控制脚本执行权限
     

  12. 将mysqld服务加入到系统服务
     

  13. 检查mysqld服务是否已经生效
     

  14. 启动mysql(注意:安装目录一定要在/usr/local下)
     

  15. 登录mysql(提示找不到mysql命令)
     

  16. 解决
     

  17. 再次登录
     

  18. 修改密码
     

  19. 最后退出使用修改后的密码登录
     

  20. 连接出现如下
     

  21. 解决
     

  22. 连接成功
     

三:将Hive元数据拷贝到mysql

  1. 驱动拷贝,将mysql-connector-java-5.1.38.jar拷贝到/opt/module/hive/lib/ 
     
  2.  在/opt/module/hive/conf 目录下创建一个 hive-site.xml 
     
  3.  根据官方文档配置mysql参数,拷贝数据到 hive-site.xml 文件中。 
     
    <?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://hadoop20: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 元数据存储版本的验证 -->
     <property>
     <name>hive.metastore.schema.verification</name>
     <value>false</value>
    </property>
     <!--元数据存储授权-->
     <property>
     <name>hive.metastore.event.db.notification.api.auth</name>
     <value>false</value>
     </property>
     <!-- Hive 默认在 HDFS 的工作目录 -->
     <property>
     <name>hive.metastore.warehouse.dir</name>
     <value>/user/hive/warehouse</value>
     </property>
    </configuration>

  4. 登陆 MySQL,新建 Hive 元数据库
    mysql> create database metastore;
    mysql> quit;
  5. 初始化 Hive 元数据库
    [kgf@hadoop20 hive]$ schematool -initSchema -dbType mysql -verbose
  6. 配置完毕后,如果启动 hive 异常,可以重新启动虚拟机。(重启后,别忘了启动 hadoop
    集群),启动hive后可以发现我们之前的student表不见了,我们看看mysql数据库变化
     
  7.  mysql数据库变化,多了一个元数据库,之前是没有的
     
  8.   多窗口启动测试,可以的
     

四:Hive中常用的交互命令

  1.  首先在hive中新建一张表,并且导入一些数据
      
  2. “-e”不进入 hive 的交互窗口执行 sql 语句  
      
  3.  “-f”执行脚本中 sql 语句 
      ⑴新建一个sql脚本
            
     ⑵执行sql脚本
            
  4.   执行文件中的 sql 语句并将结果写入文件中  
      

五: Hive 其他命令操作 

  1.  在 hive cli 命令窗口中如何查看 hdfs 文件系统 
     
  2. 在 hive cli 命令窗口中如何查看 hdfs 本地系统 
     
  3. 查看在 hive 中输入的所有历史命令 
     a:进入到当前用户的根目录
            
     b:查看. hivehistory 文件 
                 

六、使用 JDBC 方式访问 Hive

1)在 hive-site.xml 文件中添加如下配置信息

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

2)启动 hiveserver2

[kgf@hadoop20 hive]$ bin/hive --service hiveserver2
which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_191//bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/hive/bin:/home/kgf/.local/bin:/home/kgf/bin)
2022-06-20 14:16:48: Starting HiveServer2
Hive Session ID = 3209018e-3dcb-4576-bdcb-ab2ed5a55f66
Hive Session ID = 0822263d-09c6-4096-ae50-123ba4b3f3e8

3)启动 beeline 客户端(需要多等待一会)

[kgf@hadoop20 hive]$ bin/beeline -u jdbc:hive2://hadoop20:10000 -n kgf

4)看到如下界面

[kgf@hadoop20 hive]$ bin/beeline -u jdbc:hive2://hadoop20:10000 -n kgf
Connecting to jdbc:hive2://hadoop20:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://hadoop20:10000>

七、编写 hive 服务启动脚本

(1) 前台启动的方式导致需要打开多个 shell 窗口,可以使用如下方式后台方式启动

        nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态

        /dev/null:是 Linux 文件系统中的一个文件,被称为黑洞,所有写入改文件的内容 都会被自动丢弃。

        2>&1 : 表示将错误重定向到标准输出上

        &: 放在命令结尾,表示后台运行

一般会组合使用: nohup [xxx 命令操作]> file 2>&1 &,表示将 xxx 命令运行的结 果输出到 file 中,并保持命令启动的进程在后台运行。

(2)启动的名称参考如下

[kgf@hadoop20 hive]$ nohup hive --service metastore 2>&1 &
[kgf@hadoop20 hive]$ nohup hive --service hiveserver2 2>&1 &

(3)为了方便使用,可以直接编写脚本来管理服务的启动和关闭

#!/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)
 cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 
&"
 [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
 server2pid=$(check_process HiveServer2 10000)
 cmd="nohup 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

3)添加执行权限

[kgf@hadoop20 hive]$ chmod +x $HIVE_HOME/bin/hiveservices.sh

4)启动 Hive 后台服务

[kgf@hadoop20 hive]$ hiveservices.sh start

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值