fang-ren

安装与使用说明

本说明基于 VWware Workstation 15 下的 CentOS 7 系统进行操作,所下载的hadoop 、 hbase 、 spark 、hive 版本分别为 hadoop-3.1.3.tar.gz 、 hbase-2.2.3-bin.tar.gz 、 spark-2.4.5-bin-without-hadoop.tgz 、 apache-hive-3.1.2-bin.tar.gz

 

一、  Hadoop 3.1.3 分布式安装与使用说明

1.           Master 节点:创建用户与SSH,Java 安装配置

1.1 创建用户

创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell ,并给用户设置密码及增加管理员权限。

su                                  # 以 root 用户登录

useradd -m hadoop -s /bin/bash   # 创建新用户hadoop

passwd hadoop                      # 设置密码

执行 visudo 命令,于 root      ALL=(ALL)    ALL 内容下新增

hadoop  ALL=(ALL)  ALL

 

1.2 安装SSH

rpm -qa | grep ssh      # 检验 SSH client 、 SSH server 是否已安装

sudo yum install openssh-clients   # 安装 SSH client

sudo yum install openssh-server    # 安装 SSH server

 

1.3  安装java

yum 安装JDK

sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

# yum 安装 JDK

rpm -ql java-1.8.0-openjdk-devel | grep \'/bin/javac\'

# 确定刚安装的 yum 安装的路径

确定已有的 java 的版本及路径

java -version        # java 的版本

which java           # 定位 java 的执行路径

ls -lrt /usr/bin/java    # 列出 java 执行路径的具体信息,一般这里都会链接到其他位置

配置java环境变量,可以考虑开发版本或者默认的版本

vim ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk    # 于文件最后添加

source ~/.bashrc                                       # 使变量设置生效

检验 java 环境变量

echo $JAVA_HOME     # 检验变量值

java -version

$JAVA_HOME/bin/java -version   # 与直接执行 java -version 一样

 

2.          Slave 节点:创建用户与SSH,Java 安装配置

参考Master节点,在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境。

 

3.          网络配置与 SSH 联通

3.1 虚拟机静态IP配置

确定 NAT 模式下的网关:VWware Workstation 工具栏 -> 编辑 -> 虚拟网络编辑器

 

 

 在终端中输入命令: cd /etc/sysconfig/network-scripts

 在该目录下编辑 ifcfg-ens33 文件,如下图红色区域,要求NETMASK,GATEWAY 与虚拟机的子网掩码和网关IP一致。

 

退出并保存该文件,重启网络服务:service network restart 。通过是否能够ping 通外网以及集群各机器IP,检查是否成功配置。

 

参考资料:VMware 安装centos7 采用NAT方式如何设置固定IP

https://blog.csdn.net/LUCKWXF/article/details/103949205

 

3.2 修改主机名以便识别

hostnamectl    # 查看当前主机名命令

hostnamectl status    # 查看当前主机名命令

hostname temp01    # 临时修改主机名

hostnamectl set-hostname perm01  # 永久修改主机名

修改主机名之后, /etc/hostname 一般会被自动更新,另外还需要手动更新 /etc/hosts 再重启Linux 。在集群配置中,一般把集群节点的主机名与IP地址映射关系配置到 /etc/hosts 。个人配置如下图:

 

在完成集群各个机器的主机名修改之后,可以通过 ping 命令测试,以便后续的配置。

ping master –c 3

ping slave01 –c 3

ping slave02 –c 3

 

参考资料:CentOS7修改主机名的三种方法

https://blog.csdn.net/xuheng8600/article/details/79983927

 

3.3  SSH无密码登陆节点

通过SSH配置,使得master节点可以无密码SSH登陆到各个Slave节点上。于master节点上生成公钥

cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost

rm ./id_rsa*            # 删除之前生成的公匙(如果有)

ssh-keygen -t rsa       # 一直按回车完成

cat ./id_rsa.pub >> ./authorized_keys # 将公钥追加到授权

ssh master     # SSH登录验证,exit可返回原来终端

将Master节点上的公钥传输到各个Slave节点,并加入授权。以Slave01为例,代码如下:

scp ~/.ssh/id_rsa.pub hadoop@Slave01:/home/hadoop/

mkdir ~/.ssh       # 登录到Slave01机器上,创建文件夹(如不存在该文件夹)

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

ssh slave01        # 切换回Master机器上,验证能否成功SSH登录Slave01

 

参考资料1:SSH免密码登录Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 的解决方案

https://www.cnblogs.com/xubing-613/p/6844564.html

参考资料2:CentOS7.4配置SSH登录密码与密钥身份验证踩坑

https://www.cnblogs.com/Leroscox/p/9627809.html

 

4.           配置集群/分布式环境

4.1 hadoop 解压、授权与环境变量配置

sudo tar -zxf ~/Downloads/hadoop-3.1.3.tar.gz -C /usr/local   # 解压到/usr/local中

cd /usr/local/

sudo mv ./hadoop-3.1.3/ ./hadoop            # 将文件夹名改为hadoop,也可以考虑软链目录 ln -s hadoop-3.1.3/ hadoop

sudo chown -R hadoop:hadoop ./hadoop        # 修改文件权限

