经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
在阿里云和腾讯云的轻量应用服务器上搭建Hadoop集群
来源:cnblogs  作者:ZeroZeroSeven  时间:2023/9/20 9:28:16  对本文有异议

引入

本文在两台2核2g的云服务器上搭建了Hadoop集群,两台云服务器分别是阿里云(hjm)和腾讯云(gyt),集群部署规划如下:

hjm gyt
HDFS NameNode\SecondaryNameNode\DataNode DataNode
YARN ResourceManager\NodeManager NodeManager

经实验,目前可以正常实现文件上传下载,但跑mapreduce程序还出现服务器资源不够的情况

搭建过程

新增用户

  1. useradd hujinming
  2. passwd hujinming

配置用户sudo权限

  1. vim /etc/sudoers

  1. ## Allow root to run any commands anywhere
  2. root ALL=(ALL) ALL
  3. ## Allows people in group wheel to run all commands
  4. %wheel ALL=(ALL) ALL

下面新增一行

  1. hujinming ALL=(ALL) NOPASSWD:ALL

创建目录并更改权限

在/opt 目录下创建 module、software 文件夹

  1. mkdir /opt/module
  2. mkdir /opt/software

切换到root用户下,修改 module、software 文件夹的所有者和所属组均为hujinming用户

  1. chown hujinming:hujinming /opt/module
  2. chown hujinming:hujinming /opt/software

查看 module、software 文件夹的所有者和所属组

  1. ll

安装JDK

  • 用xftp工具将jdk导入到opt目录下面的software文件夹下面
  • 解压jdk到opt/module目录下
  1. tar -zxvf jdk-8u212-linux.x64.tar.gz -C /opt/module/
  • 配置jdk环境变量

    • 新建/etc/profile.d/my_env.sh 文件
    1. sudo vim /etc/profile.d/my_env.sh
    • 添加如下内容
    1. #JAVA_HOME
    2. export JAVA_HOME=/opt/module/jdk1.8.0_212
    3. export PATH=$PATH:$JAVA_HOME/bin
    • 保存后退出,source 一下/etc/profile 文件,让新的环境变量 PATH 生效
    1. source /etc/profile
    • 测试jdk是否安装成功
    1. java -version

安装hadoop

  • xftp传输

  • 解压安装到/opt/module下面

  • 将hadoop添加到环境变量

    • 获取hadoop安装路径

      1. pwd
    • 打开/etc/profile.d/my_env.sh 文件

      1. sudo vim /etc/profile.d/my_env.sh
    • 在 my_env.sh 文件末尾添加如下内容:

      1. #HADOOP_HOME
      2. export HADOOP_HOME=/opt/module/hadoop-3.1.3
      3. export PATH=$PATH:$HADOOP_HOME/bin
      4. export PATH=$PATH:$HADOOP_HOME/sbin
    • 保存退出,让修改后的文件生效

    • 测试是否安装成功

服务器IP映射

  • 修改主机名
  1. vim /etc/hostname

分别把两台服务器的名字改成hjm和gyt,这里以gyt举例,直接在hostname文件上输入

  1. gyt
  • 改映射文件
  1. vim /etc/hosts

在linux中键入ifconfig命令可以查看内网ip。在两台服务器中,填写自己的私网,访问别人的填写公网,这里以gyt为例,gyt的公网IP是175.178.236.48,内网IP是10.0.12.1。这里要注意一点,阿里云在hosts文件中已经将本地IP映射成了一串英文,把这行信息删掉再进行上面的操作

  1. 47.115.207.108 hjm
  2. 10.0.12.1 gyt
  • 在客户端电脑(默认windows)配置映射

    因为在客户端电脑进行hadoop的操作时,两台机子会产生通信,他们通信时发送的网络请求url是gyt或者hjm,这在客户端电脑是无法识别的,所以要将gyt和hjm都映射为他们的公网IP

    • windows + R

    • 输入drivers,回车

    • 进入etc文件

    • 编辑hosts文件(都是公网IP)

      1. 175.178.236.48 gyt
      2. 47.115.207.108 hjm

ssh免密登录

分别要配置4种免密登录:

  • hjm -> gyt
  • gyt -> hjm
  • hjm -> hjm
  • gyt -> gyt

注意切换对应用户操作。先cd到~/.ssh,生成公钥和私钥

  1. ssh-keygen -t rsa

这里以gyt -> hjm或hjm -> hjm为例:

  1. ssh-copy-id hjm

修改配置文件

cd到$HADOOP_HOME/etc/hadoop目录

core-site.xml

  1. <configuration>
  2. <!-- 指定 NameNode 的地址 -->
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://hjm:8020</value>
  6. </property>
  7. <!-- 指定 hadoop 数据的存储目录 -->
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/opt/module/hadoop-3.1.3/data</value>
  11. </property>
  12. <!-- 配置 HDFS 网页登录使用的静态用户为 root -->
  13. <property>
  14. <name>hadoop.http.staticuser.user</name>
  15. <value>hujinming</value>
  16. </property>
  17. </configuration>

