
jurmous/hadoopjurmous/hadoop是一个轻量级Docker打包的Hadoop分布式存储引擎,配置为易于以高可用性(HA)方式运行分布式部署。
运行Hadoop集群需要以下服务组件:
建议使用调度器(如Fleet或Kubernetes)进行集群管理,确保NameNode始终连接到相同的持久化存储。
启动NameNode的示例命令:
bashdocker run -it -e "NNODE1_IP=nn1" -e "NNODE2_IP=nn2" -e "JN_IPS=j1:8485,j2:8485,j3:8485" -e "ZK_IPS=zk1:2181,zk2:2181,zk3:2181" -v $NAMENODE_FOLDER_ON_HOST:/mnt/hadoop/dfs/name jurmous/hadoop /etc/bootstrap.sh -d namenode
/bootstrap.sh脚本用于设置所有配置,其后的参数将传递给hadoop-daemon.sh start命令。
-d - 持续运行服务,而不是自动退出-b - 启动后打开bash终端,用于检查内部文件系统默认集群名称为"cluster",可通过$CLUSTER_NAME环境变量进行设置。
运行容器时必须设置以下环境变量:
NNODE1_IP:NameNode 1的地址(不带端口)NNODE2_IP:NameNode 2的地址(不带端口)JN_IPS:JournalNode地址列表,逗号分隔,带端口8485(至少3个或奇数个)ZK_IPS:Zookeeper节点地址列表,逗号分隔,带端口(默认2181)(至少3个或奇数个)设置环境变量的示例:
bash-e "NNODE1_IP=nn1.example.com" -e "NNODE2_IP=nn2.example.com" -e "JN_IPS=jn1.example.com:8485,jn2.example.com:8485,jn3.example.com:8485" -e "ZK_IPS=zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181"
为以下目录挂载卷以实现持久化存储:
/mnt/hadoop/dfs/name - NameNode存储/mnt/hadoop/dfs/data - DataNode存储/mnt/hadoop/journal/data - Journal存储/usr/local/hadoop/logs/ - 日志存储可通过挂载卷替换/usr/local/hadoop/etc/log4j.properties文件来自定义日志设置。
挂载NameNode存储的示例:
bash-v $NAMENODE_FOLDER_ON_HOST:/mnt/hadoop/dfs/name
NameNode的IP必须是容器的IP地址/DNS名称,因为Hadoop会绑定到这些地址。
简单方法是使用--net="host"参数将主机网络接口附加到容器:
bashdocker run --net="host" ...
也可以使用flannel直接路由到容器,但需要确保IP公告配置正确,使每个容器都能知道需要连接的其他容器。
首次使用时,需要格式化HDFS,包括格式化NameNode并同步第二个NameNode。操作前确保所有JournalNode已启动,并且知道NameNode将运行的机器IP。
使用-it标志以交互方式运行镜像并执行格式化命令,确保附加持久化存储卷:
bashdocker run -it -p 50470:50470 -p 8020:8020 -p 50070:50070 -e NNODE1_IP=$NNODE1IP -e NNODE2_IP=$NNODE2IP -e JN_IPS=$JNIPS -e ZK_IPS=$ZKIPS -v $NAMENODE_FOLDER_ON_HOST:/mnt/hadoop/dfs/name jurmous/hadoop:2.5 /etc/bootstrap.sh -d format
第二个NameNode需要使用第一个NameNode的格式化信息进行引导。在NameNode 1运行时,以交互模式运行引导命令,确保附加持久化存储卷:
bashdocker run -it -p 50470:50470 -p 8020:8020 -p 50070:50070 -e NNODE1_IP=$NNODE1IP -e NNODE2_IP=$NNODE2IP -e JN_IPS=$JNIPS -e ZK_IPS=$ZKIPS -v $NAMENODE_FOLDER_ON_HOST:/mnt/hadoop/dfs/name jurmous/hadoop:2.5 /etc/bootstrap.sh -d format
在某些情况下,NameNode需要隔离以实现正确的故障转移。当前隔离功能默认返回true而不执行任何操作。可通过Docker卷挂载替换/etc/fence.sh文件来实现自定义隔离算法,例如调用Docker调度器关闭其他NameNode。




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务