找回密码
 立即注册
首页 业界区 业界 从Podman开始一步步构建Hadoop开发集群

从Podman开始一步步构建Hadoop开发集群

轧岔 2025-8-17 18:28:20
目录

  • 摘要

    • 软件系统版本

  • Hadoop角色结构
  • Podman相关

    • 容器与宿主机网络互通

  • 零、创建容器
  • 一、Hadoop基础环境安装

    • 设置环境变量
    • 创建数据目录
    • 安装Hadoop
    • node01节点修改配置
    • 打开浏览器验证

      • HDFS上传文件
      • mapreduce跑wordcount任务验证


  • 二、Hive安装
  • 三、Spark
  • 四、Flink
  • 五、FAQ


    • 配置参考
    • Debian 9(stretch)镜像源

      • 官方

    • 腾讯
    • 阿里云


摘要

    工作关系经常开发大数据相关程序,Hive、Spark、Flink等等都会涉及,为方便随时调试程序便有了部署一个Hadoop集群的想法。在单个主机上部署集群肯定要用到容器相关技术,本人使用过Docker和Podman,在资源和性能比较有限的笔记本上面Podman的总体表现比较不错,而且还可以拉取Docker上的镜像。Podman的安装过程比较简单这里先不赘述,下面一步步展示基于Podman的Hadoop集群安装过程。
软件系统版本

系统/软件版本说明Podman Desktop1.20.2Debian9 (stretch)10(buster)默认支持的JDK 11以上版本,也通过其他方式安装JDK 8Hadoop3.3.6Hadoop角色结构

    resourcemanager好像必须跟namenode在同一台机器
flowchart BTA[Hadoop Network]B["node01 - 10.88.0.101角色:namenode (HDFS)datanode (HDFS)nodemanager (YARN)"] --> AC["node02 - 10.88.0.102角色:secondarynamenode (HDFS)datanode (HDFS)nodemanager (YARN)"] --> AD["node03 - 10.88.0.103角色:resourcemanager (YARN)datanode (HDFS)nodemanager (YARN)"] --> APodman相关

    避免挂载宿主机磁盘后遇到权限问题,登录Podman machine default
修改配置/etc/wsl.conf
[automount]
enabled=true
mountFsTab=false
options="metadata"
自动生成hosts记录问题
修改配置/etc/wsl.conf
[network]
generateHosts = false
容器与宿主机网络互通

    这里没有设置容器的端口映射,通过添加路由的方式,宿主机直接访问容器IP。在宿主机上添加路由,网关设置为Podman machine default系统的IP地址。
route ADD 10.88.0.0 MASK 255.255.0.0 172.24.137.159 IF 37
零、创建容器

创建debian 9容器并指定ip和主机名称
  1. podman run -dt --name node01 --hostname node01.data.org --ip 10.88.0.101 --add-host "node02;node02.data.org:10.88.0.102" --add-host "node03;node03.data.org:10.88.0.103" --cap-add IPC_LOCK --cap-add NET_RAW docker.io/library/debian:9.9 bash
  2. podman run -dt --name node02 --hostname node02.data.org --ip 10.88.0.102 --add-host "node01;node01.data.org:10.88.0.101" --add-host "node03;node03.data.org:10.88.0.103" --cap-add IPC_LOCK --cap-add NET_RAW docker.io/library/debian:9.9 bash
  3. podman run -dt --name node03 --hostname node03.data.org --ip 10.88.0.103 --add-host "node01;node01.data.org:10.88.0.101" --add-host "node02;node02.data.org:10.88.0.102" --cap-add IPC_LOCK --cap-add NET_RAW docker.io/library/debian:9.9 bash
复制代码
2023年以后Debian官方源地址已经修改,系统自带的源会出现404报错问题,更新官方源或者网上搜索国内公共源。
  1. # 设置系统时区和语言
  2. rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
  3. # 更新镜像源
  4. mv /etc/apt/sources.list /etc/apt/sources.list.old
  5. cat > /etc/apt/sources.list << EOF
  6. deb http://mirrors.cloud.tencent.com/debian-archive//debian/ stretch main contrib non-free
  7. deb-src http://mirrors.cloud.tencent.com/debian-archive//debian/ stretch main contrib non-free
  8. deb http://mirrors.cloud.tencent.com/debian-archive//debian/ stretch-backports main contrib non-free
  9. deb http://mirrors.cloud.tencent.com/debian-archive//debian-security/ stretch/updates main contrib non-free
  10. deb-src http://mirrors.cloud.tencent.com/debian-archive//debian-security/ stretch/updates main contrib non-free
  11. EOF
  12. apt update
