
目录hadoop伪分布式HDFS 基础文件操作完全分布式hadoop高可用iphostsroles192.168.73.156server1NameNode192.168.73.157server2DataNode192.168.73.158server3DataNode192.168.73.159server4DataNode192.168.73.160server5[rootserver1 ~]# wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gzHadoop 官方建议禁止使用 root 用户运行集群因此我们新建普通用户sxy用于整套 Hadoop 操作同时设置密码方便登录管理。 将提前下载好的hadoop-3.3.6.tar.gz和jdk-8u181-linux-x64.tar.gz移动至 sxy 家目录切换 sxy 用户进行解压部署。[rootserver1 ~]# useradd sxy[rootserver1 ~]# passwd sxy[rootserver1 ~]# mv hadoop-3.3.6.tar.gz jdk-8u181-linux-x64.tar.gz /home/sxy/[rootserver1 ~]# su sxy[sxyserver1 ~]$ tar zxf hadoop-3.3.6.tar.gz[sxyserver1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz[sxyserver1 ~]$ ln -s hadoop-3.3.6 hadoop[sxyserver1 ~]$ ln -s jdk1.8.0_181 jdkhadoop伪分布式Hadoop 伪分布式模式是学习 Hadoop 的入门部署方案仅使用单台服务器将 HDFS、YARN 所有组件以独立进程运行在本机模拟分布式架构。和完全分布式、高可用 HA 集群相比部署简单适合理解 Hadoop 基础组件通信流程也是后续学习完全分布式、Hadoop HA 高可用的基础。本文采用 Hadoop-3.3.6 JDK1.8 完成伪分布式完整部署。[sxyserver1 ~]$ vim .bash_profile编辑用户个人环境变量文件.bash_profile定义JAVA_HOME、HADOOP_HOME并将两个软件的 bin、sbin 目录加入系统 PATH。 执行source ~/.bash_profile让环境变量立即生效实现任意目录直接调用 java、hadoop 相关命令。说明.bash_profile仅对当前 sxy 用户生效如果需要全局所有用户生效则配置/etc/profile。[sxyserver1 ~]$ source ~/.bash_profile进入/home/sxy/hadoophadoop-env.sh是 Hadoop 的环境配置脚本必须指定 JAVA_HOMEHadoop 启动各守护进程时依赖 JDK 运行环境如果不配置会直接启动失败。[sxyserver1 hadoop]$ vim etc/hadoop/hadoop-env.sh进入/home/sxy/hadoop/etc/hadoop目录[sxyserver1 hadoop]$ vim core-site.xmlcore-site.xml 是 Hadoop 核心全局配置文件。 属性fs.defaultFS定义 HDFS 默认文件系统地址。伪分布式填写hdfs://localhost:9000代表本机监听 9000 端口作为 HDFS 访问入口。[sxyserver1 hadoop]$ vim hdfs-site.xml负责 HDFS 相关参数配置。 属性dfs.replication数据块副本数量。伪分布式只有一台服务器无法存储多副本因此设置值为 1生产完全分布式一般配置 3 副本。配置免密Hadoop 启停脚本start-dfs.sh/start-yarn.sh底层使用 SSH 远程登录管理各个节点进程伪分布式本机也必须配置localhost免密登录否则执行启停脚本会反复要求输入密码部署失败。[sxyserver1 ~]$ ssh-keygen[sxyserver1 ~]$ ssh-copy-id localhost/home/sxy/hadoop该命令用于初始化 NameNode 元数据目录生成集群唯一的 ClusterID搭建全新 HDFS 文件系统。⚠️ 重点提醒格式化仅允许执行一次多次格式化会造成 NameNode 与 DataNode 的集群 ID 不一致DataNode 无法正常注册集群启动失败。控制台输出successfully formatted代表格式化成功。启动 HDFS 集群 进程验证[sxyserver1 hadoop]$ bin/hdfs namenode -format[sxyserver1 hadoop]$ sbin/start-dfs.sh[sxyserver1 ~]$ jpsstart-dfs.sh一键启动 HDFS 三大守护进程NameNode、DataNode、SecondaryNameNode。jps是 JDK 自带工具用来查看本机 Java 进程伪分布式正常结果需要看到NameNode、DataNode、SecondaryNameNode。缺少任意进程代表启动异常需要查看日志排错。HDFS 基础文件操作[sxyserver1 hadoop]$ bin/hdfs dfs -mkdir /user[sxyserver1 hadoop]$ bin/hdfs dfs -mkdir /user/sxyHDFS 是分布式文件系统使用hdfs dfs作为文件操作命令语法类似 Linux 本地命令-mkdir在 HDFS 上创建目录遵循 Hadoop 规范创建用户工作目录/user/sxy-put将本地服务器文件上传至 HDFS 分布式文件系统此处上传配置 xml 文件作为 MapReduce 测试数据源[sxyserver1 hadoop]$ bin/hdfs dfs -mkdir input[sxyserver1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input运行 MapReduce 官方示例程序grep 单词统计[sxyserver1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output dfs[a-z.]下载任务结果查看输出内容[sxyserver1 hadoop]$ bin/hdfs dfs -get output output[sxyserver1 hadoop]$ cat output/*访问地址http://192.168.73.156:9870页面Utilities→Browse the file system可以可视化浏览 HDFS 上所有目录、文件在线查看文件内容、副本数量方便运维查看集群数据替代命令行操作。完全分布式伪分布式仅单机运行无法体现多节点分布式存储特性完全分布式采用多台独立服务器部署 Hadoop 组件节点分工不同数据可以跨机器保存多副本贴近真实生产基础架构。本次实验采用三台机器 server1、server2、server3 搭建利用 NFS 共享目录实现三台服务器统一部署 Hadoop简化多机同步配置工作。添加server2 server3三台节点安装安装 nfs 服务[rootserver1 ~]# yum install -y nfs-utils编辑 NFS 导出配置/etc/exports写入rw,sync读写权限、同步写入保证数据一致性all_squash,anonuid1000,anongid1000所有访问用户映射为 sxy 用户 uid1000权限统一避免 hadoop 读写权限报错no_subtree_check关闭子树校验提升访问性能设置开机自启[sxyserver1 root]$ sudo systemctl enable --now nfs2,3建立用户并创建密码[rootserver3 ~]# useradd sxy[rootserver3 ~]# passwd sxy免密[sxyserver1 ~]$ ssh-copy-id server2[sxyserver1 ~]$ ssh-copy-id server3查找server1的对外共享目录[rootserver2 ~]# showmount -e server123均挂载[rootserver2 ~]# mount 192.168.73.156:home/sxy/ /home/sxy/停止原有伪分布式集群[sxyserver1 hadoop]$ sbin/stop-dfs.sh如果之前运行过伪分布式必须先正常关闭集群避免旧元数据干扰完全分布式部署。进入目录/home/sxy/hadoop/etc/hadoop[sxyserver1 hadoop]$ vim core-site.xml和伪分布式 localhost 不同完全分布式填写主节点主机名 server1所有节点通过域名访问统一的 NameNode 服务。[sxyserver1 hadoop]$ vim hdfs-site.xml副本数修改为 2三台节点环境下数据块保存 2 份副本实现跨机器冗余生产环境常用 3 副本。[sxyserver1 hadoop]$ vim workers写入 DataNode 从节点主机名重新格式化[sxyserver1 hadoop]$ pwd/home/sxy/hadoop[sxyserver1 hadoop]$ bin/hdfs namenode -format输入Y开启[sxyserver1 hadoop]$ sbin/start-dfs.sh报错第一次查看没有server3[rootserver3 ~]# cd /home/sxy/hadoop/logs[rootserver3 logs]# grep -E register|denied|ERROR hadoop-sxy-datanode-server3.log发现是hosts解析把server1的ip写错了修改之后就对了[sxyserver1 ~]$ cd hadoop[sxyserver1 hadoop]$ bin/hdfs dfs -mkdir /user[sxyserver1 hadoop]$ bin/hdfs dfs -mkdir /user/sxy[sxyserver1 hadoop]$ bin/hdfs dfs -mkdir input[sxyserver1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input完全分布式和伪分布式的 HDFS 操作命令语法完全一致区别在于底层存储 伪分布式所有副本保存在单台机器完全分布式文件副本跨多台服务器存放具备基础数据容错能力。文件上传完成后可以访问 HDFS Web UI查看文件存储位置、副本分布验证多节点存储特性。hadoop高可用集群扩容新加server4新开server4创建用户设密码 并安装nfs共享工具[rootserver4 ~]# useradd sxy[rootserver4 ~]# passwd sxy[rootserver4 ~]# yum install -y nfs-utils同样设置免密[sxyserver1 ~]$ ssh-copy-id server4查看server1共享目录沿用 NFS 共享/home/sxy无需在 server4 重新上传、解压 Hadoop 和 JDK所有节点共用同一套程序文件统一维护配置降低多节点部署工作量。[rootserver4 ~]# showmount -e server1挂载[rootserver4 ~]# mount 192.168.73.156:home/sxy/ /home/sxy/[rootserver4 ~]# cd /home/sxy/[rootserver4 sxy]# cd hadoop/etc/hadoop/[rootserver4 hadoop]# vim workers添加server4[sxyserver1 hadoop]$ vim mapred-site.xml配置解释指定 MapReduce 任务运行调度框架为 YARN并配置 MR 程序依赖包路径保证 MapReduce 任务可以正常提交运行。[sxyserver1 hadoop]$ vim yarn-site.xml配置解释开启 YARN 的 shuffle 服务Map 阶段输出的数据依靠 shuffle 传递给 Reduce配置环境变量白名单NodeManager 容器可以读取 Hadoop 相关环境变量避免 MR 任务运行报环境缺失错误。[sxyserver1 hadoop]$ vim hdfs-site.xml配置解释集群扩容至 3 个数据节点修改数据块副本数为 3和生产环境标准配置保持一致三份副本分散存储在不同 DataNode提升数据容错能力。[sxyserver1 hadoop]$ pwd/home/sxy/hadoop在主节点启动YARN整套服务[sxyserver1 hadoop]$ sbin/start-yarn.shserver4手动验证进程也可直接使用一键脚本批量启停[sxyserver4 ~]$ /home/sxy/hadoop/bin/hdfs --daemon start datanode[sxyserver4 ~]$ /home/sxy/jdk/bin/jps正常启动后server4 节点必须看到两个进程DataNodeHDFS 数据存储进程NodeManagerYARN 节点资源管理进程查看节点server4已就位今天的博客到这里就结束了886~