参考自官方英文文档:https://hadoop.apache.org/docs/r3.1.1/index.html
1. 部署hadoop集群
1.1. 前置条件
- 本次安装环境为Ubuntu(16/18)
- 安装Java 7版本及以上
- 安装ssh,并支持集群间免密登陆
- 安装并行运维管理工具pdsh:
sudo apt-get install pdsh
在/etc/profile文件中添加export PDSH_RCMD_TYPE=ssh
, 运行 source /etc/profile
1.2. 下载hadoop版本
- 本次部署环境使用最新hadoop 3.1版本(因此支持GPU资源分配)
- 下载安装
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.1/hadoop-3.1.1.tar.gz
tar zxvf hadoop-3.1.1.tar.gz -C /opt/hadoop/
cd /opt/hadoop/hadoop-3.1.1
- 设置环境变量,修改etc/hadoop/hadoop-env.sh文件,设置JAVA_HOME/HADOOP_HOME/HADOOP_CONF_DIR
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_191
export HADOOP_HOME=/opt/hadoop/hadoop-3.1.1
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
- 运行bin/hadoop,显示需要的相关参数
1.3. 本地单节点模式
hadoop默认配置为非集群模式,只在一个Java进程中运行。便于调试。
下面是一个读取输入文件进行正则表达式匹配的例子
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar grep input output 'dfs[a-z.]+'
$ cat output/*
1.4. 伪分布式模式
Hadoop可在一个节点上运行伪分布式模式,分多个Java进程运行程序。
1.4.1. 配置
使用以下配置
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
1.4.2. 运行程序
- 配置环境变量
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
- 格式化文件系统,并启动NameNode和DataNode
bin/hdfs namenode -format
sbin/start-dfs.sh
- 启动成功后,即可访问网站:http://localhost:9870/
- 创建运行mapreduce任务需要的目录
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/root
- 拷贝文件到HDFS
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
- 运行测试程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar grep input output 'dfs[a-z.]+'
- 下载或查看结果
bin/hdfs dfs -get output output
cat output/*
bin/hdfs dfs -cat output/*
- 停止HDFS
sbin/stop-dfs.sh
1.5. 单节点Yarn(伪集群)
- 重新运行上面的1-4步骤。
- 配置以下参数
etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
- 启动Yarn的ResourceManager和NodeManager
sbin/start-yarn.sh
运行成功后,即可访问管理网站:http://localhost:8088/
- 重新运行测试程序
- 停止Yarn
sbin/stop-yarn.sh
注意格式化两次的问题: 会导致第二次格式化后,DataNode没法启动的问题。如果要进行第二次格式化,建议先删除/tmp/hadoop*文件夹。
1.6 集群部署
具体参考相关博文: