Hadoop 入门教程(超详细)[通俗易懂]

2022-08-12 14:36:30 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

1 Hadoop 介绍

1.1 Hadoop 是什么

  • Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构。
  • 主要解决,海量数据的存储和海量数据的分析计算问题。
  • 广义上来说,Hadoop 通常是指一个更广泛的概念 —— Hadoop 生态圈。

1.2 Hadoop 的发展历史

  1. Lucene 框架是 Doug Cutting 开创的开源软件,用 java 书写代码,实现与 Google 类似的全文搜索功能,它提供了全文检索引擎的架构,包括完整的查询引擎和索引引擎 。
  2. 2001年年底 Lucene 成为 apache 基金会的一个子项目。
  3. 对于海量数据的场景,Lucene 面对与 Google 同样的困难:存储数据困难,检索速度慢。
  4. 学习和模仿 Google 解决这些问题的办法 :微型版 Nutch。
  5. 可以说 Google 是 hadoop 的思想之源(Google 在大数据方面的三篇论文)。 GFS —>HDFS Map-Reduce —>MR BigTable —>Hbase
  6. 2003-2004 年,Google 公开了部分 GFS 和 Mapreduce 思想的细节,以此为基础 Doug Cutting 等人用了 2 年业余时间实现了 DFS 和 Mapreduce机制,使 Nutch 性能飙升 。
  7. 2005 年Hadoop 作为 Lucene 的子项目 Nutch 的一部分正式引入 Apache 基金会。
  8. 2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。
  9. 名字来源于 Doug Cutting 儿子的玩具大象。
  10. Hadoop 就此诞生并迅速发展,标志这云计算时代来临。

1.3 Hadoop 三大发行版本

Apache、Cloudera、Hortonworks

  1. Apache 版本最原始(最基础)的版本,对于入门学习最好。
  2. Cloudera在大型互联网企业中用的较多。 ① 2008 年成立的 Cloudera 是最早将 Hadoop 商用的公司,为合作伙伴提供 Hadoop 的商用解决方案,主要是包括支持、咨询服务、培训。 ② 2009 年 Hadoop 的创始人 Doug Cutting 也加盟 Cloudera 公司。Cloudera 产品主要为 CDH,Cloudera Manager,Cloudera Support。 ③ CDH 是Cloudera 的 Hadoop 发行版,完全开源,比 Apache Hadoop 在兼容性,安全性,稳定性上有所增强。 ④ Cloudera Manager 是集群的软件分发及管理监控平台,可以在几个小时内部署好一个 Hadoop 集群,并对集群的节点及服务进行实时监控。Cloudera Support 即是对 Hadoop 的技术支持。 ⑤ Cloudera 的标价为每年每个节点 4000 美元。Cloudera 开发并贡献了可实时处理大数据的 Impala 项目。
  3. Hortonworks 文档较好。 ① 2011 年成立的 Hortonworks 是雅虎与硅谷风投公司 Benchmark Capital 合资组建。 ② 公司成立之初就吸纳了大约 25 名至 30 名专门研究Hadoop的雅虎工程师,上述工程师均在 2005 年开始协助雅虎开发 Hadoop,贡献了 Hadoop 80% 的代码。 ③ 雅虎工程副总裁、雅虎 Hadoop 开发团队负责人 Eric Baldeschwieler 出任 Hortonworks 的首席执行官。 ④ Hortonworks 的主打产品是 Hortonworks Data Platform(HDP),也同样是 100% 开源的产品,HDP 除常见的项目外还包括了 Ambari,一款开源的安装和管理系统。 ⑤ HCatalog,一个元数据管理系统,HCatalog 现已集成到 Facebook 开源的 Hive 中。Hortonworks 的 Stinger 开创性的极大的优化了 Hive 项目。Hortonworks 为入门提供了一个非常好的,易于使用的沙盒。 ⑥ Hortonworks 开发了很多增强特性并提交至核心主干,这使得 Apache Hadoop 能够在包括 Window Server 和 Windows Azure 在内的 microsoft Windows 平台上本地运行。定价以集群为基础,每10 个节点每年为 12500 美元。

1.4 Hadoop 的优势

  1. 高可靠性: Hadoop 底层维护多个数据副本,所以即使 Hadoop 某个计算元素或存储出现故障,也不会导致数据的丢失。
  2. 高扩展性: 在集群间分配任务数据,可方便的扩展数以千计的节点。
  3. 高效性: 在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。
  4. 高容错性: 能够自动将失败的任务重新分配。

1.5 Hadoop 的组成

  1. Hadoop 1.x 和 hadoop 2.x 的区别

在 Hadoop 1.x 时代,Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源调度,耦合性较大。 在 Hadoop 2.x 时代,增加了 Yarn。Yarn 只负责资源的调度,MapReduce 只负责运算。

  1. HDFS 框架概述NameNode(nn): 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块所在的 DataNode 等。 ② DataNode(dn): 在本地文件系统存储文件块数据,以及块数据校验和。 ③ Secondary DataNode(2nn): 用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。
  2. Yarn 结构概述

ResourceManager(RM):   (1)处理客户端请求。   (2)监控 NodeManager。   (3)启动或监控 ApplicationMaster。   (4)资源的分配与调度。 ② NodeManager(NM):   (1)管理单个节点上的资源。   (2)处理来自 ResourceManager 的命令。   (3)处理来自 ApplicationMaster 的命令。   (4)资源的分配与调度。 ③ ApplicationMaster(AM):   (1)负责数据的切分。   (2)为应用程序申请资源并分配给内部的任务。   (3)任务的监控与容错。 ④ Container:   Container 是 Yarn 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。

  1. MapReduce 架构概述 MapReduce 将计算过程分为两个阶段:Map 阶段和 Reduce 阶段。 ① Map 阶段并行处理输入的数据。 ② Reduce 阶段对 Map 结果进行汇总。

1.6 大数据技术生态体系

2 Hadoop 环境搭建

2.1 虚拟机环境准备

  1. 克隆虚拟机
  2. 修改克隆虚拟机的静态IP ① vim /etc/sysconfig/network-scripts/ifcfg-网卡名称 终端上输入 ifconfig 或 ip addr,找出网卡名称

② 将 BOOTPROTO=dhcp 改成 BOOTPROTO=static、ONBOOT=no 改成 ONBOOT=yes ③ 并在文件尾部添加以下内容

代码语言:javascript复制
IPADDR=192.168.217.129
NETMASK=255.255.255.0
GATEWAY=192.168.217.2
DNFS1=192.168.217.2

  ④ 重启网关服务

代码语言:javascript复制
systemctl restart network
  1. 修改主机名
代码语言:javascript复制
hostnamectl set-hostname lyh
  1. 关闭防火墙 ① 关闭防火墙
代码语言:javascript复制
systemctl stop firewalld

  ② 禁止防火墙开机启动

代码语言:javascript复制
systemctl disable firewalld

  ③ 关闭 Selinux

代码语言:javascript复制
vim /etc/sysconfig/selinux

  将 SELINUX=enforcing 改成 SELINUX=disabled

2.2 安装 jdk

  1. 将 jdk-8u151-linux-x64.tar.gz 安装包通过 xftp 传到 CentOS 7 上
  2. 创建 /usr/local/java 文件夹
代码语言:javascript复制
mkdir /usr/local/java
  1. 将 jdk 压缩包解压到 /usr/local/java 目录下
代码语言:javascript复制
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/java/  
  1. 配置 jdk 的环境变量
代码语言:javascript复制
vim /etc/profile

  添加以下内容:

代码语言:javascript复制
# JAVAHOME
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
  1. 让配置文件生效
代码语言:javascript复制
source /etc/profile
  1. 输入 java、javac、java -version 命令检验 jdk 是否安装成功 注意:如果之前安装过 jdk 或 系统自带 jdk,我们需要卸载这些 jdk ① 查询已安装的 jdk 列表
代码语言:javascript复制
rpm -qa | grep jdk

  ② 删除已经安装的 jdk

代码语言:javascript复制
yum -y remove XXX(上面查询到的 jdk 名称)

   注意:如果终端出现以下错误:/var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行。则输入以下命令:

代码语言:javascript复制
rm -f /var/run/yum.pid

   之后再执行以上删除 jdk 的命令

  ③ 重新让配置文件生效

代码语言:javascript复制
source /etc/profile

  ④ 输入 java、javac、java -version 命令检验 jdk 是否安装成功

2.3 安装 Hadoop

Hadoop 官网

  1. 将 hadoop-2.7.7.tar.gz 安装包通过 xftp 传到 CentOS 7 上
  2. 创建 /hadoop 文件夹
代码语言:javascript复制
mkdir /hadoop
  1. 将 hadoop 压缩包解压到 /haddop 的目录下
代码语言:javascript复制
tar -zxvf hadoop-2.7.7.tar.gz -C /hadoop/  
  1. 配置 hadoop 环境变量 ① 在 /etc/profile 文件的尾部添加以下内容:
代码语言:javascript复制
#HADOOP
export HADOOP_HOME=/hadoop/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

  ② 使配置文件生效

代码语言:javascript复制
source /etc/profile
  1. 测试是否安装成功
代码语言:javascript复制
hadoop version

3 Hadoop 的运行模式

  Hadoop 的运行模式包括:本地模式、伪分布式模式、完全分布式模式。

3.1 本地运行模式

3.1.1 官方 Grep 案例

  1. 在 hadoop-2.7.7 文件下面创建一个 input 文件夹
代码语言:javascript复制
mkdir input
  1. 将 Hadoop 的 xml 配置文件复制到 input
代码语言:javascript复制
cp etc/hadoop/*.xml input
  1. 在 hadoop-2.7.7 目录下,执行 share 目录下的 MapReduce 程序
代码语言:javascript复制
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input/ output 'dfs[a-z.] '
  1. 查看输出结果

3.1.2 官方 WordCount 案例

  1. 在 hadoop-2.7.7 文件下面创建一个 wcinput 文件夹
代码语言:javascript复制
mkdir wcinput
  1. 在 wcinput 文件下创建一个 wc.input 文件
代码语言:javascript复制
vim wc.input

  在文件中输入以下内容:

代码语言:javascript复制
hadoop yarn
hadoop mapreduce
spark
spark
  1. 在 hadoop-2.7.7 目录下,执行 share 目录下的 MapReduce 程序
代码语言:javascript复制
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount wcinput/ wcoutput
  1. 查看结果

3.2 伪分布式运行模式

3.2.1 启动 HDFS 并运行 MapReduce 程序

  1. 配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目录下) ① core-site.xml
代码语言:javascript复制
<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://lyh:9000</value>
  </property>

  <!-- 指定Hadoop运行时产生文件的存储目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>

  ② hadoop-env.sh

   修改 JAVA_HOME 路径:

代码语言:javascript复制
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

  ③ hdfs-site.xml

代码语言:javascript复制
<configuration>
  <!-- 指定HDFS副本的数量 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
  1. 启动集群 ① 格式化 NameNode(第一次启动时格式化,以后就不要总格式化)
代码语言:javascript复制
hdfs namenode -format

  ② 启动 NameNode

代码语言:javascript复制
hadoop-daemon.sh start namenode

  ③ 启动 DataNode

代码语言:javascript复制
hadoop-daemon.sh start datanode
  1. 查看集群 ① 查看是否启动成功

② web 端查看 HDFS 文件系统 http://192.168.217.129:50070

  1. 操作集群 ① 在 HDFS 文件系统上创建一个 input 文件夹
代码语言:javascript复制
hdfs dfs -mkdir -p /user/lyh/input

  ② 将测试文件内容上传到文件系统上

代码语言:javascript复制
hdfs dfs -put wcinput/wc.input /user/lyh/input/

  ③ 在 hadoop-2.7.7 目录下,运行 MapReduce 程序

代码语言:javascript复制
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input/ /user/lyh/output

  ④ 查看输出结果

   命令行查看:

代码语言:javascript复制
hdfs dfs -cat /user/atguigu/output/*

   浏览器页面查看:

3.2.2 启动 YARN 并运行 MapReduce 程序

  1. 配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目录下) ① yarn-site.xml
代码语言:javascript复制
<configuration>
  <!-- Reducer获取数据的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>lyh</value>
  </property>
</configuration>

  ② yarn-env.sh

   修改 JAVA_HOME 路径:

代码语言:javascript复制
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

  ③ mapred-env.sh

   修改 JAVA_HOME 路径:

代码语言:javascript复制
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

  ④ 将 mapred-site.xml.template 重新命名为 mapred-site.xml

代码语言:javascript复制
mv mapred-site.xml.template mapred-site.xml
代码语言:javascript复制
<configuration>
  <!-- 指定MR运行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  1. 启动集群 ① 启动前必须保证 NameNode 和 DataNode 已经启动 ② 启动 ResourceManager
代码语言:javascript复制
yarn-daemon.sh start resourcemanager

  ③ 启动NodeManager

代码语言:javascript复制
yarn-daemon.sh start nodemanager
  1. 查看集群 ① 查看是否启动成功

② web 端查看 YARN 页面 http://192.168.217.129:8088

  1. 操作集群 ① 删除 HDFS 文件系统上的 output 文件
代码语言:javascript复制
hdfs dfs -rm -R /user/lyh/output

  ② 在 hadoop-2.7.7 目录下,运行 MapReduce 程序

代码语言:javascript复制
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input  /user/lyh/output

  ③ 查看运行结果

   命令行查看:

代码语言:javascript复制
hdfs dfs -cat /user/lyh/output/*

   浏览器页面查看:

3.2.3 配置历史服务器

  为了查看程序的历史运行情况,需要配置一下历史服务器。

  1. 配置 mapred-site.xml 在该文件里面增加以下配置:
代码语言:javascript复制
  <!-- 历史服务器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>lyh:10020</value>
  </property>

  <!-- 历史服务器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>lyh:19888</value>
  </property>
  1. 启动历史服务器
代码语言:javascript复制
mr-jobhistory-daemon.sh start historyserver
  1. 查看历史服务器是否启动
  1. 查看 JobHistory http://192.168.217.129:19888/

3.2.4 配置日志的聚集

  日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。   日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

  注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。

  1. 关闭 NodeManager 、ResourceManager 和 HistoryManager
代码语言:javascript复制
yarn-daemon.sh stop resourcemanager
代码语言:javascript复制
yarn-daemon.sh stop nodemanager
代码语言:javascript复制
mr-jobhistory-daemon.sh stop historyserver
  1. 配置 yarn-site.xml 在该文件里面增加以下配置:
代码语言:javascript复制
  <!-- 日志聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 日志保留时间设置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
  1. 启动 NodeManager 、ResourceManager 和 HistoryManager
代码语言:javascript复制
yarn-daemon.sh start resourcemanager
代码语言:javascript复制
yarn-daemon.sh start nodemanager
代码语言:javascript复制
mr-jobhistory-daemon.sh start historyserver
  1. 删除HDFS上已经存在的输出文件
代码语言:javascript复制
hdfs dfs -rm -R /user/lyh/output
  1. 在 hadoop-2.7.7 目录下,执行 WordCount 程序
代码语言:javascript复制
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input /user/lyh/output
  1. 查看日志

3.3 完全分布式运行模式

3.3.1 虚拟机准备

  1. 准备(克隆) 3 台客户机

主机名称

IP 地址

master

192.168.217.130

slave1

192.168.217.131

slave2

192.168.217.132

  1. 每台机器分别修改 /etc/hosts 文件,将每个机器的 hostname 和 ip 对应
代码语言:javascript复制
vim /etc/hosts
代码语言:javascript复制
192.168.217.130 master
192.168.217.131 slave1
192.168.217.132 slave2
  1. 之后详细操作查看 2.1

3.3.2 编写集群分发脚本 xsync

  1. scp(secure copy)安全拷贝 ① scp 定义:   scp 可以实现服务器与服务器之间的数据拷贝。 ② 基本语法:
代码语言:javascript复制
scp -r 要拷贝的文件路径/名称  目的用户@主机:目的路径/名称
  1. rsync(remote synchronize)远程同步工具 ① rsync 定义:   rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。   rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。 ② 基本语法:
代码语言:javascript复制
rsync -rvl 要拷贝的文件路径/名称  目的用户@主机:目的路径/名称

  说明:-v:显示复制过程 、-l:拷贝符号链接

  1. xsync 集群分发脚本 需求:循环复制文件到所有节点的相同目录下 ① 在 /usr/local/bin 目录下创建 xsync 文件
代码语言:javascript复制
vim xsync

   在文件中输入以下内容:

代码语言:javascript复制
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for i in master slave1 slave2
  do
    echo "****************** $i *********************"
    rsync -rvl $pdir/$fname $user@$i:$pdir
  done

  ② 修改脚本 xsync 具有执行权限

代码语言:javascript复制
chmod 777 xsync

  ③ 调用脚本形式:xsync 文件名称

3.3.3 集群配置

  1. 集群部署规划

master

slave1

slave2

HDFS

NameNode DataNode

DataNode

SecondaryNameNodeDataNode

YARN

NodeManager

ResourceManagerNodeManager

NodeManager

  1. 配置集群 ⑴ 配置核心文件   配置 core-site.xml
代码语言:javascript复制
<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>

  <!-- 指定Hadoop运行时产生文件的存储目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>

  ⑵ HDFS 配置文件

   ① 配置 hadoop-env.sh

    修改 JAVA_HOME 路径:

代码语言:javascript复制
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

   ② 配置 hdfs-site.xml

代码语言:javascript复制
<configuration>
  <!-- 指定HDFS副本的数量 -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  
  <!-- 指定Hadoop辅助名称节点主机配置 -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>slave2:50090</value>
  </property>
</configuration>

  ⑶ YARN 配置文件

   ① 配置 yarn-env.sh

   修改 JAVA_HOME 路径:

代码语言:javascript复制
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

   ② 配置 yarn-site.xml

代码语言:javascript复制
<configuration>
  <!-- Reducer获取数据的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>slave1</value>
  </property>

  <!-- 日志聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 日志保留时间设置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
</configuration>

  ⑷ MapReduce 配置文件

   ① 配置 mapred-env.sh

    修改 JAVA_HOME 路径:

代码语言:javascript复制
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

   ② 配置 mapred-site.xml

代码语言:javascript复制
<configuration>
  <!-- 指定MR运行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

  <!-- 历史服务器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
  </property>

  <!-- 历史服务器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>master:19888</value>
  </property>
</configuration>
  1. 在集群上分发配置好的 Hadoop 目录
代码语言:javascript复制
xsync /hadoop/

3.3.4 集群单点启动

  1. 如果集群是第一次启动,需要格式化 NameNode
代码语言:javascript复制
hadoop namenode -format
  1. 在 master上启动 NameNode
代码语言:javascript复制
hadoop-daemon.sh start namenode
  1. 在 master、slave1 和 slave2 上分别启动 DataNode
代码语言:javascript复制
hadoop-daemon.sh start datanode

3.3.5 配置 SSH 无密登录

  1. 免密登录原理
  1. 生成公钥和私钥 在 /root 目录下输入:
代码语言:javascript复制
ssh-keygen -t rsa

  然后敲(三个回车),就会在 .ssh 目录下生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

  1. 将公钥拷贝到要免密登录的目标机器上
代码语言:javascript复制
ssh-copy-id master
代码语言:javascript复制
ssh-copy-id slave1
代码语言:javascript复制
ssh-copy-id slave2
  1. 在另两台机器上也做 2、3 操作

3.3.6 群起集群

  1. 配置 slaves(/hadoop/hadoop-2.7.7/etc/hadoop/slaves) ① 在该文件中增加如下内容:
代码语言:javascript复制
master
slave1
slave2

  注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

  ② 同步所有节点配置文件

代码语言:javascript复制
xsync slaves
  1. 启动集群 ① 如果集群是第一次启动,需要格式化 NameNode (注意格式化之前,一定要先停止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据)
代码语言:javascript复制
hdfs namenode -format

  ② 启动 HDFS

代码语言:javascript复制
start-dfs.sh

  ③ 启动 YARN(slave1 上)

注意:NameNode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 YARN,应该在 ResouceManager 所在的机器上启动 YARN。

代码语言:javascript复制
start-yarn.sh
  1. 编写查看集群所有节点 jps 脚本 alljps ① 在 /usr/local/bin 目录下创建文件 alljps
代码语言:javascript复制
vim alljps

   在文件中输入以下内容:

代码语言:javascript复制
#!/bin/bash

for i in master slave1 slave2
  do
    echo "****************** $i *********************"
    ssh $i "source /etc/profile && jps"
  done

  ② 修改脚本 alljps 具有执行权限

代码语言:javascript复制
chmod 777 alljps

  ③ 调用脚本形式:alljps

3.3.7 集群时间同步

  时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

  1. 时间服务器配置(必须 root 用户) ① 安装 ntp
代码语言:javascript复制
yum install ntp

  ② 修改 ntp 配置文件

代码语言:javascript复制
vim /etc/ntp.conf

  修改内容如下:

   ⑴ 授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查询和同步时间

代码语言:javascript复制
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

   ⑵ 集群在局域网中,不使用其他互联网上的时间

代码语言:javascript复制
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

   ⑶ 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步

代码语言:javascript复制
server 127.127.1.0
fudge 127.127.1.0 stratum 10

  ③ 修改/etc/sysconfig/ntpd 文件

代码语言:javascript复制
vim /etc/sysconfig/ntpd

   添加内容如下(让硬件时间与系统时间一起同步)

代码语言:javascript复制
SYNC_HWCLOCK=yes

  ④ 重新启动 ntpd 服务

代码语言:javascript复制
systemctl restart ntpd.service

  ⑤ 设置 ntpd 服务开机启动

代码语言:javascript复制
systemctl enable ntpd.service
  1. 其他机器配置(必须root用户) 在其他机器配置10分钟与时间服务器同步一次
代码语言:javascript复制
crontab -e

   编写定时任务如下:

代码语言:javascript复制
*/10 * * * * /usr/sbin/ntpdate master

