docker5_搭建hadoop集群


链接: 基于CentOS 8 x86的hadoop docker集群搭建

连接进入node1容器

docker exec -it gpb_hdp_node1 bash
或
ssh -p 10122 root@localhost

1、安装Mysql

因为是在线安装Mysql,而服务器无法连接外网,先安装离线的组件。

2、安装Zookeeper

下载并上传zookeeper-3.4.9.tar.gz安装包到node1

ubuntu@node2:/home/data$ scp -P 10122 apache-zookeeper-3.5.7-bin.tar.gz root@localhost:/root

解压到/export/server/目录

[root@69432059c763 server]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /export/server/

创建软连接

ln -s /export/server/apache-zookeeper-3.5.7-bin /export/server/zookeeper

修改配置文件
第一台机器修改配置文件

cd /export/server/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
mkdir -p /export/server/zookeeper/zkdatas/

编辑zoo.cfg ,修改或增加下面几项

dataDir=/export/server/zookeeper/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少个小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

安装包分发并修改myid值

scp -r /export/server/zookeeper/ node2:/export/server/ 
scp -r /export/server/zookeeper/ node3:/export/server/

添加myid配置
在/export/server/zookeeper/zkdatas/ 下创建myid文件,并写入1

echo "1" > /export/server/zookeeper/zkdatas/myid
ssh node2 "echo \"2\" > /export/server/zookeeper/zkdatas/myid"
ssh node3 "echo \"3\" > /export/server/zookeeper/zkdatas/myid"

三台机器启动zookeeper服务
启动服务(三台服务器分别执行)

/export/server/zookeeper/bin/zkServer.sh start
ssh node2 
/export/server/zookeeper/bin/zkServer.sh start
ssh node3 
/export/server/zookeeper/bin/zkServer.sh start

检查zookeeper是否启动成功

[root@068874a8c481 ~]# ssh node1
Last login: Thu May 25 11:48:00 2023 from 172.17.0.5
[root@69432059c763 ~]# jps
1876 Jps
1770 QuorumPeerMain
[root@69432059c763 ~]# /export/server/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/server/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@69432059c763 ~]#

3、安装Hadoop

下载并上传hadoop-3.1.3.tar.gz安装包到node1

ubuntu@node2:/home/data$ scp -P 10122 hadoop-3.1.3.tar.gz root@localhost:/root

解压到/export/server/目录

tar -zxvf hadoop-3.1.3.tar.gz -C /export/server/

重命名文件夹

mv /export/server/hadoop-3.1.3 /export/server/hadoop

这里用软连接会有点问题,日志文件会默认走/export/server/hadoop-3.1.3/logs这个路径,导致从节点找不到这个路径

修改配置文件

1.hadoop-env.sh
vim /export/server/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_231
export HADOOP_HOME=/export/server/hadoop

#文件最后添加 设置用户以执行对应角色shell命令
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
2.core-site.xml
mkdir -p /export/server/hadoop/hadoopDatas/tempDatas/
vim /export/server/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
    <name>fs.defaultFS</name>
		<!-- hdfs的服务端口 -->
    <value>hdfs://node1:8020</value>
</property>

<property>
  <!-- 指定临时存储空间 -->
  <name>hadoop.tmp.dir</name>
	<!-- 这个路径需要手动创建 -->
  <value>/export/server/hadoop/hadoopDatas/tempDatas</value>
</property>

<!-- 缓冲区大小,实际工作中根据服务器的性能动态调整 -->
<property>
  <name>io.file.buffer.size</name>
  <value>4096</value>
</property>

 <!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
<property>
  <name>fs.trash.interval</name>
  <!-- 7-->
  <value>10080</value>
</property>

<!-- 设置HDFS web UI用户身份 -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

<!-- 整合hive -->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
</configuration>
3.hdfs-site.xml
mkdir -p /export/server/hadoop/hadoopDatas/namenodeDatas/
mkdir -p /export/server/hadoop/hadoopDatas/namenodeDatas2/
mkdir -p /export/server/hadoop/hadoopDatas/nn/edits/
mkdir -p /export/server/hadoop/hadoopDatas/snn/name/
mkdir -p /export/server/hadoop/hadoopDatas/dfs/snn/edits/
vim /export/server/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
        <!-- 指定secondaryNameNode的web地址 -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>node2:50090</value>
        </property>

        <!-- 指定namenode的web访问地址和端口 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>node1:50070</value>
        </property>
        <!-- 指定namenode元数据的存放位置 -->
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///export/server/hadoop/hadoopDatas/namenodeDatas,file:///export/server/hadoop/hadoopDatas/namenodeDatas2</value>
        </property>
        <!--  定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割  -->
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///export/server/hadoop/hadoopDatas/datanodeDatas,file:///export/server/hadoop/hadoopDatas/datanodeDatas2</value>
        </property>

        <!-- 指定namenode日志文件的存放目录 -->
        <property>
                <name>dfs.namenode.edits.dir</name>
                <value>file:///export/server/hadoop/hadoopDatas/nn/edits</value>
        </property>

        <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>file:///export/server/hadoop/hadoopDatas/snn/name</value>
        </property>
        <property>
                <name>dfs.namenode.checkpoint.edits.dir</name>
                <value>file:///export/server/hadoop/hadoopDatas/dfs/snn/edits</value>
        </property>
        <!-- 文件切片的副本个数,也就是每个切片冗余存储的个数-->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>

        <!-- 设置HDFS的文件权限-->
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>

        <!-- 设置一个文件切片的大小:128M-->
        <property>
                <name>dfs.blocksize</name>
                <value>134217728</value>
        </property>
</configuration>

4.mapred-site.xml

/export/server/hadoop/etc/hadoop/mapred-site.xml

如果这个没有源文件,有一个模板文件(mapred-site.xml.template),复制模板文件再重命名mapred-site.xml即可

vim /export/server/hadoop/etc/hadoop/mapred-site.xml
 <configuration>
        <!-- 指定分布式计算使用的框架是yarn。yarn集群模式 local本地模式 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

        <!-- 开启MapReduce小任务模式 -->
        <property>
                <name>mapreduce.job.ubertask.enable</name>
                <value>true</value>
        </property>

        <!-- 设置历史任务的主机和端口 -->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>node1:10020</value>
        </property>

        <!-- 设置网页访问历史任务的主机和端口 -->
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>node1:19888</value>
        </property>

        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/export/server/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/export/server/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/export/server/hadoop</value>
        </property>
</configuration>
5.yarn-site.xml
vim /export/server/hadoop/etc/hadoop/yarn-site.xml
<configuration>
        <!-- 配置yarn主节点的位置 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>node1</value>
        </property>
				
				<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MR程序。-->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

        <!-- 开启日志聚合功能,收集每个容器的日志集中存储在一个地方 -->
        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
        </property>
        <!-- 设置聚合日志在hdfs上的保存时间 -->
        <property>
                <name>yarn.log-aggregation.retain-seconds</name>
                <value>604800</value>
        </property>
        <!-- 设置yarn集群的内存分配方案 -->
        <property>
                <name>yarn.nodemanager.resource.memory-mb</name>
                <value>20480</value>
        </property>

        <property>
                 <name>yarn.scheduler.minimum-allocation-mb</name>
                <value>2048</value>
        </property>
				<!-- 容器虚拟内存与物理内存之间的比率。-->
        <property>
                <name>yarn.nodemanager.vmem-pmem-ratio</name>
                <value>2.1</value>
        </property>
</configuration>
6.mapred-env.sh
vim /export/server/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_231
7.workers
vim /export/server/hadoop/etc/hadoop/workers
node1
node2
node3

配置Hadoop环境变量

1.创建文件夹
mkdir -p /export/server/hadoop/hadoopDatas/tempDatas
mkdir -p /export/server/hadoop/hadoopDatas/namenodeDatas
mkdir -p /export/server/hadoop/hadoopDatas/namenodeDatas2
mkdir -p /export/server/hadoop/hadoopDatas/datanodeDatas
mkdir -p /export/server/hadoop/hadoopDatas/datanodeDatas2
mkdir -p /export/server/hadoop/hadoopDatas/nn/edits
mkdir -p /export/server/hadoop/hadoopDatas/snn/name
mkdir -p /export/server/hadoop/hadoopDatas/dfs/snn/edits

使用tree命令进行检查

[root@69432059c763 hadoopDatas]# tree /export/server/hadoop/hadoopDatas
/export/server/hadoop/hadoopDatas
├── datanodeDatas
├── datanodeDatas2
├── dfs
│   └── snn
│       └── edits
├── namenodeDatas
├── namenodeDatas2
├── nn
│   └── edits
├── snn
│   └── name
└── tempDatas

12 directories, 0 files

2.分发hadoop到node2、node3
cd /export/server/
scp -r hadoop node2:$PWD
scp -r hadoop node3:$PWD
3.配置环境变量
vim /etc/profile.d/my_env.sh
export HADOOP_HOME=/export/server/hadoop
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

保存退出后使用source /etc/profile.d/my_env.sh 使其生效
在三台机器上都要进行配置

