Hadoop Spark 安装

本文档详细介绍了在三台虚拟机(hadoop001, hadoop002, hadoop003)上安装配置Hadoop和Spark的步骤。包括JDK的安装、节点间免密和SELINUX关闭、Hadoop的下载、配置及启动,以及Spark的下载、解压、配置和启动。特别提醒注意JDK版本必须为JDK8,否则可能导致YARN运行错误。同时,文中列举了安装过程中可能遇到的问题及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop Spark 安装

环境准备:

虚拟机信息:

192.168.2.201 hadoop001

192.168.2.202 hadoop002

192.168.2.203 hadoop003

1、安装JDK(注意下面的tips,安装命令懒得改了)

所有节点执行,安装包下载地址:

https://www.oracle.com/java/technologies/downloads/

安装命令

mkdir -p /usr/java
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/java/

在 /etc/profile中添加如下代码,并执行source /etc/profile生效

export JAVA_HOME=/usr/java/jdk-17
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

2、节点之间免密与关闭selinux

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003

关闭selinux

sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
reboot

3、安装Hadoop

1.下载Hadoop

下载地址:

https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

解压:

tar -zxvf hadoop-3.3.1.tar.gz  -C /usr/local/

配置环境变量并 source /etc/profile 立刻生效:

export HADOOP_HOME=/usr/local/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME:/sbin

以上在所有节点执行

2.在master节点进行hadoop相关配置

配置文件在解压路径下etc文件夹内 /usr/local/hadoop-3.3.1/etc/hadoop

hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_301
export HDFS_SECONDARYNAMENODE_USER=root
export HADOOP_SHELL_EXECNAME=root
export HDFS_DATANODE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

core-site.xml