4. Hadoop 编译源码

4.1 前期工作准备

  1. CentOS 联网 配置 CentOS 能连接外网。Linux 虚拟机 ping www.baidu.com 是畅通的。
  2. jar 包准备(hadoop 源码、JDK8、maven、ant 、protobuf) ① hadoop-2.7.7-src.tar.gz ② jdk-8u151-linux-x64.tar.gz ③ apache-ant-1.9.9-bin.tar.gz(build 工具,打包用的) ④ apache-maven-3.0.5-bin.tar.gz ⑤ protobuf-2.5.0.tar.gz(序列化的框架)

4.2 jar 包安装

  1. 安装 jdk 具体详见 2.2。
  2. 安装 Maven ① 解压 Maven
代码语言:javascript复制
tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /opt/module/

  ② 配置环境变量

代码语言:javascript复制
vim /etc/profile

   添加以下内容:

代码语言:javascript复制
#MAVEN_HOME
export MAVEN_HOME=/opt/module/apache-maven-3.0.5
export PATH=$PATH:$MAVEN_HOME/bin

   使配置文件生效:

代码语言:javascript复制
source /etc/profile

  ② 进入解压后的 Maven 目录,编辑配置文件(更改 Maven 镜像)

代码语言:javascript复制
<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>central</mirrorOf>
  <name>Nexus aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

   ③ 查看 Maven 是否安装成功

