hadoop官网提供了三种部署方式,单机部署,伪分布式部署以及分布式部署。单机部署意义不大。这里只尝试了伪分布式部署和分布式部署
伪分布式部署
安装HDFS
HDFS是hadoop分布式文件系统,是hadoop的基础,hadoop的一切都基于此。即使目前hadoop的mapreduce已经日薄西山,HDFS依然是重中之重。
- 安装jre1.8版本,这个网上教程很多,就不介绍了
- 下载hadoop,写作时的稳定版本是3.3.2,我就是使用的这个版本
- 将hadoop解压到指定的目录,我解压到
/usr/local目录下 - hadoop不建议使用root用户执行,所以需要创建一个用户:使用
adduser hadoop创建hadoop用户和用户组 - 修改hadoop目录的属组:
chown -R hadoop:hadoop hadoop-3.2.2 - 修改配置文件
- etc/hadoop/core-site.xml
fs.defaultFS:文件系统默认前缀<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>- etc/hadoop/hdfs-site.xml
dfs.replication:dfs默认副本数<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>- etc/hadoop/hadoop-env.sh 在文件中增加export JAVA_HOME=/usr/local/jdk1.8.0_272,不添加这句启动hadoop会失败。
- 设置免密码ssh登录localhost
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 0600 ~/.ssh/authorized_keys
- 启动dfs
- 格式化文件系统:
bin/hdfs namenode -format - 启动dfs:
sbin/start-dfs.sh - 登录页面查看安装结果:http://ip:9870/
- 格式化文件系统:
安装yarn
- 修改配置文件
- 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:
sbin/start-yarn.sh - 登录yarn的resourcemanager界面查看结果:http://ip:8088/
分布式部署
准备
- 准备三台云服务器,一台作为master,两台作为worker,其中master部署NameNode,DataNode,ResourceManager,NodeManager。worker部署DataNode,NodeManager。
172.28.1.228 master
172.28.1.242 worker1
172.28.1.165 worker2
配置及部署
- 在三台服务器都装好同样版本的的jre和hadoop,路径保持一致。这里使用的jre版本为1.8,hadoop为3.3.2。
- 修改三台主机的主机名,主机名对应为步骤1中的master,worker1,worker2,方便后期查看节点
/etc/hostname
- 修改
/etc/hosts增加主机名和IP的映射
172.28.1.228 master
172.28.1.242 worker1
172.28.1.165 worker2
- 设置主机间的免密登录
- 每台主机都执行如下命令,由于使用hadoop启动进程,需要在切换到hadoop用户执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys- 每台主机执行如下命令将公钥拷贝的其他主机,其中的{hostname}代表对应的主机名
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@{hostname}- 测试是否可以ssh免密登录其他主机
- 创建目录,用于datanode,namenode等的存储目录,属组要设置成hadoop:hadoop
mkdir -p /usr/local/data/hadoop/data
mkdir -p /usr/local/data/hadoop/dfs
mkdir -p /usr/local/data/hadoop/name
mkdir -p /usr/local/data/hadoop/secondary
- 修改etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<description>指定默认的访问地址以及端口号</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/data/hadoop</value>
<description>其它临时目录的父目录,会被其它临时目录用到</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description>在序列中使用的缓冲区大小</description>
</property>
</configuration>
- 修改etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>副本数,HDFS存储时的备份数量</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/data/hadoop/name</value>
<description>namenode临时文件所存放的目录</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/data/hadoop/data</value>
<description>datanode临时文件所存放的目录</description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
<description>hdfs web 地址</description>
</property>
<property>
<name>dfs.datanode.address</name>
<value>master:9866</value>
<description>datanode和namenode通信的地址</description>
</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>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
<description>配置 yarn 外部可访问,(外网IP:端口)</description>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
<description>serivce rest api</description>
</property>
</configuration>
- 修改etc/hadoop/workers文件,workers中存放的是需要启动datanode和nodemanager的节点。
master
worker1
worker2
- 除了etc/hadoop/workers文件,5-8步在每个节点执行,9只在master节点执行
- 以hadoop执行命令启动hdfs
sbin/start-dfs.sh
- 以hadoop执行命令启动yarn
sbin/start-yarn.sh
- 命令
jps查看进程启动情况