<configuration>
    <property>
        <!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:9000</value>
    </property>
    <property>
        <!--指定 hadoop 集群存储临时文件的目录-->
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop001:50090</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔-->
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/namenode/data</value>
    <final>true</final>
  </property>
  <property>
    <!--datanode 节点数据(即数据块)的存放位置-->
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/datanode/data</value>
    <final>true</final>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
  </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <!--指定 mapreduce 作业运行在 yarn 上-->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
   <property>
       <name>mapreduce.jobhistory.address</name>
       <value>master:10020</value>
   </property>
   <property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>master:19888</value>
   </property>
   <property>
       <name>mapreduce.application.classpath</name>
       <value>
           /usr/local/hadoop-3.3.1/etc/hadoop,
           /usr/local/hadoop-3.3.1/share/hadoop/common/*,
           /usr/local/hadoop-3.3.1/share/hadoop/common/lib/*,
           /usr/local/hadoop-3.3.1/share/hadoop/hdfs/*,
           /usr/local/hadoop-3.3.1/share/hadoop/hdfs/lib/*,
           /usr/local/hadoop-3.3.1/share/hadoop/mapreduce/*,
           /usr/local/hadoop-3.3.1/share/hadoop/mapreduce/lib/*,
           /usr/local/hadoop-3.3.1/share/hadoop/yarn/*,
           /usr/local/hadoop-3.3.1/share/hadoop/yarn/lib/*
       </value>
   </property>
</configuration>

yarn-site.xml

<configuration>
    <property>
        <!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop001:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop001:8030</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop001:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoop001:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop001:8088</value>
    </property>
</configuration>

workers

hadoop001
hadoop002
hadoop003
3.格式化namenode
hdfs namenode -format
4.启动hadoop

在sbin下执行

./start-all.sh
tips:
深坑1: jdk版本只能是jdk8,jdk8 目前已经为商业版。

否则yarn会出现如下报错

2021-09-28 09:06:08,285 ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManager
java.lang.ExceptionInInitializerError
	at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:67)
	at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:72)
	at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
	at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:216)
	at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:64)
	at com.google.inject.internal.BytecodeGen.newFastClass(BytecodeGen.java:204)
	at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.<init>(ProviderMethod.java:256)
	at com.google.inject.internal.ProviderMethod.create(ProviderMethod.java:71)
	at com.google.inject.internal.ProviderMethodsModule.createProviderMethod(ProviderMethodsModule.java:275)
	at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144)
	at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:123)
	at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
	at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349)
	at com.google.inject.AbstractModule.install(AbstractModule.java:122)
	at com.google.inject.servlet.ServletModule.configure(ServletModule.java:52)
	at com.google.inject.AbstractModule.configure(AbstractModule.java:62)
	at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
	at com.google.inject.spi.Elements.getElements(Elements.java:110)
	at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
	at com.google.inject.Guice.createInjector(Guice.java:96)
	at com.google.inject.Guice.createInjector(Guice.java:73)
	at com.google.inject.Guice.createInjector(Guice.java:62)
	at org.apache.hadoop.yarn.webapp.WebApps$Builder.build(WebApps.java:417)
	at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:465)
	at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:1389)
	at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1498)
	at org.apache.hadoop.service.AbstractService.start(AbstractService.java:194)
	at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1699)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @46d21ee0
深坑2:

hdfs namenode -format后环境起不来,需要清理下datanode下的文件,是否对存储的数据有影响,还需要测试

深坑3:

3.x版本后,访问namenode节点的端口为9870

yarn管理页面为 http://namenodeip:8088/cluster

深坑4:

hdfs-site.xml 中路径要加file:/ 否则上传文件会出现

hadoop fs -ls /
ls: Call From 127.0.1.1 to 0.0.0.0:9000 failed on connection exception: 
java.net.ConnectException: 拒绝连接; 
For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

查看日志报错如下:
2021-09-28 09:59:31,621 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /home/hadoop/namenode/data is in an inconsistent state: storage directory does not exist or is not accessible.

4、安装Spark

1. 下载对应版本spark

https://spark.apache.org/downloads.html

2、上传并解压到自指定路径下
tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz

mv spark-3.1.2-bin-hadoop3.2 /usr/local/spark-3.1.2
3、修改/etc/profile并生效
export SPARK_HOME=/usr/local/spark-3.1.2
export PATH=$PATH:$SPARK_HOME:/bin:$SPARK_HOME:/sbin
4、配置配置文件

/usr/local/spark-3.1.2/conf

spark-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_301
export HADOOP_CONF_DIR=/usr/local/hadoop-3.3.1/etc/hadoop
export SPARK_MASTER_HOST=hadoop001
export SPARK_LOCAL_DIRS=/usr/local/spark-3.1.2

workers

hadoop001
hadoop002
hadoop003
5、将spark分发给其他节点
6、启动spark

sbin下执行
./start-all.sh

tips
深坑1:

workers中记得要删除原来的localhost,否则会出现无法启动spark的现象

<think>嗯,用户问的是HadoopSpark安装方法。首先,我需要确定用户对这两个系统的了解程度。Hadoop是一个分布式计算框架,主要用于处理大数据,而Spark则是基于内存的计算框架,速度更快,通常与Hadoop结合使用。可能用户是在搭建大数据处理环境,所以需要安装这两个工具。 接下来,我得考虑用户的操作系统环境,常见的可能是Linux,比如Ubuntu或者CentOS。不过用户也可能用Mac或Windows,但Hadoop在非Linux系统上可能需要更多配置,比如使用虚拟机或者Docker。所以最好先给出Linux的安装步骤,再提及其他系统的注意事项。 安装Hadoop通常需要先安装Java,因为Hadoop是基于Java开发的。所以步骤可能包括安装JDK,配置环境变量,下载Hadoop,修改配置文件,设置SSH免密登录,然后格式化HDFS并启动集群。需要详细说明每个步骤的具体命令和配置文件的修改内容,比如core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml。 然后是Spark安装Spark依赖Scala,但官网的预编译版本可能已经包含了,所以用户可以直接下载Spark并解压。同样需要配置环境变量,设置spark-env.sh,并确保Hadoop的配置正确。启动Spark的话,可以通过spark-shell来测试。 用户可能遇到的问题包括Java版本不兼容、SSH配置失败、端口冲突或者配置文件错误。需要提醒用户检查这些点,并给出测试方法,比如运行jps查看进程,或者运行示例程序验证安装。 另外,用户可能不太清楚HadoopSpark的关系,是否需要先装Hadoop再装Spark?实际上Spark可以独立运行,但集成Hadoop的话可以利用HDFS和YARN资源管理。所以需要说明Spark的Standalone模式以及与Hadoop集成的模式。 可能还需要提到使用包管理工具如APT或YUM来简化安装,但可能版本较旧,建议从官网下载最新版本。同时,安全方面需要设置防火墙规则,开放必要的端口。 最后,用户可能需要快速开始的示例,比如创建HDFS目录、上传文件、运行WordCount,或者用Spark的shell做简单计算。这样用户安装后可以立即测试,确认是否成功。 总结下来,安装步骤需要分HadoopSpark两部分,分别详细说明,注意依赖关系和配置,以及常见问题的解决方法。同时,考虑到用户可能是新手,命令和配置示例要具体,避免使用过于专业的术语,或者至少给出解释。</think>以下是 HadoopSpark安装步骤简介,适用于 Linux 系统(如 Ubuntu/CentOS): -- ### **一、Hadoop 安装** #### 1. 环境准备 - **Java JDK**:Hadoop 依赖 Java,需安装 JDK 8 或更高版本。 ```bash sudo apt-get install openjdk-8-jdk # Ubuntu yum install java-1.8.0-openjdk-devel # CentOS ``` - **配置环境变量**: 在 `~/.bashrc` 中添加: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 根据实际路径修改 export PATH=$JAVA_HOME/bin:$PATH ``` #### 2. 下载并解压 Hadoop - 从官网下载 Hadoop(如 3.x 版本): ```bash wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -xzvf hadoop-3.3.6.tar.gz mv hadoop-3.3.6 /usr/local/hadoop ``` - **配置环境变量**: 在 `~/.bashrc` 中添加: ```bash export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH ``` 执行 `source ~/.bashrc` 使配置生效。 #### 3. 配置 Hadoop - **核心配置文件**(路径:`$HADOOP_HOME/etc/hadoop/`): - **core-site.xml**(HDFS 地址): ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> ``` - **hdfs-site.xml**(副本数配置): ```xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> ``` - **mapred-site.xml**(MapReduce 配置): ```xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> ``` - **yarn-site.xml**(YARN 配置): ```xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> ``` #### 4. 启动 Hadoop - **格式化 HDFS**(仅首次): ```bash hdfs namenode -format ``` - **启动 HDFS 和 YARN**: ```bash start-dfs.sh start-yarn.sh ``` - **验证**: - 访问 `http://localhost:9870` 查看 HDFS 状态。 - 运行 `jps` 检查进程(应有 `NameNode`, `DataNode`, `ResourceManager` 等)。 --- ### **二、Spark 安装** #### 1. 下载并解压 Spark - 从官网下载预编译版本(如 3.x,选择与 Hadoop 兼容的版本): ```bash wget https://downloads.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz tar -xzvf spark-3.5.0-bin-hadoop3.tgz mv spark-3.5.0-bin-hadoop3 /usr/local/spark ``` - **配置环境变量**: 在 `~/.bashrc` 中添加: ```bash export SPARK_HOME=/usr/local/spark export PATH=$SPARK_HOME/bin:$PATH ``` 执行 `source ~/.bashrc` 使配置生效。 #### 2. 配置 Spark - **复制 Hadoop 配置**: 确保 `HADOOP_CONF_DIR` 指向 Hadoop 的配置文件路径: ```bash export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop ``` - **Spark 配置文件**(可选): 修改 `$SPARK_HOME/conf/spark-env.sh`: ```bash cp spark-env.sh.template spark-env.sh echo "export JAVA_HOME=$JAVA_HOME" >> spark-env.sh ``` #### 3. 启动 Spark - **Standalone 模式**: ```bash $SPARK_HOME/sbin/start-master.sh $SPARK_HOME/sbin/start-worker.sh spark://localhost:7077 ``` - **验证**: - 访问 `http://localhost:8080` 查看 Spark 集群状态。 - 运行 `spark-shell` 进入交互式环境。 --- ### **三、常见问题** 1. **端口冲突**:确保 9000(HDFS)、8080(Spark Web UI)等端口未被占用。 2. **SSH 免密登录**:Hadoop 需配置 SSH 本地免密登录: ```bash ssh-t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ``` 3. **权限问题**:若遇到 HDFS 权限错误,可临时关闭权限检查: ```bash hdfs dfsadmin -safemode leave ``` --- ### **四、快速验证** - **Hadoop**:运行 WordCount 示例: ```bash hdfs dfs -mkdir /input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output ``` - **Spark**:在 `spark-shell` 中运行: ```scala val textFile = sc.textFile("hdfs://localhost:9000/input/*.xml") val counts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) counts.saveAsTextFile("hdfs://localhost:9000/spark-output") ``` --- 以上为单机伪分布式安装步骤,生产环境需配置多节点集群并调整参数(如内存、副本数等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值