Spark和Hadoop的安装

安装

在Ubuntu中安装Hadoop、Spark和JDK需要一系列步骤。以下是一个详细的指南,帮助你在Ubuntu系统上完成安装。假设你使用的是Ubuntu 20.04或类似版本,并且有sudo权限。


1. 安装JDK(Java Development Kit)

Hadoop和Spark都依赖Java,因此需要先安装JDK。

步骤:

  1. 更新包列表

    1
    sudo apt update
  2. 安装OpenJDK(推荐版本为JDK 11)

    1
    sudo apt install openjdk-11-jdk -y
  3. 验证Java安装

    1
    java -version

    输出类似以下内容表示安装成功:

    1
    openjdk 11.0.15 2022-04-19
  4. 设置JAVA_HOME环境变量

    • 找到JDK安装路径:

      1
      update-java-alternatives -l

      输出示例:

      1
      /usr/lib/jvm/java-11-openjdk-amd64
    • 编辑

      ~/.bashrc文件

      1
      nano ~/.bashrc

      在文件末尾添加:

      1
      2
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 
      export PATH=$PATH:$JAVA_HOME/bin
    • 应用更改:

      1
      source ~/.bashrc
    • 验证:

      1
      echo $JAVA_HOME

2. 安装Hadoop

Hadoop是一个分布式文件系统和计算框架。

步骤:

  1. 下载Hadoop

    访问Hadoop官网,选择一个稳定版本(例如3.3.6)。用以下命令下载:

    1
    wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
  2. 解压文件

    1
    tar -xzf hadoop-3.3.6.tar.gz sudo mv hadoop-3.3.6 /usr/local/hadoop
  3. 配置环境变量

    • 编辑

      ~/.bashrc

      1
      nano ~/.bashrc

      添加以下内容:

      1
      2
      export HADOOP_HOME=/usr/local/hadoop 
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    • 应用更改:

      1
      source ~/.bashrc
  4. 配置Hadoop

    • 编辑

      $HADOOP_HOME/etc/hadoop/hadoop-env.sh

      1
      nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

      添加或修改:

      1
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    • 配置核心文件(根据需要调整,例如单机模式):

      • core-site.xml($HADOOP_HOME/etc/hadoop/):

        1
        2
        cd $HADOOP_HOME/etc/hadoop/
        nano core-site.xml
        1
        2
        3
        4
        5
        6
        <configuration>    
        <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
        </property>
        </configuration>
      • hdfs-site.xml

        1
        2
        3
        4
        5
        6
        <configuration>   
        <property>
        <name>dfs.replication</name>
        <value>1</value>
        </property>
        </configuration>
  5. 设置SSH(Hadoop需要无密码登录)

    1
    2
    sudo apt install openssh-server -y ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
    ssh localhost
  6. 格式化HDFS

    1
    hdfs namenode -format
  7. 启动Hadoop

    1
    2
    start-dfs.sh 
    start-yarn.sh
  8. 验证安装

    1
    hdfs dfs -ls / jps

    你应该看到类似

    NameNode、DataNode、ResourceManager等进程。


3. 安装Spark

Spark是一个快速的大数据处理框架。

步骤:

  1. 下载Spark

    访问Spark官网,选择一个版本(例如3.5.0,预编译版带Hadoop支持):

    1
    wget https://downloads.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
  2. 解压文件

    1
    tar -xzf spark-3.5.0-bin-hadoop3.tgz sudo mv spark-3.5.0-bin-hadoop3 /usr/local/spark
  3. 配置环境变量

    • 编辑~/.bashrc:

      1
      nano ~/.bashrc

      添加:

      1
      export SPARK_HOME=/usr/local/spark export PATH=$PATH:$SPARK_HOME/bin
    • 应用更改:

      1
      source ~/.bashrc
  4. 验证安装

    1
    spark-shell

    如果成功,会进入Spark交互 shell,显示类似:

    Spark context available as 'sc'

  5. (可选)配置Spark与Hadoop集成

    • 如果需要使用HDFS,编辑

      $SPARK_HOME/conf/spark-env.sh

      1
      2
      cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh 
      nano $SPARK_HOME/conf/spark-env.sh

添加:

1
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

4. 测试安装

  • Hadoop测试

    1
    hdfs dfs -mkdir /test hdfs dfs -put /path/to/local/file /test
  • Spark测试

    在spark-shell中运行:

    1
    val data = sc.parallelize(1 to 1000) data.count()

注意事项

  • 防火墙:确保端口(如9000、9870)未被防火墙阻挡,或者关闭防火墙:

    1
    sudo ufw disable
  • 权限问题:如果遇到权限错误,使用sudo chmod -R 755调整目录权限。

  • 依赖冲突:确保Hadoop和Spark的版本兼容(例如Hadoop 3.3.x与Spark 3.5.x兼容)。