代码语言:javascript复制
mvn -version
  1. 安装 ant ① 解压 ant
代码语言:javascript复制
tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/

  ② 配置环境变量

代码语言:javascript复制
vim /etc/profile

   添加以下内容:

代码语言:javascript复制
#ANT_HOME
export ANT_HOME=/opt/module/apache-ant-1.9.9
export PATH=$PATH:$ANT_HOME/bin

   使配置文件生效:

代码语言:javascript复制
source /etc/profile

   ③ 查看 ant 是否安装成功

代码语言:javascript复制
ant -version
  1. 安装 glibc-headers 和 g
代码语言:javascript复制
yum install glibc-headers
代码语言:javascript复制
yum install gcc-c  
  1. 安装 make 和 cmake
代码语言:javascript复制
 yum install make
代码语言:javascript复制
 yum install cmake
  1. 安装 protobuf ① 解压 protobuf
代码语言:javascript复制
tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/

  ② 配置环境变量

代码语言:javascript复制
vim /etc/profile

   添加以下内容:

代码语言:javascript复制
#LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0
export PATH=$PATH:$LD_LIBRARY_PATH

   使配置文件生效:

代码语言:javascript复制
source /etc/profile

   ③ 进入到解压后 protobuf 主目录,/opt/module/protobuf-2.5.0,然后相继执行命令

代码语言:javascript复制
./configure 
代码语言:javascript复制
make
代码语言:javascript复制
make check
代码语言:javascript复制
make install
代码语言:javascript复制
ldconfig 

   ③ 查看 protobuf 是否安装成功

代码语言:javascript复制
protoc --version
  1. 安装 openssl 库
代码语言:javascript复制
yum install openssl-devel
  1. 安装 ncurses-devel 库
代码语言:javascript复制
yum install ncurses-devel

4.3 编译源码

  1. 解压源码到 /opt/ 目录
代码语言:javascript复制
 tar -zxvf hadoop-2.7.7-src.tar.gz -C /opt/
  1. 进入到 hadoop 源码主目录 /opt/hadoop-2.7.2-src,通过 maven 执行编译命令
代码语言:javascript复制
mvn package -Pdist,native -DskipTests -Dtar

  等待时间 2 小时左右。

  1. 成功的 64 位 hadoop 包在 /opt/hadoop-2.7.2-src/hadoop-dist/target 下

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131606.html原文链接:https://javaforall.cn

0 人点赞