Hadoop 3.3.5部署 发表于 2025-02-25 | 更新于 2025-02-28
| 总字数: 4.4k | 阅读时长: 20分钟 | 浏览量:
Hadoop 3.3.5部署
前情提要
本次实验采用Ubuntu 24.04LTS,自行安装
Ubuntu 24.04.02 LTS 初始化安装 | 严千屹博客
本笔记分伪分布
和分布式
两大块,但建议从头开始观看
文章所需资源可点击这里 下载
伪分布主机拓扑
主机名
ip(NAT)
内存
硬盘
qianyios
192.168.48.128
7G
100G
分布式主机拓扑
机名
ip(NAT)
内存
硬盘
master
192.168.48.128
6G
100G
slave
192.168.48.129
6G
100G
基础初始化
简单部署一个单节点的hadoop,然后打快照,后续给伪分布和分布式做基础底座
由于本系统在Ubuntu 24.04.02 LTS 初始化安装 | 严千屹博客 已经进行了设置阿里源和关闭防火墙,这里就不再赘述了
切换root用户
1 2 3 qianyios@qianyios:~$ su - root 密码: root@qianyios:~#
基础配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 cat >init.sh<<"EOF" # !/bin/bash sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl restart ssh # 添加 hosts echo "192.168.48.128 qianyios" >> /etc/hosts echo "已添加 hosts 条目。" # 设置主机名 hostnamectl set-hostname qianyios echo "主机名已设置为 qianyios。" # 安装 sshpass apt install -y sshpass || { echo "安装 sshpass 失败"; exit 1; } echo "sshpass 安装完成。" # 目标主机列表 hosts=("qianyios") # 密码 password="123456" # 生成 SSH 密钥对 ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa echo "SSH 密钥对已生成。" # 循环遍历目标主机 for host in "${hosts[@]}" do echo "正在为 $host 配置免密登录..." sshpass -p "$password" ssh-copy-id -o StrictHostKeyChecking=no "$host" || { echo "复制公钥到 $host 失败"; exit 1; } sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$host" "echo '免密登录成功'" || { echo "验证免密登录失败"; exit 1; } done reboot EOF bash init.sh
测试免密登入
1 2 3 4 5 6 7 root@qianyios:~# ssh qianyios Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.11.0-17-generic x86_64) ...... Last login: Tue Feb 25 00:02:32 2025 from 127.0.0.1 root@qianyios:~#
下载所需资源 并解压到/root/hadoop/下,如下图
安装java环境和hadoop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cd /root/hadoopmkdir /usr/lib/jvmtar -xf /root/hadoop/jdk-8u371-linux-x64.tar.gz -C /usr/lib/jvm echo "export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371" >> /etc/profileecho "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profilesource /etc/profilejava -version tar -zxf hadoop-3.3.5.tar.gz -C /usr/local mv /usr/local/hadoop-3.3.5/ /usr/local/hadoopecho "export HADOOP_HOME=/usr/local/hadoop" >> /etc/profileecho "export PATH=\$HADOOP_HOME/bin/:\$HADOOP_HOME/sbin/:\$PATH" >> /etc/profilesource /etc/profilehadoop version
成功图
这时候关机
打个快照,方便做分布式部署,如果你要做分布式的直接跳到
4.分布式
伪分布
开机吧!
编写配置文件
编写cort-site.yaml文件
修改下面hdfs://qianyios:9000中的qianyios为你的主机名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cat > /usr/local/hadoop/etc/hadoop/core-site.xml<< "EOF" <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type ="text/xsl" href="configuration.xsl" ?> <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://qianyios:9000</value> </property> </configuration> EOF
编写hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cat >/usr/local/hadoop/etc/hadoop/hdfs-site.xml<<"EOF" <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> EOF
启动hdfs服务
hadoop初始化
这条命令只需要运行一次,以后都不要再运行了!!!!!!
这条命令只需要运行一次,以后都不要再运行了!!!!!!
这条命令只需要运行一次,以后都不要再运行了!!!!!!
添加环境变量
1 2 3 4 5 6 echo "export HDFS_NAMENODE_USER=root" >> /etc/profileecho "export HDFS_DATANODE_USER=root" >> /etc/profileecho "export HDFS_SECONDARYNAMENODE_USER=root" >> /etc/profileecho "export YARN_RESOURCEMANAGER_USER=root" >> /etc/profileecho "export YARN_NODEMANAGER_USER=root" >> /etc/profilesource /etc/profile
修改hadoop配置文件
1 echo "export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371" >> /usr/local/hadoop/etc/hadoop/hadoop-env.sh
启动hadoop
localhost: Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
这是一个 SSH 的警告信息,表明 SSH 客户端首次连接到 localhost
时,将 localhost
的主机密钥(使用 ED25519 算法生成)添加到了 known_hosts
文件中。
这是 SSH 的正常行为,用于防止中间人攻击。每次 SSH 客户端连接到一个新主机时,都会将主机的密钥记录下来。
启动historyserver服务
1 2 3 start-all.sh mapred --daemon start historyserver
关闭用
1 mapred --daemon stop historyserver
正常启动hadoop你会看到如下服务
1 2 3 4 5 6 7 8 root@qianyios:~# jps 14050 NodeManager 10245 JobHistoryServer 13894 ResourceManager 13255 NameNode 13449 DataNode 13673 SecondaryNameNode 14606 Jps
访问网页ip:9870查看hdfs
访问网页ip:8088查看hadoop
至此伪分布hadoop就搞定了,这时候你要在你这里打上一个伪分布的快照
分布式
前情提要
机名
ip(NAT)
内存
硬盘
master
192.168.48.128
6G
100G
slave
192.168.48.129
6G
100G
由于前面不是做了一个hadoop的一个基础快照吗,这时候你就对那个基础快照进行完整克隆两个出来,分别命名为master和slave
这时候先开slave,master不要开
1 vim /etc/netplan/01-network-manager-all.yaml
ip改成192.168.48.129
1 2 3 4 5 6 7 8 9 10 11 12 13 # Let NetworkManager manage all devices on this system network: ethernets: ens33: addresses: [192.168.48.129/24] dhcp4: false nameservers: addresses: [192.168.48.2, 114.114.114.114] routes: - to: default via: 192.168.48.2 version: 2 renderer: NetworkManager
重启网卡
这时候再把master开机,接着就可以进行基础操作了
基础操作
以下我会提前告诉你哪些是哪个节点要操作的命令
操作节点:=master和slave =
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 cat >fbsnit.sh <<"EOF" # !/bin/bash if [ $# -eq 1 ];then echo "设置主机名为:$1" else echo "使用方法:sh $0 主机名" exit 2 fi sudo sed -i '/qianyios/d' /etc/hosts # 这里你要改成你的ip grep -q "^192\.168\.48\.128\s\+master" /etc/hosts || echo "192.168.48.128 master" >> /etc/hosts grep -q "^192\.168\.48\.129\s\+slave" /etc/hosts || echo "192.168.48.129 slave" >> /etc/hosts hostnamectl set-hostname $1 # 设置免密 apt install -y sshpass || { echo "安装 sshpass 失败"; exit 1; } echo "sshpass 安装完成。" # 目标主机列表 hosts=("master" "slave") # 密码 password="123456" # 生成 SSH 密钥对 ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa echo "SSH 密钥对已生成。" # 循环遍历目标主机 for host in "${hosts[@]}" do echo "正在为 $host 配置免密登录..." sshpass -p "$password" ssh-copy-id -o StrictHostKeyChecking=no "$host" || { echo "复制公钥到 $host 失败"; exit 1; } sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$host" "echo '免密登录成功'" || { echo "验证免密登录失败"; exit 1; } done reboot EOF
1 2 # master执行这个 bash fbsnit.sh master
修改配置文件
操作节点:master
1.修改workers文件
在Hadoop集群中,workers
文件是一个非常重要的配置文件,它用于指定Hadoop集群中所有从节点(DataNode和TaskTracker/NodeManager)的主机名或IP地址
将slave修改成你自己的从节点的主机名
1 2 3 cat> /usr/local/hadoop/etc/hadoop/workers <<"EOF" slave EOF
2.修改core-site.xml
操作节点:master
将master修改成你自己的主节点的主机名
作用 :配置Hadoop的核心参数,主要涉及文件系统的访问和临时目录的设置。
fs.defaultFS
:指定HDFS的默认访问路径,格式为hdfs://<namenode-host>:<port>
。这是Hadoop客户端访问HDFS的入口。
hadoop.tmp.dir
:指定Hadoop的临时目录,用于存储运行时的临时文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 cat > /usr/local/hadoop/etc/hadoop/core-site.xml<<"EOF" <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration> EOF
3.修改hdfs-site.xml
操作节点:master
将master修改成你自己的主节点的主机名
作用 :配置HDFS(Hadoop Distributed File System)的高级参数。
dfs.namenode.secondary.http-address
:指定Secondary NameNode的HTTP地址。
dfs.replication
:设置HDFS数据块的副本数量,默认为3,这里设置为1(适合单节点测试环境)。
dfs.namenode.name.dir
:指定NameNode存储元数据的目录。
dfs.datanode.data.dir
:指定DataNode存储数据块的目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 cat> /usr/local/hadoop/etc/hadoop/hdfs-site.xml<<"EOF" <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> EOF
4.修改mapred-site.xml配置文件
操作节点:master
将master修改成你自己的主节点的主机名
作用 :配置MapReduce作业的运行参数。
mapreduce.framework.name
:指定MapReduce作业运行的框架(这里是YARN)。
mapreduce.jobhistory.address
和 mapreduce.jobhistory.webapp.address
:指定MapReduce作业历史服务器的地址和Web界面地址。
环境变量配置 :设置MapReduce作业运行时的环境变量,例如HADOOP_MAPRED_HOME
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 cat > /usr/local/hadoop/etc/hadoop/mapred-site.xml<<"EOF" <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> </configuration> EOF
5.修改yarn-site.xml文件
操作节点:master
将master修改成你自己的主节点的主机名
作用 :配置YARN(Yet Another Resource Negotiator)的参数。
yarn.resourcemanager.hostname
:指定ResourceManager的主机名,用于资源管理和作业调度。
yarn.nodemanager.aux-services
:启用MapReduce的Shuffle服务,这是MapReduce作业运行的必要配置。
1 2 3 4 5 6 7 8 9 10 11 12 cat > /usr/local/hadoop/etc/hadoop/yarn-site.xml<<"EOF" <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> EOF
将上述配置拷贝到slave
操作节点:master
1 2 3 4 5 6 7 cd /usr/local/hadoop/etc/hadoop/scp core-site.xml slave:/usr/local/hadoop/etc/hadoop/ scp hdfs-site.xml slave:/usr/local/hadoop/etc/hadoop/ scp mapred-site.xml slave:/usr/local/hadoop/etc/hadoop/ scp workers slave:/usr/local/hadoop/etc/hadoop/ scp yarn-site.xml slave:/usr/local/hadoop/etc/hadoop/ cd
这里是不用输入密码,如果提示你要输入密码,说明你前面4.2的ssh免密没做好
修改环境变量拷贝到slave
操作节点:master
1 2 3 4 5 6 7 8 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 scp /etc/profile slave:/etc/profile source /etc/profile
修改hadoop环境配置文件
操作节点:master
并将配置文件拷贝到slave
1 2 echo "export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371" >> /usr/local/hadoop/etc/hadoop/hadoop-env.shscp /usr/local/hadoop/etc/hadoop/hadoop-env.sh slave:/usr/local/hadoop/etc/hadoop/hadoop-env.sh
集群启动
操作节点:master
master初始化
启动hadoop
操作节点:master
启动的时候如果有这些没关系
启动historyserver
操作节点:master
1 mapred --daemon start historyserver
关闭用
1 mapred --daemon stop historyserver
查看进程
两个节点说运行的服务如下
1 2 3 4 5 6 7 8 9 10 11 root@master:~# jps 31364 ResourceManager 31140 SecondaryNameNode 30856 NameNode 32282 Jps 28046 JobHistoryServer root@slave:~# jps 6304 DataNode 6444 NodeManager 6605 Jps
访问hadoop页面
http://192.168.48.128:8088/
http://192.168.48.128:9870/
至此分布式hadoop集群构建成功
这时候就你要给你这两台机,打上hadoop集群部署成功的快照,以便你后期做项目不报错可以恢复
HBase
HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容、缩容和数据容灾,是大数据领域中 Key-Value 数据结构存储最常用的数据库方案。
本实验部署在伪分布机子上
安装
1 2 3 4 5 6 7 tar -xf /root/hadoop/hbase-2.5.4-bin.tar.gz -C /usr/local/ mv /usr/local/hbase-2.5.4 /usr/local/hbaseecho "export HBASE_HOME=/usr/local/hbase" >> /etc/profileecho "export PATH=\$PATH:\$HBASE_HOME/bin" >> /etc/profilesource /etc/profilesed -i "s/CLASSPATH=\${CLASSPATH}:\$JAVA_HOME\/lib\/tools.jar/CLASSPATH=\${CLASSPATH}:\$JAVA_HOME\/lib\/tools.jar:\/usr\/local\/hbase\/lib\/*/g" /usr/local/hbase/bin/hbase hbase version
HBase配置
文件里的qianyios要改成你的主机名,运行 HDFS NameNode 的主机名。
hbase.cluster.distributed
设置为 true
表示 HBase 以分布式模式运行。
如果设置为 false
,HBase 将以单机模式运行(通常用于测试)。
HBASE_MANAGES_ZK=tru
HBASE_MANAGES_ZK=true
:
表示 HBase 将启动并管理自己的嵌入式 ZooKeeper 实例。
这种模式通常用于单机环境或小型测试环境,简化了配置和管理。
HBASE_MANAGES_ZK=false
:
表示 HBase 不会启动自己的 ZooKeeper 实例,而是依赖外部独立的 ZooKeeper 集群。
这种模式适用于生产环境,推荐使用独立的 ZooKeeper 集群以提高稳定性和性能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 echo "export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371" >> $HBASE_HOME /conf/hbase-env.shecho "export HBASE_CLASSPATH=/usr/local/hbase/conf" >> $HBASE_HOME /conf/hbase-env.shecho "export HBASE_MANAGES_ZK=true" >> $HBASE_HOME /conf/hbase-env.shecho "export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true" >> $HBASE_HOME /conf/hbase-env.shcat >$HBASE_HOME /conf/hbase-site.xml<<"EOF" <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://qianyios:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true </value> </property> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false </value> </property> </configuration> EOF
启动hbase
1 2 start-all.sh start-hbase.sh
然后输入jps,有以下三个个就安装成功
测试hbase
能运行没报错就行
访问hbase网页
http://192.168.48.128:16010/
关机备份打快照
关机顺序
1 2 3 stop-hbase.sh stop-all.sh poweroff
开机顺序
1 2 start-all.sh start-hbase.sh
实例测试1
学号(S_No)
姓名(S_Name)
性别(S_Sex)
年龄(S_Age)
2015001
zhangsan
male
23
2015002
Mary
female
22
2015003
Lisi
male
24
创建学生表
1 2 3 4 hbase shell create 'student' ,'no' ,'name' ,'sex' ,'age' describe 'student'
添加数据
s001为行键,行键可以自定义,但是要注意区别,按照前面的学生表,输入第一行s001的学生信息,我这里就简单输入一些信息,做例子用
1 2 3 4 5 scan 'student' put 'student' ,'s001' ,'no' ,'2015001' put 'student' ,'s001' ,'name' ,'zhangsan' scan 'student'
查看整行
查看单元格
1 get 'student','s001','name'
实例测试2
这是一个订单表
创建order表
创建一个order表,出现两列族userinfo,orderinfo
你看这次的行是1就和上个实例的s001,是不一样,都是可以自定义的
然后在列族下创建列userinfo:name,userinfo:age,orderinfo:id,orderinfo:money
在创建列的同时附带值
1 2 3 4 5 6 7 create 'order','userinfo','orderinfo' list put 'order','1','userinfo:name','sw' put 'order','1','userinfo:age','24' put 'order','1','orderinfo:id','23333' put 'order','1','orderinfo:money','30' scan 'order'
修改数据
1 2 3 put 'order','1','userinfo:name','zhangxiaosan' get 'order','1','userinfo:name' scan 'order'
时间戳
数据添加到HBase的时候都会被记录一个时间戳
,这个时间戳被我们当做一个版本。
当修改某一条的时候,本质上是往里边新增一条数据,记录的版本加一。
现在要把这条记录的值改为40,实际上就是多添加一条记录,在读的时候按照时间戳读最新的记录
1 2 3 get 'order','1','orderinfo:money' put 'order','1','orderinfo:money','40' get 'order','1','orderinfo:money'
删除数据
1 2 3 scan 'student' delete 'student','s001','name' get 'student','s001','name'
删除表
1 2 3 disable 'student' describe 'student' drop 'student'
千屹博客旗下的所有文章,是通过本人课堂学习和课外自学所精心整理的知识巨著 难免会有出错的地方 如果细心的你发现了小失误,可以在下方评论区告诉我,或者私信我! 非常感谢大家的热烈支持!