操作

前提条件

  1. 确保HDFS已启动:

    1
    2
    start-dfs.sh 
    start-yarn.sh
  2. 检查服务是否正常运行:

    1
    jps

    应看到 NameNode、DataNode、ResourceManager 和 NodeManager 等进程。

  3. 如果HDFS未正常运行,请参考之前的建议修复。


任务实现

(1)启动Hadoop,在HDFS中创建用户目录“/user/hadoop”

  • 启动Hadoop(如果尚未启动):

    1
    start-dfs.sh start-yarn.sh
  • 在HDFS中创建用户目录“/user/hadoop”

    1
    hdfs dfs -mkdir -p /user/hadoop
    • -mkdir:创建目录。
    • -p:递归创建父目录(如果需要)。
  • 验证

    1
    hdfs dfs -ls /user

    输出应显示 hadoop 目录。


(2)在Linux本地文件系统“/home/hadoop”下创建test.txt并上传到HDFS

  • 创建本地目录和文件

    1
    mkdir -p /home/hadoop echo "这是一个测试文件,Hello Hadoop!" > /home/hadoop/test.txt
    • mkdir -p:创建目录(如果不存在)。
    • echo:向 test.txt 输入内容。
  • 验证本地文件

    1
    cat /home/hadoop/test.txt
  • 上传到HDFS的“/user/hadoop”目录

    1
    hdfs dfs -put /home/hadoop/test.txt /user/hadoop/
  • 验证上传

    1
    hdfs dfs -ls /user/hadoop

    输出应显示 test.txt。


(3)将HDFS中的test.txt下载到Linux本地“/home/hadoop/下载”目录

  • 创建本地下载目录

    1
    mkdir -p /home/hadoop/下载
  • 下载文件

    1
    hdfs dfs -get /user/hadoop/test.txt /home/hadoop/下载/
  • 验证下载

    1
    ls /home/hadoop/下载/ cat /home/hadoop/下载/test.txt

(4)将HDFS中“/user/hadoop/test.txt”的内容输出到终端

  • 显示文件内容

    1
    hdfs dfs -cat /user/hadoop/test.txt

    输出应为文件内容,例如:“这是一个测试文件,Hello Hadoop!”。


(5)在HDFS中创建子目录input并复制test.txt

  • 创建子目录“/user/hadoop/input”

    1
    hdfs dfs -mkdir /user/hadoop/input
  • 复制test.txt到input目录

    1
    hdfs dfs -cp /user/hadoop/test.txt /user/hadoop/input/
  • 验证

    1
    hdfs dfs -ls /user/hadoop/input

    输出应显示 test.txt。


(6)删除HDFS中的test.txt和input子目录

  • 删除test.txt文件

    1
    hdfs dfs -rm /user/hadoop/test.txt
  • 删除input目录及其内容

    1
    hdfs dfs -rm -r /user/hadoop/input
    • -rm:删除文件或目录。
    • -r:递归删除目录及其内容。
  • 验证删除

    1
    hdfs dfs -ls /user/hadoop

    输出应为空(或仅剩其他无关内容)。


完整命令总结

以下是按顺序执行所有任务的完整脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 启动Hadoop start-dfs.sh 
start-yarn.sh
# 任务1:在HDFS中创建用户目录
hdfs dfs -mkdir -p /user/hadoop
# 任务2:在本地创建文件并上传到HDFS
mkdir -p /home/hadoop
echo "这是一个测试文件,Hello Hadoop!" > /home/hadoop/test.txt
hdfs dfs -put /home/hadoop/test.txt /user/hadoop/
# 任务3:下载文件到本地
mkdir -p /home/hadoop/下载
hdfs dfs -get /user/hadoop/test.txt /home/hadoop/下载/
# 任务4:显示HDFS文件内容
hdfs dfs -cat /user/hadoop/test.txt
# 任务5:创建子目录并复制文件
hdfs dfs -mkdir /user/hadoop/input
hdfs dfs -cp /user/hadoop/test.txt /user/hadoop/input/
# 任务6:删除文件和子目录
hdfs dfs -rm /user/hadoop/test.txt
hdfs dfs -rm -r /user/hadoop/input

注意事项

  1. 权限问题:

    • 如果遇到权限错误(如“Permission denied”),可能是当前用户无权操作HDFS目录。可以用

      1
      sudo

      或更改目录权限:

      1
      hdfs dfs -chmod -R 777 /user/hadoop
    • 或者以HDFS超级用户(通常是 hdfs 或 root)运行命令。

  2. 路径确认

    • 确保本地路径(如 /home/hadoop)和HDFS路径(如 /user/hadoop)存在且正确。
  3. 服务状态

    • 如果命令失败,检查HDFS是否运行(jps),并查看日志($HADOOP_HOME/logs/)。