文章目录
前言
本文介绍了如何安装和配置Hadoop,一个用于分布式存储和处理大规模数据的开源框架。通过按照本文提供的步骤,您可以在自己的机器上搭建一个Hadoop伪集群,并通过浏览器访问Hadoop的管理页面。本文详细介绍了安装准备、安装JDK、安装Hadoop、修改配置文件、格式化文件系统以及启动Hadoop的步骤。
一、相关介绍
1. 配置文件位置
1.1 只读默认配置文件
hadoop的只读默认配置文件位于安装目录下的 share/doc/hadoop/hadoop-project-dist/hadoop-common
目录。包括以下默认配置文件:
- share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.xml
- share/doc/hadoop/hadoop-project-dist/hadoop-common/hdfs-default.xml
- share/doc/hadoop/hadoop-project-dist/hadoop-common/yarn-default.xml
- share/doc/hadoop/hadoop-project-dist/hadoop-common/mapred-default.xml
1.2 可修改配置文件
hadoop的可修改配置文件位于安装目录下的 etc/hadoop
目录。包括以下可修改配置文件:
- etc/hadoop/core-site.xml
- etc/hadoop/hdfs-site.xml
- etc/hadoop/yarn-site.xml
- etc/hadoop/mapred-site.xml
这些配置文件的配置会覆盖默认配置文件的配置。
1.3 相关环境变量配置文件
hadoop的相关环境变量配置文件位于安装目录下的 etc/hadoop
目录。包括以下相关环境变量配置文件:
- etc/hadoop/hadoop-env.sh
- etc/hadoop/mapred-env.sh
- etc/hadoop/yarn-env.sh
二、安装准备
1. 准备centos
准备三台centos,我准备的如下。
修改/etc/hosts
文件,配置主机名映射为ip地址。
hadoop101、hadoop102、hadoop103节点都要执行。
echo >> /etc/hosts
echo '192.168.198.101 hadoop101' >> /etc/hosts
echo '192.168.198.102 hadoop102' >> /etc/hosts
echo '192.168.198.103 hadoop103' >> /etc/hosts
2. 配置集群免密登录
hadoop101节点执行。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh-copy-id 192.168.198.102
ssh-copy-id 192.168.198.103
hadoop102节点执行。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh-copy-id 192.168.198.101
ssh-copy-id 192.168.198.103
hadoop103节点执行。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh-copy-id 192.168.198.101
ssh-copy-id 192.168.198.102
3. 部署规划
4. 安装条件
- jdk版本:1.8+
5. 安装jdk
hadoop101、hadoop102、hadoop103节点都要执行。
下载地址:https://www.oracle.com/java/technologies/downloads/#java8
下载后上传到/tmp目录下。
然后执行下面命令,用于创建目录、解压,并设置系统级环境变量。
mkdir -p /opt/module
tar -zxvf /tmp/jdk-8u391-linux-x64.tar.gz -C /opt/module/
echo >> /etc/profile
echo '#JAVA_HOME' >> /etc/profile
echo "export JAVA_HOME=/opt/module/jdk1.8.0_391" >> /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
source /etc/profile
三、安装hadoop
1. 下载并解压hadoop
hadoop101、hadoop102、hadoop103节点都要执行。
wget --no-check-certificate https://archive.apache.org/dist/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz -P /tmp
mkdir -p /opt/soft/hadoop
tar -zxvf /tmp/hadoop-3.0.0.tar.gz -C /opt/soft/hadoop
2. 设置环境变量
2.1 设置hadoop安装目录环境变量
设置hadoop系统级环境变量,并加载环境变量。
hadoop101、hadoop102、hadoop103节点都要执行。
echo >> /etc/profile
echo '#HADOOP_HOME' >> /etc/profile
echo "export HADOOP_HOME=/opt/soft/hadoop/hadoop-3.0.0" >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile
echo 'export HADOOP_LOG_DIR=$PATH:$HADOOP_HOME/logs' >> /etc/profile
source /etc/profile
2.2 设置hadoop的root用户环境变量
hadoop通常不建议以root用户身份来启动服务,因为这可能会导致安全漏洞。如果以root用户启动hadoop就会报错,设置hadoop的root用户环境变量后,就可以用root用户启动hadoop。
hadoop101、hadoop102、hadoop103节点都要执行。
echo >> /etc/profile
echo 'export HDFS_NAMENODE_USER=root' >> /etc/profile
echo 'export HDFS_DATANODE_USER=root' >> /etc/profile
echo 'export HDFS_SECONDARYNAMENODE_USER=root' >> /etc/profile
echo 'export YARN_RESOURCEMANAGER_USER=root' >> /etc/profile
echo 'export YARN_NODEMANAGER_USER=root' >> /etc/profile
source /etc/profile
3. 修改配置文件
hadoop101节点执行。
3.1 修改 etc/hadoop/hadoop-env.sh 文件
修改 etc/hadoop/hadoop-env.sh 文件,设置Java环境变量。
cd /opt/soft/hadoop/hadoop-3.0.0
sed -i "s|^# export JAVA_HOME=.*|export JAVA_HOME=/opt/module/jdk1.8.0_391|" "etc/hadoop/hadoop-env.sh"
sed -i "s|^export JAVA_HOME=.*|export JAVA_HOME=/opt/module/jdk1.8.0_391|" "etc/hadoop/hadoop-env.sh"
3.2 修改 etc/hadoop/core-site.xml 文件
修改 /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop/core-site.xml
文件。内容如下所示。
<configuration>
<!--NameNode URI-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!--在SequenceFiles中使用的读写缓冲区的大小。-->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop/hadoop-3.0.0/hadoop-tmp-data</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property>
</configuration>
3.3 修改 etc/hadoop/hdfs-site.xml 文件
修改 /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop/hdfs-site.xml
文件。内容如下所示。
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop102:9868</value>
</property>
<!--用于启用或禁用Hadoop文件系统(HDFS)的权限控制功能-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!--设置 HDFS 中数据块的副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--本地文件系统上的路径,NameNode 在其中永久存储命名空间和事务日志。如果这是以逗号分隔的目录列表,则名称表将复制到所有目录中,以实现冗余。-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/namenode</value>
</property>
<!--允许/排除的数据节点列表。如有必要,请使用这些文件来控制允许的数据节点列表。-->
<property>
<name>dfs.hosts</name>
<!--<name>dfs.hosts.exclude</name>-->
<value>hadoop101,hadoop102,hadoop103</value>
</property>
<!--HDFS 块大小为 256MB,适用于大型文件系统。-->
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<!--更多的 NameNode 服务器线程来处理来自大量 DataNode 的 RPC。-->
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<!--DataNode 的本地文件系统上应存储其块的路径列表,以逗号分隔。 如果这是以逗号分隔的目录列表,则数据将存储在所有命名目录中,通常存储在不同的设备上。-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/soft/hadoop/hadoop-3.0.0/datanode-data</value>
</property>
</configuration>
3.4 修改 etc/hadoop/mapred-site.xml 文件
修改 /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop/mapred-site.xml
文件。内容如下所示。
<configuration>
<!--执行框架设置为 Hadoop YARN。-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--map的最大资源限制。-->
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<!--map的子 jvm 的堆最大大小。-->
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<!--reduce的最大资源限制。-->
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<!--reduce的子 jvm 的堆最大大小。-->
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
<!--在对数据进行排序以提高效率时具有更高的内存限制。-->
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>512</value>
</property>
<!--对文件进行排序时,一次合并了更多流。-->
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<!--运行的并行副本数量越多,就会减少从大量映射中获取输出。-->
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>50</value>
</property>
<!--MapReduce 工作历史服务器 host:port-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!--MapReduce 工作历史服务器 Web UI host:port-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
<!--MapReduce作业写入历史文件的目录。-->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/opt/soft/hadoop/hadoop-3.0.0/mr-history/tmp</value>
</property>
<!--MR JobHistory Server 管理历史文件的目录。-->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/opt/soft/hadoop/hadoop-3.0.0/mr-history/done</value>
</property>
</configuration>
3.5 修改 etc/hadoop/yarn-site.xml 文件
修改 /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop/yarn-site.xml
文件。内容如下所示。
<configuration>
<!--启用 ACL?默认值为 false。-->
<property>
<name>yarn.acl.enable</name>
<value>false</value>
</property>
<!--管理 ACL。ACL 用于在群集上设置管理员。ACL 用于逗号分隔用户空间逗号分隔组。默认为特殊值 *,表示任何人。空间的特殊价值意味着没有人可以访问。-->
<!-- <property>-->
<!-- <name>yarn.admin.acl</name>-->
<!-- <value>*</value>-->
<!-- </property>-->
<!--用于启用或禁用日志聚合的配置-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--设置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop103:19888/jobhistory/logs</value>
</property>
<!--设置日志保留时间为7天,在删除聚合日志之前要保留聚合日志多长时间。-1 禁用。请注意,将其设置得太小,将向名称节点发送垃圾邮件。-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--ResourceManager host:port,用于客户端提交作业。-->
<!-- <property>-->
<!-- <name>yarn.resourcemanager.address</name>-->
<!-- <value>hadoop103:8088</value>-->
<!-- </property>-->
<!--ResourceManager host:port,用于 ApplicationMasters 与 Scheduler 通信以获取资源。-->
<!-- <property>-->
<!-- <name>yarn.resourcemanager.scheduler.address</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--ResourceManager host:port 用于 NodeManager。-->
<!-- <property>-->
<!-- <name>yarn.resourcemanager.resource-tracker.address</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--ResourceManager host:port,用于管理命令。-->
<!-- <property>-->
<!-- <name>yarn.resourcemanager.admin.address</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--ResourceManager web-ui host:port。-->
<!-- <property>-->
<!-- <name>yarn.resourcemanager.webapp.address</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--ResourceManager 主机。-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!--资源管理器调度程序类。-->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<!--在资源管理器中分配给每个容器请求的最小内存限制。-->
<!-- <property>-->
<!-- <name>yarn.scheduler.minimum-allocation-mb</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--要分配给资源管理器中每个容器请求的最大内存限制。-->
<!-- <property>-->
<!-- <name>yarn.scheduler.maximum-allocation-mb</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--允许/排除的 NodeManager 列表。-->
<!-- <property>-->
<!--<name>yarn.resourcemanager.nodes.exclude-path</name>-->
<!-- <name>yarn.resourcemanager.nodes.include-path</name>-->
<!-- <value></value>-->
<!-- </property>-->
<!--设置YARN NodeManager的辅助服务。用于在Map和Reduce任务之间传输数据。-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--设置允许传递给YARN NodeManager的环境变量白名单。-->
<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>
3.6 修改 etc/hadoop/workers 文件
修改 /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop/workers
文件。内容如下所示。
hadoop101
hadoop102
hadoop103
3.7 同步配置
把上面设置的配置文件同步到hadoop102和hadoop103节点。
scp -r /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop hadoop102:/opt/soft/hadoop/hadoop-3.0.0/etc
scp -r /opt/soft/hadoop/hadoop-3.0.0/etc/hadoop hadoop103:/opt/soft/hadoop/hadoop-3.0.0/etc
4. 格式化文件系统
hadoop101节点执行。
hdfs namenode -format
5. 启动hadoop
hadoop101节点启动hdfs。
cd /opt/soft/hadoop/hadoop-3.0.0/sbin
./start-dfs.sh
hadoop103节点启动yarn。
cd /opt/soft/hadoop/hadoop-3.0.0/sbin
./start-yarn.sh
6. 浏览器访问
浏览器访问地址 http://192.168.198.101:9870 即可进入 NameNode页面。如下图所示。
浏览器访问地址 http://192.168.198.102:9868 即可进入 SecondaryNameNode页面。如下图所示。
浏览器访问地址 http://192.168.198.103:8088 即可进入 yarn 页面。如下图所示。
四、hadoop集群命令
1. 启停命令
1.1 启停 hdfs
cd /opt/soft/hadoop/hadoop-3.0.0/sbin
./start-dfs.sh
./stop-dfs.sh
1.2 启停 yarn
cd /opt/soft/hadoop/hadoop-3.0.0/sbin
./start-yarn.sh
./stop-yarn.sh
总结
通过本文的指导,您已经学会了如何安装和配置Hadoop,并搭建了一个Hadoop伪集群。Hadoop是一个强大的工具,可以帮助您存储和处理大规模的数据。您可以进一步探索Hadoop的功能和特性,以满足您的数据处理需求。
希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!
参考链接: