2025年3月大数据栈安装实践

2025年3月5日 作者 unix2go

客观说,我不喜欢Apache大数据栈那一堆生态的发展。主要是经常变动,升级快,各个组件之间,还有兼容性问题。最近我重新配了台开发环境,系统仍然使用ubuntu 22.04。没有使用24.04的原因,还是担心系统太新,遇到问题得不到社区支持。

除了ubuntu外,其他大数据栈的版本如下:

  • Hadoop-3.3.6
  • Spark-3.4.4
  • Hive-4.0.1

还有Hbase, Kafka那些没有安装。上述主要变化是hive升级到了4.0版本。这个版本对java 11兼容性更好,否则在此之前的版本,就要使用java 8。Hive和Hadoop的版本需要兼容,以下是一些常见的兼容性组合:

Hadoop 版本推荐的 Hive 版本支持的 Java 版本
2.xHive 2.x, 3.xJava 8
3.1.xHive 3.xJava 8
3.2.xHive 3.xJava 8/Java 11
3.3.xHive 4.xJava 11
3.4.xHive 4.xJava 11

确保你的 Hadoop、Hive 、Java版本匹配。

Hadoop的配置文件如下:

hadoop-env.sh
----
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

hdfs-site.xml
----
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///opt/hadoop/hdfs/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///opt/hadoop/hdfs/datanode</value>
    </property>

</configuration>

core-site.xml
----
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

当然,上述配置文件里的几个目录,需要预先创建,并设置好权限。

Hive的配置文件如下:

hive-site.xml
----
<configuration>
    <!-- 配置 Hive 元存储 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hiveuser</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hivepassword</value>
  </property>

    <!-- 配置 Hadoop 集成 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>Location of default database for the warehouse</description>
    </property>

    <property>
        <name>hive.exec.scratchdir</name>
        <value>/tmp/hive</value>
        <description>Temporary directory for Hive jobs</description>
    </property>


    <!-- HiveServer2 服务端口 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
        <description>HiveServer2 listening port</description>
    </property>

    <property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
    </property>

</configuration>

上述配置文件里的两个目录:

  • /user/hive/warehouse
  • /tmp/hive

不是指的本地目录,而是hdfs的目录。因此需要在hdfs上预先创建它们,并设置好权限。

hdfs namenode -format
start-dfs.sh

hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /tmp/hive
hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -chmod -R 777 /tmp/hive

spark本来就没什么配置的,略过不表。感兴趣的同学可以看我写的书,使用spark和scala大数据开发

java统一使用java 11,不再用java 8了。如下命令安装java 11:

sudo apt install openjdk-11-jdk -y

如下是操作系统的环境变量设置:

# Hadoop environment variables
export HADOOP_HOME=/opt/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")

# Spark environment variables
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

# Hive environment variables
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin

alias beeline='/opt/hive/bin/beeline -u "jdbc:hive2://localhost:10000/default" -n pyh -p ""'

hive使用mysql来存储metadata,所以还要在mysql里创建一个数据库:

CREATE DATABASE hive;
CREATE USER 'hiveuser'@'localhost' IDENTIFIED BY 'hivepassword';
GRANT ALL PRIVILEGES ON hive.* TO 'hiveuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

下载MySQL JDBC驱动并放置在hive目录里:

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.34.tar.gz
tar -xvzf mysql-connector-java-8.0.34.tar.gz
cp mysql-connector-java-8.0.34/mysql-connector-java-8.0.34.jar $HIVE_HOME/lib/

初始化hive的元数据存储:

schematool -initSchema -dbType mysql

安装和配置完后,统一启动的服务如下:

start-dfs.sh  # hadoop
start-yarn.sh # hadoop
start-master.sh # spark
start-worker.sh # spark
nohup hive --service hiveserver2 &  # hive

查询hive的话,在hive 4.0里,只能用beeline了。输入命令类似如下。

$ beeline 
Connecting to jdbc:hive2://localhost:10000/default
Connected to: Apache Hive (version 4.0.1)
Driver: Hive JDBC (version 4.0.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 4.0.1 by Apache Hive

0: jdbc:hive2://localhost:10000/default> set hive.server2.logging.operation.level=NONE;
No rows affected (0.097 seconds)

0: jdbc:hive2://localhost:10000/default> select count(*) as dd from books where lang.eng=0;
+-------+
|  dd   |
+-------+
| 3333  |
+-------+
1 row selected (5.031 seconds)

0: jdbc:hive2://localhost:10000/default> desc books;
+-----------+--------------------------+----------+
| col_name  |        data_type         | comment  |
+-----------+--------------------------+----------+
| id        | int                      |          |
| name      | string                   |          |
| lang      | struct<eng:int,chn:int>  |          |
| types     | array<string>            |          |
| price     | float                    |          |
+-----------+--------------------------+----------+
5 rows selected (0.278 seconds)

到了这一步,在ubuntu 22.04上,一个截止2025年3月的大数据开发环境就配置好了。