scp /etc/profile.d/my_env.sh node2:/etc/profile.d/
scp /etc/profile.d/my_env.sh node3:/etc/profile.d/
source /etc/profile.d/my_env.sh
ssh node2 
source /etc/profile.d/my_env.sh
ssh node3 
source /etc/profile.d/my_env.sh
4.配置环境变量

注意在启动Hadoop之前,要先启动Zookeeper
主要启动两个模块:HDFS和YARN
HDFS首次启动需要格式化,之后启动不需要。
在第一台机器执行以下命令

cd /export/server/hadoop
bin/hdfs namenode -format  	# 注意:这一步是对namenode的格式化,创建一些文件与目录,只需要创建一次即可,如果再次使用则会导致数据丢失
sbin/start-dfs.sh			# 启动hdfs
sbin/stop-dfs.sh			# 关闭hdfs
sbin/start-yarn.sh			# 启动yarn
sbin/stop-yarn.sh			# 关闭yarn
sbin/mr-jobhistory-daemon.sh start historyserver#运行以后docker卡死

web浏览器访问端口,查看界面(注意提前映射好端口)
http://172.23.27.197:50070/explorer.html#/ 查看hdfs集群
http://172.23.27.197:8088/cluster 查看yarn集群
http://172.23.27.197:19888/jobhistory 查看历史完成的任务

4、安装Hive

上传安装包并解压

ubuntu@node2:/home/data$ scp -P 10122 apache-hive-3.1.2-bin.tar.gz root@localhost:/root
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server/

创建软连接

cd /export/server/
ln -s apache-hive-3.1.2-bin/ hive

修改配置文件

解决 hadoop、 hive 之间 guava 版本差异
如果不一样的话需要进行如下操作,当前所选版本是一致的

cd /export/server/hive 
rm -rf lib/guava-19.0.jar 
cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

添加 mysql jdbc 驱动到 hive 安装包 lib/文件下

mysql-connector-java-5.1.27-bin.jar
修改 hive 环境变量文件 添加 Hadoop_HOME


cd /export/server/hive/conf/ 
mv hive-env.sh.template hive-env.sh 
vim hive-env.sh 

export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf 
export HIVE_AUX_JARS_PATH=/export/server/hive/lib

新增 hive-site.xml 配置 mysql 等相关信息

vim hive-site.xml
<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://node3:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>

    <!-- H2S运行绑定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node1</value>
    </property>

    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node1:9083</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 关闭元数据存储版本的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

初始化

初始化metadata

cd /export/server/hive
bin/schematool -initSchema -dbType mysql -verbos

初始化成功会在mysql中创建74张表

启动

// An highlighted block
var foo = 'bar';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Docker Compose来搭建Hadoop集群,以下是一个示例的docker-compose.yml文件: version: '3' services: namenode: image: sequenceiq/hadoop-docker:2.7.1 container_name: namenode hostname: namenode ports: - "50070:50070" - "9000:9000" volumes: - ./data/namenode:/hadoop/dfs/name environment: - CLUSTER_NAME=hadoop - NODE_TYPE=NAMENODE - CORE_CONF_fs_defaultFS=hdfs://namenode:9000 - CORE_CONF_hadoop_http_staticuser_user=root - CORE_CONF_hadoop_proxyuser_root_hosts=* - CORE_CONF_hadoop_proxyuser_root_groups=* - HDFS_CONF_dfs_namenode_name_dir=file:///hadoop/dfs/name datanode1: image: sequenceiq/hadoop-docker:2.7.1 container_name: datanode1 hostname: datanode1 ports: - "50075:50075" volumes: - ./data/datanode1:/hadoop/dfs/data environment: - CLUSTER_NAME=hadoop - NODE_TYPE=DATANODE - CORE_CONF_fs_defaultFS=hdfs://namenode:9000 - CORE_CONF_hadoop_http_staticuser_user=root - CORE_CONF_hadoop_proxyuser_root_hosts=* - CORE_CONF_hadoop_proxyuser_root_groups=* - HDFS_CONF_dfs_datanode_data_dir=file:///hadoop/dfs/data datanode2: image: sequenceiq/hadoop-docker:2.7.1 container_name: datanode2 hostname: datanode2 ports: - "50075:50075" volumes: - ./data/datanode2:/hadoop/dfs/data environment: - CLUSTER_NAME=hadoop - NODE_TYPE=DATANODE - CORE_CONF_fs_defaultFS=hdfs://namenode:9000 - CORE_CONF_hadoop_http_staticuser_user=root - CORE_CONF_hadoop_proxyuser_root_hosts=* - CORE_CONF_hadoop_proxyuser_root_groups=* - HDFS_CONF_dfs_datanode_data_dir=file:///hadoop/dfs/data 注意:这只是一个示例,实际使用时需要根据自己的需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值