如果前面没搭建docker,详情请看这篇文章:https://abytelalala.cn/index.php/2024/06/24/ubentu%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e9%83%a8%e7%bd%b2docker/
nano /etc/docker/daemon.json
写入如下三行内容
{
"registry-mirrors": ["https://docker.foreverlink.love/"]
}
service docker restart
docker info//验证成功替换成功没有
docker pull ubuntu:latest
docker run -it ubuntu:latest
apt-get update
apt update
apt upgrade
net-tools
apt install net-tools
java
apt-get install openjdk-8-jdk
安装包
下载安装包
hadoop-3.2.2.tar.gz,
hbase-2.5.8-bin.tar.gz,
apache-zookeeper-3.7.2-bin.tar.gz
拖动到mobaXterm的虚拟机页面目录
解压移动等操作
接下来操作需要再开一个新终端,保留之前的终端
su -
docker ps //查看指定的容器id
docker cp /home/cust/hadoop-3.2.2.tar.gz <指定容器id>:/usr/local/ //移动到docker里
docker cp /home/cust/hbase-2.5.8-bin.tar.gz <指定容器id>:/usr/local/
docker cp /home/cust/apache-zookeeper-3.7.2-bin.tar.gz <指定容器id>:/usr/local/ //这两个都同理
然后进入原容器的终端,输入如下命令
cd /usr/local
ls
//查看是否转移到这里来了
tar -zxvf hadoop-3.2.2.tar.gz
mv hadoop-3.2.2 /usr/local/hadoop
tar -zxvf apache-zookeeper-3.7.2-bin.tar.gz
mv apache-zookeeper-3.7.2-bin /usr/local/zookeeper
tar -zxvf hbase-2.5.8-bin.tar.gz
mv hbase-2.5.8 /usr/local/hbase //具体你们文件解压后是什么名字,具体用ls命令来查看修改
添加环境变量
apt install nano
nano /etc/profile
在/etc/profile添加如下内容
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#root启动,添加以下环境
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
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
ssh免密登入
apt-get update
apt-get install systemd
apt-get update --fix-missing
apt-get install openssh-server
ssh-keygen -t rsa //遇见输入密码什么的都回车
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
service ssh start
service ssh status
//检查一下sshd是否开启
ssh localhost
//运行完成会弹出一个问你第一次登陆是否的问题
//你要回答yes,不要只回答一个y
hadoop配置文件
在/usr/local/hadoop/etc/hadoop/文件夹下
hadoop-env.sh文件
加入:
# 显式声明java路径
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<!-- 配置到hadoop目录下temp文件夹 -->
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml文件
<configuration>
<property>
<!--指定hdfs保存数据副本的数量,包括自己,默认为3-->
<!--伪分布式模式,此值必须为1-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!-- name node 存放 name table 的目录 -->
<value>file:/usr/local/hadoop/tmp/hdfs/name</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<!-- data node 存放数据 block 的目录 -->
<value>file:/usr/local/hadoop/tmp/hdfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
mapred-site.xml 文件
<configuration>
<property>
<!--指定mapreduce运行在yarn上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
yarn-site.xml 文件
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
workers文件
hadoop01
hadoop02
hadoop03
zookeeper配置
在/usr/local/zookeeper/conf/文件夹下
zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
myid文件
在集群每台机器的 dataDir 目录下建立 myid 文件,文件内容与 server.x 的 x 值一致,我们这里是在镜像修改配置,所以先都弄成1,之后再改。
cd /usr/local/zookeeper
mkdir data
nano myid
myid内容如下:
1
hbase配置
在/usr/local/hbase/conf/文件夹下
hbase-site.xml文件
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper/data</value>
</property>
</configuration>
hbase-env.sh文件
加入:
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=flase
backup-master文件
hadoop01
regionservers文件
hadoop01
hadoop02
hadoop03
提交镜像
docker ps -a
//找到你的容器id
docker commit <容器id> hbase
//将这个状态创建为名为hbase的镜像
run
docker run -d -p 16000:16000 -p 16030:16030 -p 16020:16020 -p 2181:2181 -p 2888:2888 -p 3888:3888 -p 50070:50070 -p 8020:8020 -p 50075:50075 -p 50010:50010 -p 8088:8088 -p 8032:8032 -p 8042:8042 -p 8040:8040 -p 19888:19888 -p 8080:8080 -p 4040-4050:4040-4050 -p 9000:9000 -p 8001:8001 -p 50090:50090 -p 9090:9090 -p 7070:7070 -p 7077:7077 -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -it -h hadoop01 --name hadoop01 hbase
docker run -d -it -h hadoop02 --name hadoop02 hbase
docker run -d -it -h hadoop03 --name hadoop03 hbase
修改02,03机器上的myid
docker start hadoop01 hadoop02 hadoop03
docker exec -it hadoop01 bash
exit
docker exec -it hadoop02 bash //分别在不同终端运行
cd /usr/local/zookeeper/data
nano myid
将其myid内容修改为2
exit
docker exec -it hadoop03 bash //分别在不同终端运行
cd /usr/local/zookeeper/data
nano myid
将其myid内容修改为3
exit
修改hosts文件
docker exec -it hadoop01 bash
docker exec -it hadoop02 bash
docker exec -it hadoop03 bash
//进入终端后
su - //进入一下root权限不然一会环境变量用不了
三个终端都输入如下
nano /etc/hosts
//修改ip和主机映射关系为如下内容
172.17.0.2 hadoop01
172.17.0.3 hadoop02
172.17.0.4 hadoop03
三个机器互相ssh
//三个终端都要打这几行命令
//注意在交互过程要输入yes全部三个字母,不要只说一个y
service ssh start
ssh hadoop01
exit
ssh hadoop02
exit
ssh hadoop03
exit
启动
先启动hadoop集群
su -
hdfs namenode -format //初始化
start-all.sh //启动
jps //查看一下
结果:
root@hadoop01:~# jps
816 ResourceManager
1393 Jps
299 NameNode
477 DataNode
990 NodeManager
root@hadoop01:~#
stop-all.sh //停止,注意只是测试停止,之后的都需要这个作为基础的,记得重新打开
zookeeper启动需要三台机器都启动,停止也是分别停止,三台机器都启动才能看见状态
su -
zkServer.sh start
zkServer.sh status //需要三台都启动后再查看状态
zkServer.sh stop //停止,注意只是测试停止,之后的都需要这个作为基础的,记得重新打开
hbase启动在hadoop01上启动就行了
su -
start-hbase.sh
hbase shell //进入控制台
create 'c','d'
list //展示刚刚建立的表
exit
hbase-daemon.sh start thrift //启动thrift服务,python可以连接
stop-hbase.sh //停止,注意只是测试停止,之后的都需要这个作为基础的,记得重新打开
最后的结果应该是这些
root@hadoop01:~# jps
4705 NameNode
2354 DataNode
6786 ThriftServer
5188 ResourceManager
5832 QuorumPeerMain
6058 HMaster
6203 HRegionServer
3021 NodeManager
6893 Jps
root@hadoop01:~#