Skip to content

Latest commit

 

History

History
329 lines (251 loc) · 8.84 KB

hive-installation.md

File metadata and controls

329 lines (251 loc) · 8.84 KB

Hive的安装

Hive 的安装过程通常包括以下前置步骤:

  • 已经安装 Java:Hive 需要 Java 运行环境,因此首先需要在系统上安装 Java 8。

  • 已经安装 Hadoop:Hive 需要在系统上安装 Hadoop。这一步上一单元已经完成了。。

以下是在已经安装好 Hadoop 的基础上,安装 Hive 的步骤:

  1. MySQL 安装:
sudo apt-get update  #更新软件源
sudo apt-get install mysql-server  #安装mysql

安装过程会提示设置mysql root用户的密码。

然后下载MySQL JDBC 驱动程序,也称为 MySQL Connector/J。你可以从 MySQL 的官方网站下载,或者使用 wget 在终端中下载。以下是使用 wget 下载的命令:

wget -c https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.23.zip

下载完成后,解压下载的 zip 文件:

unzip mysql-connector-java-8.0.23.zip

将解压后的 jar 文件复制到 Java 的扩展目录:

sudo cp mysql-connector-java-8.0.23/mysql-connector-java-8.0.23.jar /usr/share/java/
sudo cp mysql-connector-java-8.0.23/mysql-connector-java-8.0.23.jar  /usr/local/hive/lib/ 

以上步骤完成后,MySQL JDBC 驱动程序就安装完成了。

重置 MySQL 密码,你可以按照以下步骤操作:

首先止 MySQL 服务。在终端中输入以下命令:

sudo systemctl stop mysql

然后,你需要以不检查权限的方式启动 MySQL 服务。在终端中输入以下命令:

sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

接下来登录到 MySQL。在终端中输入以下命令:

mysql -u root

在 MySQL 命令行中,你需要刷新权限并设置新密码。输入以下命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'hadoop';
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'hadoop';

将 'hadoop' 替换为你想要设置的新密码。

最后,你需要退出 MySQL 并重启 MySQL 服务。在终端中输入以下命令:

quit
sudo systemctl start mysql

以上步骤完成后,MySQL 的 root 用户密码就被重置了。

然后启动并登陆mysql shell

sudo service mysql start #启动mysql服务
mysql -u root -p  #登陆shell界面

新建hive数据库。

mysql> create database hive;    #这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据

配置mysql允许hive接入:

CREATE USER 'hive'@'localhost';
# 创建一个名为hive的用户,并使其可以连接到localhost
ALTER USER 'hive'@'localhost' IDENTIFIED BY 'hive';
# 为hive用户设置密码为hive
GRANT ALL ON *.* TO 'hive'@'localhost';
mysql> flush privileges;  #刷新mysql系统权限关系表
  1. 下载 Hive:可以从 Apache Hive 的官方网站下载最新的 Hive 发行版:
wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-4.0.0/apache-hive-4.0.0-bin.tar.gz
  1. 解压 Hive:使用 tar 命令解压下载的文件:
tar xzf apache-hive-4.0.0-bin.tar.gz
sudo mv apache-hive-4.0.0-bin /usr/local/hive
  1. 配置 Hive:需要先创建hive-default.xml文件,然后编辑 Hive 的配置文件(hive-site.xml),设置 Hive 的运行模式(本地模式或 MapReduce 模式)和 Hive 数据的存储路径等。
cd /usr/local/hive/conf
cp hive-default.xml.template hive-site.xml
nano /usr/local/hive/conf/hive-site.xml

hive-site.xml中添加如下配置信息:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
    <name>hive.server2.authentication</name>
    <value>NONE</value>
    </property>
   <property>
     <name>hive.server2.thrift.bind.host</name>
     <value>0.0.0.0</value>
   </property>
   <property>
     <name>hive.server2.thrift.port</name>
     <value>10000</value>
   </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>
  1. 配置 Hive 环境变量:编辑 ~/.bashrc 文件,添加 Hive 的环境变量。你可以使用以下命令打开配置文件:
