大数据环境的安装与配置

大数据环境的安装与配置

Administrator 114 2025-02-27

在 Ubuntu 上安装大数据环境(Spark、Hadoop、HBase、Flume、Kafka、Zookeeper、MongoDB

会有点子复杂,慢慢来。

注意:

请根据你所使用的 shell 确定你用户配置文件的名称,常用 shell 与其配置文件的对应关系为:

  • bash:~/.bashrc

  • zsh:~/.zshrc

可通过echo $SHELL命令确定你当前系统所使用的 shell 类型

我使用的是 zsh ,故后续写入环境变量操作部分是写入到~/.zshrc中。

手动安装

一、apt / yum 换源

apt / yum 换源老生常谈,不再赘述。(记得先使用命令查看系统版本)

二、Java 8(JDK)

安装

Hadoop、Spark、HBase 等组件通常依赖 JDK 8,先完成 Java 的安装。

# 安装
sudo apt install openjdk-8-jdk -y                 # debian系
sudo yum install -y java-1.8.0-openjdk-devel      # Red Hat系

完成后使用java -version命令验证安装

配置环境变量

使用readlink -f $(which java)命令确认 Java 安装位置

使用以下命令将环境变量写入配置文件中,注意将命令中的路径替换为你实际的 Java 安装位置。

  • JAVA_HOME 变量应该指向 JDK 的根目录,而不是 bin/java 文件。通常,JAVA_HOME 应该是 jre/bin/java 目录的 上级目录,即:/usr/lib/jvm/java-8-openjdk-amd64

echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> ~/.zshrc
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.zshrc

三、安装 Zookeeper

安装

  1. 下载 Zookeeper

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
  1. 解压到 /usr/local/

# 解压到 /usr/local/ 并重命名
sudo tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/
sudo mv /usr/local/zookeeper-3.4.14 /usr/local/zookeeper
  1. 创建 zoo.cfg 配置文件

sudo cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
  1. 启动 Zookeeper

/usr/local/zookeeper/bin/zkServer.sh start

配置

使用以下命令编辑 Zookeeper 的配置文件。

nano /usr/local/zookeeper/conf/zoo.cfg

确保以下内容对应:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
  1. 创建数据目录并启动 Zookeeper

mkdir -p /usr/local/zookeeper/data
/usr/local/zookeeper/bin/zkServer.sh start
  1. 执行jps 命令,查看结果

看到 QuorumPeerMain 进程,说明 Zookeeper 已经成功运行

四、Hadoop

安装

  1. 下载 Hadoop

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
  1. 解压到 /usr/local/ 并设置环境变量

# 解压到 /usr/local/ 并重命名
sudo tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
# 设置环境变量
echo "export HADOOP_HOME=/usr/local/hadoop" >> ~/.zshrc
echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> ~/.zshrc

完成后使用命令hadoop version验证 Hadoop 的安装

配置

  1. 使用命令echo $JAVA_HOME 查看 Java 的安装目录并记录

image-jpfc.png

这里需要记录的结果是/usr/lib/jvm/java-8-openjdk-amd64

  1. 修改 hadoop-env.sh

使用命令sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh修改 hadoop 的环境配置文件。

按照如下说明修改。

# 在文件中找到export JAVA_HOME=...和export HADOOP_CONF_DIR=...两项
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64     # 前面输出的 JAVA_HOME 路径
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop    # 你的 HADOOP_HOME 值/etc/hadoop
# 注释掉以下内容
for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do
  if [ "$HADOOP_CLASSPATH" ]; then
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
  else
    export HADOOP_CLASSPATH=$f
  fi
done

修改完成后使用命令source $HADOOP_HOME/etc/hadoop/hadoop-env.sh应用修改。

如果忘记应用修改,会导致后面修改 hdfs-site.xml 时报错:

  1. 修改 core-site.xml

使用命令nano $HADOOP_HOME/etc/hadoop/core-site.xml修改 hadoop 的核心配置文件

确保文件中有以下配置

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://localhost:9000</value>
	</property>
</configuration>
  1. 修改 hdfs-site.xml

使用命令nano $HADOOP_HOME/etc/hadoop/修改 hdfs 的配置文件

检查文件的以下配置

<configuration>
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>localhost:50090</value>
	</property>
	<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/tmp/dfs/name</value>
    </property>
	<property>
        <name>dfs.replication</name>
        <value>1</value>  <!-- 单机测试可设为 1,生产环境建议 3 -->
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/tmp/dfs/data</value>  <!-- 指定 DataNode 存储路径 -->
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>localhost:50070</value>  <!-- NameNode Web 界面地址 -->
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>  <!-- 开发环境可禁用权限检查 -->
    </property>
</configuration>
配置本机 ssh 免密登录

Hadoop 采用 SSH 远程管理节点(即使是单机模式)

  • 在默认环境下,哪怕是自连的 SSH 连接(ssh user@localhost)也会被要求手动输入密码。

  • 虽然 Namenode、Datanode 和 Secondary Namenode 都在 localhost 运行,但 start-dfs.sh 仍然尝试以 SSH 连接它们。

使用以下命令完成 ssh 免密登录的配置

ssh-keygen -t ed25519 -C "" # 输入这条命令后一直回车即可, -C 后的双引号可以填上自己的邮箱方便将生成的密钥对作他用
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

格式化 NameNode

如果之前的配置文件修改有误或者没有启动 NameNode ,在运行 hdfs 命令时会出现以下报错,需要在启动 NameNode 后格式化 NameNode 。

执行以下命令即可

hdfs namenode -format

完成后依次执行以下命令:

  • start-dfs.sh

  • jps

如下图,有 NameNode 就完成了

之后再执行 hdfs 命令就可以正常操作了

五、安装 HBase

安装

  1. 下载 HBase

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.13/hbase-1.4.13-bin.tar.gz
  1. 解压到 /usr/local/ 并设置环境变量

# 解压到 /usr/local/ 并重命名
sudo tar -zxvf hbase-1.4.13-bin.tar.gz -C /usr/local/
sudo mv /usr/local/hbase-1.4.13 /usr/local/hbase
# 设置环境变量
echo "export HBASE_HOME=/usr/local/hbase" >> ~/.zshrc
echo "export PATH=\$PATH:\$HBASE_HOME/bin" >> ~/.zshrc

完成后使用命令hbase version验证 Spark 的安装

配置

  1. 修改 HBase 配置文件 hbase-site.xml 。

命令:vim $HBASE_HOME/conf/hbase-site.xml

检查文件中是否有以下内容,若没有手动添加。

配置的意义为:

  • 启动 HBase Web UI 在 16010 端口。

  • 让 HBase 使用外部运行在 2181 端口的 Zookeeper 。

  • 让 HBase 不启动自己内置的 Zookeeper 。

<configuration>
	<property>
		<name>hbase.master.info.port</name>
		<value>16010</value>
	</property>
	<property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>  <!-- 指向你的 ZooKeeper 地址 -->
    </property>
	<property>
		<name>hbase.zookeeper.property.clientPort</name>
		<value>2181</value>  <!-- 使用外部 ZooKeeper 的端口 -->
	</property>
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
	<property>
        <name>HBASE_MANAGES_ZK</name>
        <value>false</value>  <!-- 关闭内置 ZooKeeper -->
    </property>
</configuration>
  1. 修改HBase环境文件hbase-env.sh。

命令:vim $HBASE_HOME/conf/hbase-env.sh

作以下修改:

# 先弄清楚你自己的JAVA_HOME,然后设置好文件中的JAVA_HOME
export JAVA_HOME=#这里写上你之前装好Java之后设置的JAVA_HOME

# 如果你使用的是Java 8或以上的版本,需要注释掉原来的HBASE_MASTER_OPTS和HBASE_RESIONSERVER_OPTS,然后重新写
# 这样做的原因是Java 8已经弃用了被注释掉的内存管理方式
#export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
#export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:ReservedCodeCacheSize=256m"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:ReservedCodeCacheSize=256m"

# 如果你的HBase使用外部ZooKeeper,需要另添一行
export HBASE_MANAGES_ZK=false
  1. 在HDFS中初始化Hbase的目录并赋权

hdfs dfs -mkdir -p /hbase
hdfs dfs -chown -R hbase:hbase /hbase 
hdfs dfs -chmod -R 755 /hbase 
hdfs dfs -setrep -w 1 /hbase/hbase.version
  1. 启动 HBase 。

命令:start-hbase.sh

成功运行后使用浏览器访问localhost:16010,出现以下界面说明 HBase Web UI 已经成功运行。

六、安装 Kafka

  1. 下载 Kafka

wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.10.2.2/kafka_2.11-0.10.2.2.tgz
  1. 解压到 /usr/local/

# 解压到 /usr/local/ 并重命名
sudo tar -zxvf kafka_2.11-0.10.2.2.tgz -C /usr/local/
sudo mv /usr/local/kafka_2.11-0.10.2.2 /usr/local/kafka
  1. 启动 Kafka

停止 Kafka 脚本(如有需要): /usr/local/kafka/bin/kafka-server-stop.sh

sudo /usr/local/kafka/bin/zookeeper-server-start.sh -daemon /usr/local/kafka/config/zookeeper.properties
sudo /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
  1. 检查 Kafka 启动状态

命令:jps

  • NameNode/DataNode/SecondaryNameNode:Hadoop

  • HMaster/HRegionServer:HBase

  • QuorumPeerMain:Zookeeper

  • Kafka:Kafka

七、安装 Flume

Flume 用于将数据从外部系统(如文件、日志等)收集到 Kafka 或 HBase。

安装

  1. 下载 HBase

wget https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
  1. 解压到 /usr/local/ 并设置环境变量

# 解压到 /usr/local/ 并重命名
sudo tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /usr/local/
sudo mv /usr/local/apache-flume-1.9.0-bin /usr/local/flume
# 设置环境变量
echo "export FLUME_HOME=/usr/local/flume" >> ~/.zshrc
echo "export PATH=\$PATH:\$FLUME_HOME/bin" >> ~/.zshrc

配置

  1. 首先配置 Flume 的 agent 来将数据发送到 Kafka 。编辑Flume配置文件

nano /usr/local/flume/conf/flume.conf

配置以下内容:

agent.sources = src
agent.channels = ch
agent.sinks = sink

agent.sources.src.type = exec
agent.sources.src.command = tail -f /var/log/syslog

agent.channels.ch.type = memory
agent.channels.ch.capacity = 1000
agent.channels.ch.transactionCapacity = 100

agent.sinks.sink.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.sink.topic = test-topic
agent.sinks.sink.brokerList = localhost:9092
agent.sinks.sink.channel = ch

启动 Flume

启动 Flume agent,命令如下:

sudo /usr/local/flume/bin/flume-ng agent --conf /usr/local/flume/conf --conf-file /usr/local/flume/conf/flume.conf --name agent

验证 Flume 数据流向 Kafka

可以用 Kafka 的消费者命令验证 Flume 是否把数据成功写入 Kafka:

/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning

八、安装 Spark

安装

  1. 下载 Spark

wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
  1. 解压到 /usr/local/ 并设置环境变量

# 解压到 /usr/local/ 并重命名
sudo tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /usr/local/
sudo mv /usr/local/spark-2.4.0-bin-hadoop2.7 /usr/local/spark
# 设置环境变量
echo "export SPARK_HOME=/usr/local/spark" >> ~/.zshrc
echo "export SPARK_CONF_DIR=$SPARK_HOME/conf" >> ~/.zshrc
echo "export PATH=\$PATH:\$SPARK_HOME/bin:\$SPARK_HOME/sbin" >> ~/.zshrc

完成后使用命令spark-shell验证 Spark 的安装

配置

  1. 配置 spark-defaults.conf

$SPARK_HOME/conf 目录中包含 spark-defaults.conf.template 文件,需要复制它并进行修改:

cd $SPARK_HOME/conf
cp spark-defaults.conf.template spark-defaults.conf

在 spark-defaults.conf 中添加以下配置来与 Kafka 和 Hadoop 集成:

  • 配置 Spark 与 Hadoop 集成

# Hadoop 配置
spark.hadoop.fs.defaultFS=hdfs://namenode_host:8020
spark.hadoop.yarn.resourcemanager.address=resourcemanager_host:8032
spark.hadoop.yarn.application.classpath=/usr/local/hadoop/etc/hadoop/*:/usr/local/hadoop/share/hadoop/*:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*
  • 配置 Spark 与 Kafka 集成

# Kafka 配置
spark.kafka.bootstrap.servers=localhost:9092
spark.kafka.consumer.group.id=spark-consumer
1. 配置 log4j.properties(可选)

为了更好的日志记录,你可以在 $SPARK_HOME/conf 中配置 log4j.properties,复制模板文件:

cp log4j.properties.template log4j.properties

然后,你可以调整日志级别,例如:

log4j.rootCategory=INFO, console
2. 配置 Spark 与 Zookeeper 集成(如果需要)

如果你想要使用 Spark Streaming 并与 Kafka 集成,你还需要确保 Spark 能连接到 Zookeeper。一般情况下,Kafka 使用 Zookeeper 来协调和管理消息队列的状态。你可以在 spark-defaults.conf 中添加以下配置:

# 配置 Kafka 使用的 Zookeeper
spark.streaming.kafka.maxRatePerPartition=1000
spark.streaming.kafka.consumer.cache.size=100

 启动 Spark 服务

完成配置后,你可以启动 Spark:

  • 启动 Spark Master:

$SPARK_HOME/sbin/start-master.sh
  • 启动 Spark Worker:

$SPARK_HOME/sbin/start-worker.sh spark://<master-ip>:7077

提交 Spark 应用程序

配置完成后,你可以提交 Spark 应用程序来测试集成。例如,提交一个与 Kafka 集成的 Spark Streaming 应用:

$SPARK_HOME/bin/spark-submit \
  --class com.example.KafkaSparkStreaming \
  --master spark://<master-ip>:7077 \
  --conf spark.kafka.bootstrap.servers=localhost:9092 \
  --conf spark.kafka.consumer.group.id=spark-consumer \
  /path/to/your/spark-kafka-streaming-app.jar

检查 Spark 任务

你可以通过 Spark Web UI 来检查任务的状态,通常可以通过浏览器访问 http://<master-ip>:8080。

脚本一键安装

不包含自动配置,后续添加

sudo apt install openjdk-8-jdk -y
echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> ~/.zshrc
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.zshrc

# hadoop
sudo tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
echo "export HADOOP_HOME=/usr/local/hadoop" >> ~/.zshrc
echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> ~/.zshrc

# spark
sudo tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /usr/local/
sudo mv /usr/local/spark-2.4.0-bin-hadoop2.7 /usr/local/spark
echo "export SPARK_HOME=/usr/local/spark" >> ~/.zshrc
echo "export PATH=\$PATH:\$SPARK_HOME/bin:\$SPARK_HOME/sbin" >> ~/.zshrc

# hbase
sudo tar -zxvf hbase-1.4.13-bin.tar.gz -C /usr/local/
sudo mv /usr/local/hbase-1.4.13 /usr/local/hbase
echo "export HBASE_HOME=/usr/local/hbase" >> ~/.zshrc
echo "export PATH=\$PATH:\$HBASE_HOME/bin" >> ~/.zshrc

# zookeeper
sudo tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/
sudo mv /usr/local/zookeeper-3.4.14 /usr/local/zookeeper
sudo cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
sudo /usr/local/zookeeper/bin/zkServer.sh start

# kafka
sudo tar -zxvf kafka_2.11-0.10.2.2.tgz -C /usr/local/
sudo mv /usr/local/kafka_2.11-0.10.2.2 /usr/local/kafka
sudo /usr/local/kafka/bin/zookeeper-server-start.sh -daemon /usr/local/kafka/config/zookeeper.properties
sudo /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

# flume
sudo tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /usr/local/
sudo mv /usr/local/apache-flume-1.9.0-bin /usr/local/flume
echo "export FLUME_HOME=/usr/local/flume" >> ~/.zshrc
echo "export PATH=\$PATH:\$FLUME_HOME/bin" >> ~/.zshrc

大数据组件启动顺序