复制代码
一、Hadoop基础环境安装

hadoop软件下载安装
设置环境变量
  1. apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29(更换为提示的KEY)
复制代码
创建数据目录
  1. # 安装必须软件
  2. apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
  3.         openjdk-8-jdk \
  4.         net-tools \
  5.         curl \
  6.         netcat \
  7.         gnupg \
  8.         libsnappy-dev \
  9.         openssh-server \
  10.         openssh-client \
  11.         sudo \
  12.     && rm -rf /var/lib/apt/lists/*
  13. # 创建hadoop用户并添加sudo权限
  14. chmod 640 /etc/sudoers
  15. groupadd --system --gid=10000 hadoop && useradd --system --home-dir /home/hadoop --uid=10000 --gid=hadoop hadoop && echo "hadoop ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  16. # 生成秘钥,把node01公钥导入node02和node03中,配置免密登录
  17. ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
  18. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  19. # 允许root登录,启动ssh并允许开机启动
  20. echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
  21. /etc/init.d/ssh start
  22. update-rc.d ssh enable
复制代码
安装Hadoop
  1. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export HADOOP_VERSION=3.3.6
  4. export HADOOP_HOME=/opt/hadoop-$HADOOP_VERSION
  5. echo "export LANG=zh_CN.UTF-8" >> /etc/profile
  6. echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/profile.d/hadoopbase.sh
  7. echo "export JRE_HOME=${JAVA_HOME}/jre" >> /etc/profile.d/hadoopbase.sh
  8. echo "export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib" >> /etc/profile.d/hadoopbase.sh
  9. echo "export PATH=${JAVA_HOME}/bin:\$PATH" >> /etc/profile.d/hadoopbase.sh
  10. echo "export HADOOP_VERSION=3.3.6" >> /etc/profile.d/hadoopbase.sh
  11. echo "export HADOOP_HOME=/opt/hadoop-$HADOOP_VERSION" >> /etc/profile.d/hadoopbase.sh
  12. echo "export HADOOP_CONF_DIR=/etc/hadoop" >> /etc/profile.d/hadoopbase.sh
  13. echo "export PATH=$HADOOP_HOME/bin/:\$PATH" >> /etc/profile.d/hadoopbase.sh
  14. source /etc/profile
复制代码
node01节点修改配置


  • /etc/hadoop/hadoop-env.sh
  1. mkdir -p /data/hadoop-data
  2. mkdir -p /data/hadoop/tmp
  3. mkdir -p /data/hadoop/nameNode
  4. mkdir -p /data/hadoop/dataNode
复制代码

  • /etc/hadoop/core-site.xml
  1. # 导入hadoop安装包校验KEY
  2. curl -O https://dist.apache.org/repos/dist/release/hadoop/common/KEYS
  3. gpg --import KEYS
  4. # hadoop 版本
  5. set -x \
  6.     && curl -fSL "https://www.apache.org/dist/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz" -o /tmp/hadoop.tar.gz \
  7.     && curl -fSL "https://www.apache.org/dist/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz.asc" -o /tmp/hadoop.tar.gz.asc \
  8.     && gpg --verify /tmp/hadoop.tar.gz.asc \
  9.     && tar -xf /tmp/hadoop.tar.gz -C /opt/ \
  10.     && rm /tmp/hadoop.tar.gz*
  11. ln -s $HADOOP_HOME/etc/hadoop /etc/hadoop
  12. mkdir $HADOOP_HOME/logs
复制代码

  • /etc/hadoop/hdfs-site.xml
  1. #文件最后添加
  2. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  3. export HDFS_NAMENODE_USER=root
  4. export HDFS_DATANODE_USER=root
  5. export HDFS_SECONDARYNAMENODE_USER=root
  6. export YARN_RESOURCEMANAGER_USER=root
  7. export YARN_NODEMANAGER_USER=root
复制代码

  • /etc/hadoop/mapred-site.xml
  1. <configuration>
  2.     <property>
  3.         <name>fs.defaultFS</name>
  4.         <value>hdfs://node01:8020</value>
  5.     </property>
  6.     <property>
  7.         <name>hadoop.tmp.dir</name>
  8.         <value>/data/hadoop/tmp</value>
  9.     </property>
  10.     <property>
  11.         <name>hadoop.http.staticuser.user</name>
  12.         <value>root</value>
  13.     </property>
  14.     <property>
  15.         <name>hadoop.proxyuser.root.hosts</name>
  16.         <value>*</value>
  17.     </property>
  18.     <property>
  19.         <name>hadoop.proxyuser.root.groups</name>
  20.         <value>*</value>
  21.     </property>
  22.     <property>
  23.         <name>fs.trash.interval</name>
  24.         <value>1440</value>
  25.     </property>
  26. </configuration>
复制代码

  • /etc/hadoop/yarn-site.xml  resourcemanager好像必须跟namenode在同一台机器
  1. <configuration>
  2.     <property>
  3.         <name>dfs.namenode.secondary.http-address</name>
  4.         <value>node02:50070</value>
  5.     </property>
  6.     <property>
  7.         <name>dfs.replication</name>
  8.         <value>2</value>
  9.     </property>
  10.     <property>
  11.         <name>dfs.http.address</name>
  12.         <value>0.0.0.0:50070</value>
  13.     </property>
  14.     <property>   
  15.         <name>dfs.namenode.name.dir</name>   
  16.         <value>/data/hadoop/nameNode</value>   
  17.     </property>   
  18.     <property>   
  19.         <name>dfs.datanode.data.dir</name>   
  20.         <value>/data/hadoop/dataNode</value>  
  21.     </property>
  22.     <property>
  23.       <name>dfs.permissions</name>
  24.       <value>false</value>
  25.     </property>
  26. </configuration>
复制代码

  • /etc/hadoop/workers
  1. <configuration>
  2.     <property>
  3.         <name>mapreduce.framework.name</name>
  4.         <value>yarn</value>
  5.     </property>
  6.     <property>
  7.         <name>mapreduce.jobhistory.address</name>
  8.         <value>node01:10020</value>
  9.     </property>
  10.     <property>
  11.         <name>mapreduce.jobhistory.webapp.address</name>
  12.         <value>node01:19888</value>
  13.     </property>
  14.     <property>
  15.         <name>yarn.app.mapreduce.am.env</name>
  16.         <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  17.     </property>
  18.     <property>
  19.         <name>mapreduce.map.env</name>
  20.         <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  21.     </property>
  22.     <property>
  23.         <name>mapreduce.reduce.env</name>
  24.         <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  25.     </property>
  26. </configuration>
复制代码

  • 拷贝到其他节点
  1. <configuration>
  2.     <property>
  3.         <name>yarn.resourcemanager.hostname</name>
  4.         <value>node01</value>
  5.     </property>
  6.     <property>
  7.         <name>yarn.nodemanager.aux-services</name>
  8.         <value>mapreduce_shuffle</value>
  9.     </property>
  10.     <property>
  11.         <name>yarn.nodemanager.pmem-check-enabled</name>
  12.         <value>false</value>
  13.     </property>
  14.     <property>
  15.         <name>yarn.nodemanager.vmem-check-enabled</name>
  16.         <value>false</value>
  17.     </property>
  18.     <property>
  19.         <name>yarn.log-aggregation-enable</name>
  20.         <value>true</value>
  21.     </property>
  22.     <property>
  23.         <name>yarn.log.server.url</name>
  24.         <value>http://node01:19888/jobhistory/logs</value>
  25.     </property>
  26.     <property>
  27.         <name>yarn.log-aggregation.retain-seconds</name>
  28.         <value>604800</value>
  29.     </property>
  30. </configuration>
复制代码

  • 初始启动前操作
  1. node01
  2. node02
  3. node03
复制代码

  • 启动服务
  1. scp -r /opt/hadoop-3.3.6 root@node02:/opt/
  2. scp -r /opt/hadoop-3.3.6 root@node03:/opt/
  3. # 分别在node02和node03节点创建软链接
  4. ln -s $HADOOP_HOME/etc/hadoop /etc/hadoop
复制代码
检查服务启动动是否正常
  1. # 在node01上格式化namenode
  2. hdfs namenode -format
复制代码
打开浏览器验证

HDFS上传文件

http://node01:50070/ 验证HDFS上传文件
1.png

2.png

mapreduce跑wordcount任务验证

运行wordcount测试样例统计一个文本用词数量,文本要先上传到HDFS
  1. # 在node01上执行
  2. bash $HADOOP_HOME/sbin/start-all.sh
  3. bash $HADOOP_HOME/sbin/stop-all.sh
复制代码
3.png

output目录下载和查看输出结果
4.png

5.png

    至此Hadoop平台的搭建已经完成。基础的Yarn、HDFS、MapReduce功能已经齐全,后面在此基础上完成Hive、Spark和Flink环境部署。
二、Hive安装

待补充
三、Spark

待补充
四、Flink

待补充
五、FAQ

1.容器中安装ping工具报错
需要在创建容器时添加cap-add参数IPC_LOCK和NET_RAW,desktop在Security -> Capabilities位置,命令行创建容器时添加下面参数
--cap-add=IPC_LOCK --cap-add=NET_RAW (或者--cap-add=ALL)
2.在HDFS web ui 上传文件时提示“Couldn't upload the file”

  • 检查hdfs-site.xml是否配置dfs.permissions=false
  • 检查操作上传的主机的hosts文件是否配置hadoop集群节点IP映射,上传文件时会调用域名
  • HDFS目录是否有写入权限


配置参考
  1. jps
复制代码
Debian 9(stretch)镜像源

官方
  1. ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /tmp/harrypotter.txt /output/harr
复制代码
腾讯
  1. CORE_CONF_fs_defaultFS=hdfs://namenode:9000
  2. CORE_CONF_hadoop_http_staticuser_user=root
  3. CORE_CONF_hadoop_proxyuser_hue_hosts=*
  4. CORE_CONF_hadoop_proxyuser_hue_groups=*
  5. CORE_CONF_io_compression_codecs=org.apache.hadoop.io.compress.SnappyCodec
  6. HDFS_CONF_dfs_webhdfs_enabled=true
  7. HDFS_CONF_dfs_permissions_enabled=false
  8. HDFS_CONF_dfs_namenode_datanode_registration_ip___hostname___check=false
  9. YARN_CONF_yarn_log___aggregation___enable=true
  10. YARN_CONF_yarn_log_server_url=http://historyserver:8188/applicationhistory/logs/
  11. YARN_CONF_yarn_resourcemanager_recovery_enabled=true
  12. YARN_CONF_yarn_resourcemanager_store_class=org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore
  13. YARN_CONF_yarn_resourcemanager_scheduler_class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
  14. YARN_CONF_yarn_scheduler_capacity_root_default_maximum___allocation___mb=8192
  15. YARN_CONF_yarn_scheduler_capacity_root_default_maximum___allocation___vcores=4
  16. YARN_CONF_yarn_resourcemanager_fs_state___store_uri=/rmstate
  17. YARN_CONF_yarn_resourcemanager_system___metrics___publisher_enabled=true
  18. YARN_CONF_yarn_resourcemanager_hostname=resourcemanager
  19. YARN_CONF_yarn_resourcemanager_address=resourcemanager:8032
  20. YARN_CONF_yarn_resourcemanager_scheduler_address=resourcemanager:8030
  21. YARN_CONF_yarn_resourcemanager_resource__tracker_address=resourcemanager:8031
  22. YARN_CONF_yarn_timeline___service_enabled=true
  23. YARN_CONF_yarn_timeline___service_generic___application___history_enabled=true
  24. YARN_CONF_yarn_timeline___service_hostname=historyserver
  25. YARN_CONF_mapreduce_map_output_compress=true
  26. YARN_CONF_mapred_map_output_compress_codec=org.apache.hadoop.io.compress.SnappyCodec
  27. YARN_CONF_yarn_nodemanager_resource_memory___mb=16384
  28. YARN_CONF_yarn_nodemanager_resource_cpu___vcores=8
  29. YARN_CONF_yarn_nodemanager_disk___health___checker_max___disk___utilization___per___disk___percentage=98.5
  30. YARN_CONF_yarn_nodemanager_remote___app___log___dir=/app-logs
  31. YARN_CONF_yarn_nodemanager_aux___services=mapreduce_shuffle
  32. MAPRED_CONF_mapreduce_framework_name=yarn
  33. MAPRED_CONF_mapred_child_java_opts=-Xmx4096m
  34. MAPRED_CONF_mapreduce_map_memory_mb=4096
  35. MAPRED_CONF_mapreduce_reduce_memory_mb=8192
  36. MAPRED_CONF_mapreduce_map_java_opts=-Xmx3072m
  37. MAPRED_CONF_mapreduce_reduce_java_opts=-Xmx6144m
  38. MAPRED_CONF_yarn_app_mapreduce_am_env=HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/
  39. MAPRED_CONF_mapreduce_map_env=HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/
  40. MAPRED_CONF_mapreduce_reduce_env=HADOOP_MAPRED_HOME=/opt/hadoop-3.2.1/
复制代码
阿里云
  1. deb http://archive.debian.org/debian/ stretch main contrib non-free
  2. deb-src http://archive.debian.org/debian/ stretch main contrib non-free
  3. deb http://archive.debian.org/debian/ stretch-backports main contrib non-free
  4. deb http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
  5. deb-src http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册