nano ~/.bashrc

然后,添加以下内容到文件末尾:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export PATH=/usr/local/hadoop/bin:$PATH
export PATH=/usr/local/hadoop/sbin:$PATH
export PATH=$PATH:/usr/local/hbase/bin
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

然后,运行以下命令使环境变量生效:

source ~/.bashrc
  1. 配置 Hadoop

编辑Hadoop的配置文件(core-site.xml),设置允许 hadoop 用户模拟 hive 用户。

nano /usr/local/hadoop/etc/hadoop/core-site.xml

Hadoop 的配置文件 core-site.xml 中添加以下配置:

<property>
  <name>hadoop.proxyuser.hadoop.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hadoop.groups</name>
  <value>*</value>
</property>

修改配置后,需要重启 Hadoop 和 Hive 服务。

stop-all.sh
start-all.sh
  1. Hadoop 创建路径
hadoop fs -mkdir -p /user/hive/warehouse/test_db.db
hadoop fs -chown -R hive:hadoop /user/hive/warehouse/test_db.db
hadoop fs -chmod -R 775 /user/hive/warehouse/test_db.db
hadoop fs -chown -R hive:hadoop /user/hive/warehouse
hadoop fs -chmod -R 775 /user/hive/warehouse

`

  1. 启动 Hive

先初始化!!!

schematool -dbType mysql -initSchema

要停止所有的 Hive 服务,你需要停止 Hive Metastore 服务和 HiveServer2 服务。这通常可以通过以下命令完成:

# 停止 Hive Metastore
pkill -f HiveMetaStore

# 停止 HiveServer2
pkill -f HiveServer2

这些命令会找到运行 Hive Metastore 和 HiveServer2 的进程,并发送 SIGTERM 信号来优雅地停止这些进程。如果这些进程没有响应 SIGTERM 信号,你可以使用 SIGKILL 信号强制停止这些进程,例如:

# 强制停止 Hive Metastore
pkill -9 -f HiveMetaStore

# 强制停止 HiveServer2
pkill -9 -f HiveServer2

在 Python 中使用 Hive,可以使用 pyhive 库。以下是一个简单的示例,展示如何连接到 Hive,执行查询,然后获取结果:

首先,要运行Hiveserver2。然后要确保已经安装了 pyhive 等依赖包。如果没有,可以使用 pip 安装:

hive --service hiveserver2 &
pip install pyhive thrift thrift_sasl --break-system-packages

然后,可以使用以下 Python 代码来操作 Hive:

from pyhive import hive

# 连接到 Hive
conn = hive.Connection(host='localhost', port=10000, username='hadoop')

# 创建一个 cursor
cursor = conn.cursor()

cursor.execute('''
    CREATE TABLE IF NOT EXISTS my_table (
        column1 STRING,
        column2 STRING,
        column3 STRING
    ) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE
''')

cursor.execute('''
    CREATE TABLE IF NOT EXISTS students (
        name STRING,
        major STRING,
        gender STRING
    ) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE
''')

cursor.execute('''
    INSERT INTO students (name, major, gender) 
    VALUES ('Tom', 'Computer Science', 'Male')
''')


# 获取所有表的名称
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()

for table in tables:
    table_name = table[0]
    print(f"Table Name: {table_name}")
    
    # 获取并打印表的结构
    cursor.execute(f"DESCRIBE {table_name}")
    schema = cursor.fetchall()
    for column in schema:
        print(column)        
    print("\n")

# 执行查询
cursor.execute('SELECT * FROM students')

# 获取结果
for result in cursor.fetchall():
    print(result)

请注意,这个示例假设 Hive 服务正在本地运行,并且监听的是默认的端口(10000)。如果 Hive 服务在其他地方运行,或者使用的是其他端口,需要在创建 hive.Connection 时提供正确的主机名和端口号。