配置环境变量

gedit ~/.bashrc

# 使用 gedit 文本编辑器配置 hadoop,在文本编辑器中输入新增如下内容

 

# Hadoop Environment Variables

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

 

source ~/.bashrc       # 使变量设置生效

集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的配置文件。hadoop 3.1.3正常启动所必须的设置项包括:workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。其中workers 在hadoop 2.6.0 版本中为slaves 。

workers 中写入作为DataNode的主机名,每行一个。可以自行选择是否保留localhost作为DataNode使用。

 

core-site.xml 修改为:

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://Master:9000</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>file:/usr/local/hadoop/tmp</value>

                <description>Abase for other temporary directories.</description>

        </property>

</configuration>

hdfs-site.xml 修改为如下配置。dfs.replication 一般设为 3,因实际节点只有两个Slave节点,所以如下设置。

<configuration>

        <property>

                <name>dfs.namenode.secondary.http-address</name>

                <value>Master:50090</value>

        </property>

        <property>

                <name>dfs.replication</name>

                <value>2</value>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>file:/usr/local/hadoop/tmp/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>file:/usr/local/hadoop/tmp/dfs/data</value>

        </property>

</configuration>

mapred-site.xml修改为:

<configuration>

        <property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.address</name>

                <value>Master:10020</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>Master:19888</value>

        </property>

</configuration>

yarn-site.xml 修改为:

<configuration>

        <property>

                <name>yarn.resourcemanager.hostname</name>

                <value>Master</value>

        </property>

        <property>

                <name>yarn.nodemanager.aux-services</name>

                <value>mapreduce_shuffle</value>

        </property>

</configuration>

 

4.2 节点文件移植

在Master节点上删除之前的临时文件、日志文件(如果有),再将文件压缩复制传输到其他节点。

cd /usr/local

sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件

sudo rm -r ./hadoop/logs/*   # 删除日志文件

tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制

cd ~

scp ./hadoop.master.tar.gz Slave01:/home/Hadoop

以Slave01节点为例,进行文件的解压缩与授权

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)

sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local

sudo chown -R hadoop /usr/local/hadoop

于Master节点上执行NameNode的格式化

hdfs namenode -format       # 首次运行需要执行初始化,之后不需要

 

5. Hadoop 分布式启动与实例运行

5.1 关闭防火墙

在各节点机器上关闭防火墙,避免集群内通信不成功。

systemctl stop firewalld.service    # 关闭firewall

systemctl disable firewalld.service # 禁止firewall开机启动

systemctl status firewalld       # 查看防火墙状态

 

5.2 Hadoop启动与检查

于Master节点上启动hadoop,yarn,historyserver 。

start-dfs.sh

start-yarn.sh

mapred --daemon start historyserver

启动后,Master节点进程情况如下:

 

启动后,各Slave节点进程情况如下:

以上各节点进行,缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。

另外,也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:9870/。如果不成功,可以通过启动日志排查原因。

相应地,关闭hadoop集群的命令如下:

stop-yarn.sh

stop-dfs.sh

mapred --daemon stop historyserver

 

报错:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

解决方案:于配置文件 /etc/profile 中新增如下环境变量,并使之生效;同时于 $HADOOP_HOME/etc/hadoop/hadoop-env.sh文件中同样新增该环境变量。

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export  HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

参考资料:Hadoop_疑难杂症 解决1 - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat

https://blog.csdn.net/u010003835/article/details/81127984

 

5.3 Hadoop 实例运行与监测

hdfs dfs -mkdir -p /user/hadoop  # 创建hadoop用户目录

hdfs dfs -mkdir input

hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input # 复制输入文件

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output \'dfs[a-z.]+\' # 运行 MapReduce 作业

 

报错:[pid=11486,containerID=container_1590592556465_0002_01_000002] is running 464517632B beyond the \'VIRTUAL\' memory limit. Current usage: 78.4 MB of 1 GB physical memory used; 2.5 GB of 2.1 GB virtual memory used. Killing container.

解决方案:hadoop运行时使用的虚拟内存不足, hadoop物理内存默认与主机的内存一致,hadoop虚拟内存默认是hadoop物理内存的2.1倍。于master节点的 $HADOOP_HOME/etc/hadoop/mapred-site.xml文件中新增/修改如下配置,修改hadoop的物理内存大小:

<property>

    <name>mapreduce.map.memory.mb</name>

    <value>2048</value>

</property>

<property>

    <name>mapreduce.reduce.memory.mb</name>

    <value>2048</value>

</property>

参考资料:running beyond virtual/physical memory limits问题解决

https://blog.csdn.net/jp413670706/article/details/77602540

 

报错:Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

解决方案:于master节点下修改配置文件 $HADOOP_HOME/etc/Hadoop/mapred-site.xml,添加如下内容:

<property>

  <name>yarn.app.mapreduce.am.env</name>

  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

</property>

<property>

  <name>mapreduce.map.env</name>

  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

</property>

<property>

  <name>mapreduce.reduce.env</name>

  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

</property>

参考资料:Hadoop之——hadoop 3.x Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

https://blog.csdn.net/l1028386804/article/details/93385195

分类:

技术点:

相关文章: