介绍
使用群晖Docker 搭建hadoop分布式服务
使用了4个jdk1.8的容器分别作1个nameNode 和3个dataNode
命名分别为:
hdfs-master
hdfs-slave1
hdfs-slave2
hdfs-slave3
目录
常见问题
- 启动问题 可以如下命令查看具体错误
hdfs dfsadmin -report
- hdfs种的主机名中不要出现下划线(_),可以使用“-”代替。
环境配置
拉取JDK1.8镜象
- 本例使用的镜像地址为:dustheart/jdk1.8_8u261:v8u261 ,镜像为精简版centos系统
docker pull dustheart/jdk1.8_8u261:v8u261
配置ssh server
- 下载安装ssh server 和 ssh client
yum install openssh-server -y yum install openssh-clients -y
配置ssh server自启动
- 拉取的centos镜像没有systemd工具,这里使用修改/etc/bashrc的方式来自启动,实验发现修改/etc/profile无法自动执行启动脚本
- 启动脚本如下,文件路径为/usr/bin/sshd_autorun.sh
#!/bin/bash sshd_flag=`ps -ef|grep sshd |grep -v grep` if [ ${#sshd_flag} == 0 ] then /usr/sbin/sshd -D fi
- 将 “/usr/bin/sshd_autorun.sh”添加到/etc/bashrc文件末尾
- ssh server 启动应该会报错,需要修复以下
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key
ssh免密登陆
- 4个容器需要启动ssh-server
ssh-kengen -t rsa #一路下一步 ssh-copy-id hdfs-master #自己需要给自己拷贝一份 ssh-copy-id hdfs-slave1 #docker可以自动将dockerName映射为ip ssh-copy-id hdfs-slave2 ssh-copy-id hdfs-slave3
添加环境变量
- /etc/bashrc中添加如下,/hadoop/hadoop-3.3.1/为haddop解压路径
export PATH=/hadoop/hadoop-3.3.1/bin:/hadoop/hadoop-3.3.1/sbin:$PATH
hadoop配置
core-site.xml配置
- 配置
<configuration> <property> <name>fs.defaultFS</name> #默认 <value>hdfs://hdfs-master:9000</value> #hdfs的api接口 </property> <property> <name>hadoop.tmp.dir</name> #hadoop运行时产生临时数据的存储目录 <value>/home/hadoop/apps/tmp</value> #该目录的地址 </property> </configuration>
hdfs-site.xml配置
- vi /hadoop/hadoop-3.3.1/etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hdfs-master:50090</value> </property> <property> <name>dfs.replication</name> #设置副本个数 <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> #设置namende数据存放点 <value>/home/hadoop/apps/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> #设置datanode数据存放点 <value>/home/hadoop/apps/dfs/data</value> </property> </configuration>
mapred-site.xml配置
- vi /hadoop/hadoop-3.3.1/etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framwork.name</name> #设置mapreduce的运行平台的名称 <value>yarn</value> #设置mapreduce的运行平台为yarn </property> </configuration>
yarn-site.xml配置
- vi /hadoop/hadoop-3.3.1/etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> #指定yarn的老大的地址 <value>hdfs-master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> #reducer获取数据的方式 <value>mapreduce_shuffle</value> </property> </configuration>
workers配置
- vi /hadoop/hadoop-3.3.1/etc/hadoop/workers
- 添加
hdfs-slave1 hdfs-slave2 hdfs-slave3
hadoop-env.xml配置
- vi /hadoop/hadoop-3.3.1/etc/hadoop/hadoop-env.sh
- 添加root启动,配置JAVA_HOME
export HDFS_DATANODE_USER=root export HDFS_DATABODE_SECURE_USER=root export HDFS_NAMENODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root export JAVA_HOME=/usr/local/jdk/jdk1.8.0_261
从节点配置
- 如下为全量复制,比较慢,可以采用解压缩包,然后值复制哦诶值文件的方法
scp -r /hadoop/hadoop3.3.1 hdfs-slave1:/hadoop/ scp -r /hadoop/hadoop3.3.1 hdfs-slave2:/hadoop/ scp -r /hadoop/hadoop3.3.1 hdfs-slave3:/hadoop/
hdfs的运行
- 格式化hdfs
hdfs namenode -format
- 启动hdfs
s
- 停止hdfs
stop-dfs.sh
- 在线监控
http://hdfs-master:9870 #可以使用docker配置端口映射,直接用宿主机地址访问