欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Ubuntu 18上安装和运行Hadoop和Spark

程序员文章站 2022-07-15 17:14:13
...

Installing and Running Hadoop and Spark on Ubuntu 18

这是关于如何在Ubuntu Linux上安装Hadoop和Spark的简短指南(从我之前的指南中更新)。 至少在大多数基于Debian的Linux发行版上,大致相同的过程应该可以运行,尽管我只在Ubuntu上进行了测试。 假定没有Hadoop,Spark或Java的先验知识。

I'll be setting all of this up on a virtual machine (VM) using Oracle's VirtualBox, so I first need to get an 一世SO file to install the Ubuntu operating system (OS). I'll download the most recent Long-Term Support (LTS) version of Ubuntu from their website (as of this writing, that's 18.04.3). Setting up a virtual machine is fairly straightforward and since it's not directly relevant, I won't be replicating those linked instructions here. Instead, let's just start with a clean Ubuntu installation...

Installing Java

Hadoop需要安装Java,而我的最小安装Ubuntu默认情况下没有Java。 您可以使用以下命令进行检查:

$ java -version

Command 'java' not found, but can be installed with:

sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
注意:我们将忽略这些建议,并以其他方式安装Java。

Hadoop runs smoothly with Java 8, but may encounter bugs with newer versions of Java. So I'd like to install Java 8 specifically. To manage multiple Java versions, I install SDKMAN! (but first I need to install curl):

$ sudo apt install curl -y

...输入您的密码,然后安装SDKMAN! 与

$ curl -s "https://get.sdkman.io" | bash

SDKMAN! 是一款很棒的软件,可让您安装各种版本的各种不同软件包,语言等。 您可以通过以下方式查看大量可用软件:

$ sdk ls # or sdk list

在Ubuntu 18上安装和运行Hadoop和Spark

确保可以使用SDKMAN! 在每个新终端中,运行以下命令以添加一行源于SDKMAN的行! 每当打开新终端时的初始化脚本:

$ echo "source ~/.sdkman/bin/sdkman-init.sh" >> ~/.bashrc

我们将只使用SDKMAN! 安装一件事-Java。 您可以使用以下命令列出特定安装候选程序的所有可用版本:

$ sdk list <software>

所以在我们的情况下

$ sdk list java

...我们可以看到所有不同的可用Java版本:

在Ubuntu 18上安装和运行Hadoop和Spark

要安装特定版本,我们使用识别码在右边的栏中,始终显示:

$ sdk install <software> <Identifier>

我将安装AdoptOpenJDK的Java 8.0.232(HotSpot),因此对我来说,此命令是:

$ sdk install java 8.0.232.hs-adpt

SDKMAN! 默认情况下,将候选人安装在〜/ .sdkman /候选人:

$ ls ~/.sdkman/candidates/java
8.0.232.hs-adpt  current

的当前 symlink always points to whichever Java version SDKMAN! thinks is the version you're 当前ly using, and this is reflected in the Java版本命令。 在最后一步之后,此命令返回:

$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.232-b09, mixed mode)

如果您安装了多个Java版本,则可以使用sdk使用:

$ sdk install java 13.0.1.hs-adpt

...

$ sdk use java 13.0.1.hs-adpt

Using java version 13.0.1.hs-adpt in this shell.
$ java -version
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (AdoptOpenJDK)(build 13.0.1+9)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 13.0.1+9, mixed mode, sharing)

我们还需要明确定义JAVA_HOME通过将环境变量添加到〜/ .bashrc文件:

$ echo "export JAVA_HOME=\$(readlink -f \$(which java) | sed 's:bin/java::')" >> ~/.bashrc

回声-ingJAVA_HOME现在应该为我们提供SDKMAN的路径! 目录:

$ echo $JAVA_HOME
/home/andrew/.sdkman/candidates/java/13.0.1.hs-adpt

在继续本教程之前,请确保切换回Java 8:

$ sdk use java 8.0.232.hs-adpt

Using java version 8.0.232.hs-adpt in this shell.

Installing Hadoop

With Java installed, the next step is to install Hadoop. You can get the most recent version of Hadoop from Apache's website. As of this writing, that version is Hadoop 3.2.1 (released 22 Sep 2019). If you click on the link on that webpage, it may redirect you. Click until a *.tar.gz file is downloaded. The link I ended up using was

http://mirrors.whoishostingthis.com/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

您可以在浏览器中下载该文件,也可以使用get在终端:

$ wget http://mirrors.whoishostingthis.com/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

使用以下命令解压缩存档文件柏油,然后将输出重定向到/选择/目录:

$ sudo tar -xvf hadoop-3.2.1.tar.gz -C /opt/

删除存档文件并移至/选择/目录:

$ rm hadoop-3.2.1.tar.gz && cd /opt

重命名Hadoop目录并更改其权限,以使其归您所有(我的用户名是安德鲁) 并不是根要么1001:

$ sudo mv hadoop-3.2.1 hadoop && sudo chown andrew:andrew -R hadoop

最后,定义HADOOP_HOME环境变量并将正确的Hadoop二进制文件添加到您的路径通过回显以下几行并将它们连接到您的〜/ .bashrc文件:

$ echo "export HADOOP_HOME=/opt/hadoop" >> ~/.bashrc
$ echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> ~/.bashrc

现在,当你资源你的〜/ .bashrc(或打开任何新的外壳程序),您应该能够检查Hadoop是否已正确安装:

$ hadoop version
Hadoop 3.2.1
Source code repository...
Compiled by ...
...

为了使HDFS稍后正确运行,我们还需要定义JAVA_HOME在文件中/opt/hadoop/etc/hadoop/hadoop-env.sh。 在该文件中找到以以下内容开头的行:

# export JAVA_HOME=

并对其进行编辑以匹配JAVA_HOME我们之前定义的变量:

export JAVA_HOME=/home/<username>/.sdkman/candidates/java/8.0.232.hs-adpt

确保您更改了<username>上方输入适合您的设置的用户名。 就我而言,我取代<username>与安德鲁。

Installing Spark

The last bit of software we want to install is Apache Spark. We'll install this in a similar manner to how we installed Hadoop, above. First, get the most recent *.tgz file from Spark's website. I downloaded the Spark 3.0.0-preview (6 Nov 2019) pre-built for Apache Hadoop 3.2 and later with the command:

$ wget http://mirrors.whoishostingthis.com/apache/spark/spark-3.0.0-preview/spark-3.0.0-preview-bin-hadoop3.2.tgz

与Hadoop一样,使用柏油,然后将输出重定向到/选择/目录:

$ sudo tar -xvf spark-3.0.0-preview-bin-hadoop3.2.tgz -C /opt/

删除存档文件并移至/选择/目录:

$ rm spark-3.0.0-preview-bin-hadoop3.2.tgz && cd /opt

重命名Spark目录并更改其权限,以使其归您所有(我的用户名是安德鲁) 并不是根要么1001:

$ sudo mv spark-3.0.0-preview-bin-hadoop3.2 spark && sudo chown andrew:andrew -R spark

最后,定义SPARK_HOME环境变量并将正确的Spark二进制文件添加到您的路径通过回显以下几行并将它们连接到您的〜/ .bashrc文件:

$ echo "export SPARK_HOME=/opt/spark" >> ~/.bashrc
$ echo "export PATH=\$PATH:\$SPARK_HOME/bin" >> ~/.bashrc

现在,当你资源你的〜/ .bashrc(或打开任何新的外壳),您应该能够检查Spark是否已正确安装:

$ spark-shell --version
...
...version 3.0.0-preview
...

Configuring HDFS

At this point, Hadoop and Spark are installed and running correctly, but we haven't yet set up the Hadoop Distributed File System (HDFS). As its name suggests, HDFS is usually distributed across many machines. If you want to build a Hadoop Cluster, I've previously written instructions for doing that across a small cluster of Raspberry Pis. But for simplicity's sake, we'll just set up a standalone, local installation here.

要配置HDFS,我们需要编辑位于以下位置的多个文件/ opt / hadoop / etc / hadoop /。 第一个这样的文件是core-site.xml。 编辑该文件,使其具有以下XML结构:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>

第二个文件是hdfs-site.xml,它提供了namenode和datanode目录的位置。 编辑该文件,使其看起来像:

<configuration>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///opt/hadoop_tmp/hdfs/datanode</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///opt/hadoop_tmp/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration> 

我们设置dfs.replication设为1,因为这是一个单机集群-我们在这里不能重复复制文件。

Read more about data replication in HDFS here.

上面给出的目录(/ opt / hadoop_tmp / hdfs / datanode和/ opt / hadoop_tmp / hdfs / namenode) must exist和be read/write-able by the current user. So create them now,和adjust their permissions, with:

$ sudo mkdir -p /opt/hadoop_tmp/hdfs/datanode
$ sudo mkdir -p /opt/hadoop_tmp/hdfs/namenode
$ sudo chown andrew:andrew -R /opt/hadoop_tmp

