ps: 后面又加开了一个datanode,配置同下
hostnamectl set-hostname hadoop-xx
服务器1
echo "<server_2_ip> <server_2_domain>" >> /etc/hosts
服务器2
echo "<server_1_ip> <server_1_domain>" >> /etc/hosts
# namenode
firewall-cmd --add-port=9870/tcp --zone=public --permanent
firewall-cmd --add-port=9000/tcp --zone=public --permanent
# resourcemanager
firewall-cmd --add-port=8088/tcp --zone=public --permanent
firewall-cmd --add-port=8030/tcp --zone=public --permanent
firewall-cmd --add-port=8031/tcp --zone=public --permanent
firewall-cmd --add-port=8032/tcp --zone=public --permanent
firewall-cmd --add-port=8033/tcp --zone=public --permanent
端口同防火墙略
# 创建用户hadoop
adduser hadoop
# 设置密码
passwd hadoop
# 切换用户
su hadoop
# 进入用户目录
cd
ssh-keygen -t rsa -C ‘hello hadoop!‘
cat ~/.ssh/<key_name>.pub >> ~/.ssh/authorized_keys
服务器1
ssh hadoop@<server_2_ip> "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
服务器2
ssh hadoop@<server_1_ip> "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
chmod 700 .ssh/
chmod 600 .ssh/*
服务器1
ssh hadoop@<server_2_ip>
服务器2
ssh hadoop@<server_1_ip>
两个服务器均可以直接登录对方,则代表ssh部分配置成功
# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/linux/OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 解压
tar -zxf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 配置环境变量
cat << EOF >> .bashrc
export JAVA_HOME=/home/hadoop/jdk-11.0.10+9
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
# 刷新
source .baserc
# 下载
scp OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz hadoop@<server_ip>:/home/hadoopOpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 解压
ssh hadoop@<server_ip> "tar -zxf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz"
# 配置环境变量
ssh hadoop@<server_ip> "cat << EOF >> .bashrc
export JAVA_HOME=/home/hadoop/jdk-11.0.10+9
export PATH=\\\$PATH:\\\$JAVA_HOME/bin
EOF
"
# 验证
java -version
这里基于局域网操作,主要有两个好处
- 我这里使用的是阿里ECS服务,同一内网传输速度可达100MB/s
- 减少镜像服务器压力~
# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
# 解压
tar -zxf hadoop-3.3.0.tar.gz
# 配置环境变量
cat << EOF >> .bashrc
export HADOOP_HOME=/home/hadoop/hadoop-3.3.0
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOF
# 传输
scp hadoop-3.3.0.tar.gz hadoop@<other_server_ip>:/home/hadoop
# 解压
ssh hadoop@<other_server_ip> "tar -zxf hadoop-3.3.0.tar.gz"
# 配置环境变量
ssh hadoop@<other_server_ip> "cat << EOF >> .bashrc
export HADOOP_HOME=/home/hadoop/hadoop-3.3.0
export PATH=\\\$PATH:\\\$HADOOP_HOME/bin:\\\$HADOOP_HOME/sbin
EOF
"
同Java准备
这里只进行简单的配置,使用VSCode和Remote插件,直接进行远程编辑.下面贴出具体配置
暂时略过,需要合并几个服务上的文件
登陆hadoop@<server_01_ip>并执行下列命令
# 格式化namenode
hfds namenode -format
hfds --daemon start namenode
# 启动namenode
访问 <server_01_ip>:9870
现在就能直接看到hadoop的web页面了
登陆hadoop@<server_02_ip>并执行下列命令
hfds --daemon start datanode
访问 <server_01_ip>:9870
可以在Datanodes页面中看到刚刚启动的server_02_datanode
登陆hadoop@<server_01_ip>并执行下列命令
yarn --daemon start resourcemanager
访问 <server_01_ip>:8088
现在就能直接看到resourcemanager的web页面了
登陆hadoop@<server_02_ip>并执行下列命令
yarn --daemon start nodemanager
访问 <server_01_ip>:8088
可以在Nodes中看到刚刚启动的server_02_nodemanager了
登陆hadoop@<server_01_ip>并执行下列命令
# 创建用户文件夹
hadoop fs -mkdir /user
hadoop fs -mkdir /user/hadoop
# 创建存放测试文件的文件夹
hadoop fs -mkdir input_01
# 将测试文件上传到hadoop中
hadoop fs -put test.txt
hadoop jar
提交任务时,命令行长时间没有反应.同时resourcemanager日志可以观察到大量的未知host报错.
原因: resourcemanager无法通过主机名访问nodemanager.
解决方案: 在Ali云ECS控制台中直接修改主机名
备注: 目前暂时不知道为什么会出现这个现象,即使使用命令设置hostname.在hadoop中的datanode的hostname依然是一串随机字符串,而这个字符串就是Ali云ECS控制台中显示的的主机名.我目前也没有能够直接在linux中获取到这个错误的主机名.且尚不知hadoop是如何获取的
原因: 提交应用后,两个nodemanager分别创建了6个容器,导致ECS资源完全耗尽
解决方案: 设置yarn.nodemanager.resource.cpu-vcores
与yarn.nodemanager.resource.memory-mb
为ECS实际规格,并重新运行nodemanager即可
原文:https://www.cnblogs.com/heaven-elegy/p/14358501.html