hdfs-site.xml

  1. <configuration>
  2. <!-- nn web 端访问地址-->
  3. <property>
  4. <name>dfs.namenode.http-address</name>
  5. <value>hjm:9870</value>
  6. </property>
  7. <!-- 2nn web 端访问地址-->
  8. <property>
  9. <name>dfs.namenode.secondary.http-address</name>
  10. <value>hjm:9868</value>
  11. </property>
  12. </configuration>

yarn-site.xml

  1. <configuration>
  2. <!-- 指定 MR 走 shuffle -->
  3. <property>
  4. <name>yarn.nodemanager.aux-services</name>
  5. <value>mapreduce_shuffle</value>
  6. </property>
  7. <!-- 指定 ResourceManager 的地址-->
  8. <property>
  9. <name>yarn.resourcemanager.hostname</name>
  10. <value>hjm</value>
  11. </property>
  12. <!-- 环境变量的继承 -->
  13. <property>
  14. <name>yarn.nodemanager.env-whitelist</name>
  15. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
  16. NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
  17. RED_HOME</value>
  18. </property>
  19. </configuration>

mapred-site.xml

  1. <configuration>
  2. <!-- 指定 MapReduce 程序运行在 Yarn 上 -->
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. </configuration>

workers

  1. hjm
  2. gyt

去服务器上启动对应端口

  • 用各自的服务器对双方暴露所有的端口
  • 同时,对公网暴露9864、9866、9870、9868端口

问题与解决

  1. ./sbin/start-dfs.sh 开启NameNode 和 DataNode 守护进程报错:

    1. Starting namenodes on [hjm]
    2. ERROR: Attempting to operate on hdfs namenode as root
    3. ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
    4. Starting datanodes
    5. ERROR: Attempting to operate on hdfs datanode as root
    6. ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
    7. Starting secondary namenodes [hjm]
    8. ERROR: Attempting to operate on hdfs secondarynamenode as root
    9. ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

    解决方法:

    在hjm上的start-dfs.sh和stop-dfs.sh上增加如下几行:

    1. HDFS_DATANODE_USER=hujinming
    2. HADOOP_SECURE_SECURE_USER=hdfs
    3. HDFS_NAMENODE_USER=hujinming
    4. HDFS_SECONDARYNAMENODE_USER=hujinming

    在hjm上的start-yarn.sh和stop-yarn.sh上增加如下几行:

    1. YARN_RESOURCEMANAGER_USER=hujinming
    2. HADOOP_SECURE_DN_USER=yarn
    3. YARN_NODEMANAGER_USER=hujinming
  2. 报错hjm: ERROR: Cannot set priority of namenode process 23214,没有启动NameNode和SecondaryNameNode

? 解决方法:

? 在两台服务器的/etc/hosts中,填写自己的私网,访问别人的填写公网

  1. 找不到NameNode和SecondaryNameNode

? 解决方法:

? 把所有节点logs和data删掉,重新格式化namenode,在hjm机子上,执行下面命令:

  1. hdfs namenode -format
  1. 客户端(windows)识别不了hjm和gyt

? 解决方法:改windows下面的主机名映射

  1. 配置WebUI可跨域?

? 解决方法:在两台服务器的core-site.xml加入下面代码

  1. <!--web console cors settings-->
  2. <property>
  3. <name>hadoop.http.filter.initializers</name>
  4. <value>org.apache.hadoop.security.HttpCrossOriginFilterInitializer</value>
  5. </property>
  6. <property>
  7. <name>hadoop.http.cross-origin.enabled</name>
  8. <value>true</value>
  9. </property>
  10. <property>
  11. <name>hadoop.http.cross-origin.allowed-origins</name>
  12. <value>*</value>
  13. </property>
  14. <property>
  15. <name>hadoop.http.cross-origin.allowed-methods</name>
  16. <value>*</value>
  17. </property>
  18. <property>
  19. <name>hadoop.http.cross-origin.allowed-headers</name>
  20. <value>X-Requested-With,Content-Type,Accept,Origin</value>
  21. </property>
  22. <property>
  23. <name>hadoop.http.cross-origin.max-age</name>
  24. <value>1800</value>
  25. </property>
  1. 没有足够的副本数量?

? 解决方法:还得看DataNode的数量。因为目前只有2台设备,最多也就2个副本,HDFS默认是3个副本,只有节点数的增加到10台时,副本数才能达到10。详细请看https://www.yii666.com/article/664023.html

  1. hadoop脚本启动时,错误: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain?

? 解决方法:在master主机的slaves文件中删除localhost即可。详细请看https://blog.csdn.net/Mr_ZNC/article/details/80700652

  1. HDFS的webui界面上传下载文件,出现卡死情况?

? 解决方法:暴露服务器所有端口给对方

原文链接:https://www.cnblogs.com/ggyt/p/17716287.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号