下一个配置文件是mapred-site.xml,您应该对其进行如下编辑:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

...最后yarn-site.xml,您应该对其进行如下编辑:

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>  
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration> 

Configuring SSH

如果您以最小的像我一样进行Ubuntu安装,您可能需要先设置ssh连接(当HDFS连接到本地主机:9000)。 要检查SSH服务器是否正在运行,请输入以下命令

$ which sshd

如果未返回任何内容,则说明未安装SSH服务器(最小的Ubuntu安装就是这种情况)。 要启动并运行它,请安装openssh服务器,它将自动启动SSH服务:

$ sudo apt install openssh-server
$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
  Loaded: loaded ...
  Actve: active...
  ...

要检查是否可行,请尝试ssh-进入本地主机:

$ ssh localhost
...
Are you sure you want to continue connecting (yes/no)? yes
...
Welcome to Ubuntu 18.04.3 LTS...
...
您可以出口逃避这种多余的自我联系。

然后,创建一个公钥-私钥对(如果尚未创建):

$ ssh-******
Generating public/private rsa key pair.
...

一遍又一遍地按“输入” /“返回”,以在默认位置创建一个没有密码的**。 回到正常的shell提示时,将公钥附加到您的〜/ .ssh / authorized_keys文件:

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

您现在应该能够启动HDFS。 继续下一节。

Formatting and Booting HDFS

至此,我们可以格式化分布式文件系统了。小心除非您确定HDFS当前没有存储任何重要数据,否则不要运行以下命令它将失去。 但是,如果您是第一次在这台计算机上设置HDFS,则无需担心:

使用以下格式格式化HDFS

$ hdfs namenode -format -force

您应该得到一堆输出,然后SHUTDOWN_MSG:

在Ubuntu 18上安装和运行Hadoop和Spark

然后,我们可以使用以下两个命令来启动HDFS:

$ start-dfs.sh && start-yarn.sh

Note: if you performed a minimal installation, you may need to install openssh-server by following the instructions given here.

您可以使用以下命令检查HDFS是否正常运行jps:

$ jps
10384 DataNode
11009 NodeManager
4113 ResourceManager
11143 Jps
10218 NameNode
10620 SecondaryNameNode

你应该看到一个名称节点还有一个数据节点,至少在该列表中。 尝试创建目录,然后列出HDFS的内容,以检查HDFS的行为是否正确:

$ hdfs dfs -mkdir /test
$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - andrew supergroup          0 2019-12-13 13:56 /test

如果可以看到目录,则说明您已经正确配置了HDFS!

Monitoring

Hadoop和Spark带有内置的基于Web的监视器,您可以通过以下方式访问http://本地主机:8088:

在Ubuntu 18上安装和运行Hadoop和Spark

...和http://本地主机:9870在您的浏览器中:

在Ubuntu 18上安装和运行Hadoop和Spark

Working with Spark and HDFS

使用Spark和Hadoop的好处之一是它们都是Apache产品,因此它们可以很好地协同工作。 从HDFS读取文件到Spark进行分析很容易。 为了测试这一点,让我们将一个小文件复制到HDFS并使用Spark对其进行分析。

Spark随附了一些示例资源文件。 通过以上配置,可以在以下位置找到它们/ opt / spark / examples / src / main / resources。 让我们复制文件users.parquet到HDFS:

$ hdfs dfs -put /opt/spark/examples/src/main/resources/users.parquet /users.parquet

Parquet files are another Apache creation, designed for fast data access and analysis.

接下来,打开Spark Shell并使用以下命令读取文件实木复合地板:

$ spark-shell
...
Welcome to
... version-3.0.0-preview
...
scala> val df = spark.read.parquet("hdfs://localhost:9000/users.parquet")
df: org.apache.spark.sql.DataFrame = [name: string, favorite_color: string ... 1 more field]

scala> df.collect.foreach(println)
[Alyssa,null,WrappedArray(3,9,15,20)]
[Ben,red,WrappedArray()]

这只是一个小例子,但它显示了Spark和HDFS如何紧密协作。 您可以轻松地从HDFS读取文件并使用Spark分析它们!

如果要停止HDFS,您可以运行以下命令:

$ stop-dfs.sh

$ stop-yarn.sh

Conclusion

I hope this guide will be useful for anyone trying to set up a small Hadoop / Spark installation for testing or education. If you're interested in learning more about Hadoop and Spark, please check out my other articles in this series on Dev! Thanks for reading!

from: https://dev.to//awwsmm/installing-and-running-hadoop-and-spark-on-ubuntu-18-393h