2025年3月大数据栈安装实践
2025年3月5日客观说,我不喜欢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.x | Hive 2.x, 3.x | Java 8 |
3.1.x | Hive 3.x | Java 8 |
3.2.x | Hive 3.x | Java 8/Java 11 |
3.3.x | Hive 4.x | Java 11 |
3.4.x | Hive 4.x | Java 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月的大数据开发环境就配置好了。