本文记录了部署Hadoop的具体步骤,因为感觉以前每次部署都是Google一下,这回记录一下。这里使用Hadoop-2.10.2版本的standalone mode作为例子。

Install Hadoop

  1. 下载Hadoop-2.10.2,这里选择binary版本[也就是编译好的二进制代码],hadoop-2.10.2.tar.gz
  2. 解压到想要部署的目录,比如/usr/local/hadoop/hadoop-2.10.2
  3. 配置环境变量到PATH目录,比如export PATH="$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
  4. 添加JAVA_HOME$HADOOP_HOME/etc/hadoop/hadoop-env.sh

Configure Hadoop

Configuare $HADOOP_HOME/etc/hadoop/core-site.xml

添加下面信息到<configuration>

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/hadoop-2.10.2/tmp</value>
</property>

Configure $HADOOP_HOME/etc/hadoop/hdfs-site.xml

添加下面信息到<configuration>,其中name.dirdata.dir的路径需要写入权限。

<property>
    <name>dfs.namenode.name.dir</name>
    <!-- <value>file:/usr/local/hadoop/hadoop-2.10.2/data/namenode</value> -->
    <value>file:/home/{user_name}/Develop/hadoop-data/namenode</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <!-- <value>file:/usr/local/hadoop/hadoop-2.10.2/data/datanode</value> -->
    <value>file:/home/{user_name}/Develop/hadoop-data/datanode</value>
</property>
<property>
    <name>dfs.secondary.http.address</name>
    <value>127.0.0.1:50090</value>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

Run Hadoop

配置完成后,首先格式化namenode

hdfs namenode -format

格式化成功后,因为是standalone mode,需要安装ssh-server,这样才能通过本机ssh访问本机

# install openssh-client and openssh-server
sudo apt update
sudo apt install openssh-client
sudo apt install openssh-server
# make sure ssh works
sudo systemctl status ssh

为了避免ssh访问过程中频繁的输入密码,可以通过ras-based ssh key方式

ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

之后就可以通过start-dfs.shstop-dfs.sh两个脚本启动HDFS

通过jps命令查看是否NameNodeDataNodeSecondaryNameNode进程都可以正常启动和关闭。

Spark Read HDFS

因为Apache Spark和Hadoop的配合紧密,Spark读取文件的时候默认就是读取HDFS路径,但是需要配置。

例如为了让spark-submit命令需要正确指向HDFS路径,需要配置$SPARK_HOME/conf/spark-env.sh,在其中添加export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop"