一, 安装之前的准备
1.1 修改主机名称
进入 Linux 系统查看本机的主机名. 通过 hostname 命令查看.
- [root@localhost ~]# hostname
- localhost.localdomain
如果此时需要修改主机名则可以按照如下的方式进行修改
范例一: 临时修改主机名称为 Hadoop01 hostname hadoop01 重启之后失效
范例二: 永久修改主机名称为 Hadoop01
- vi /etc/sysconfig/network
- NETWORKING=yes
- HOSTNAME=hadoop01
在修改完主机名称之后, 需要编辑 / etc/hosts 文件需要把主机名称与 IP 地址进行映射
vi /etc/hosts 在该文件下添加如下内容
192.168.1.128 hadoop01 # 地址是自己主机名称的 ip
1.2 关闭防火墙
1)service iptables stop 关闭防火墙
2)chkconfig iptables off 永久关闭防火墙启动
3)chkconfig iptables --list 查看防火墙开机启动状态
1.3 规划软件安装目录
1)创建安装包的保存目录, 以及安装目录
mkdir -p /opt/software 保存软件的安装包
mkdir -p /opt/App 软件的安装路径
1.4 创建 Hadoop 用户, 以及赋予 sudo 权限
1)创建 Hadoop 用户, 以后的操作都是在 hadoop 用户下完成的
useradd hadoop 创建 hadoop 用户
passwd hadoop 为 hadoop 用户设置密码
2)为 hadoop 用户赋予 sudo 权限
在 root 用户下, 执行 visudo 命令编辑如下内容
Allow root to run any commands anywhere root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL 为 hadoop 用户设置 sudo 权限
Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL hadoop ALL=(ALL) NOPASSWD: ALL. 为 hadoop 用户设置免密码 sudo 权限
1.5 安装 JDK 环境
首先先把 jdk 的安装包上传到 software 文件夹下, 之后对其安装
1)解压 sudo tar -zvxf jdk-8u181-Linux-x64.tar.gz
2)配置 JDK 环境变量
首先获取 JDK 的安装路径
- [hadoop@hadoop01 jdk1.8.0_181]$ pwd
- /opt/soft/jdk1.8.0_181
接下来打开 /etc/profile 文件进行环境变量的设置
vi /etc/profile
在 profie 文件末尾添加 jdk 路径:
- JAVA_HOME
- export JAVA_HOME=/data/jdk1.8.0_181
- export PATH=$JAVA_HOME/bin:$PATH
保存后推出 :wq
完成以上的操作之后, 配置文件并不能立即生效, 需要使用到如下命令, 使配置文件立即生效
[hadoop@hadoop01 jdk1.8.0_181]$ source /etc/profile
之后测试 JDK 环境变量是否配置成功, 使用如下命令输出 JDK 的版本信息
- [hadoop@hadoop01 jdk1.8.0_181]$ java -version
- java version "1.8.0_181"
- Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
如果能看到如上的信息, 说明 JDK 的环境变量已经配置成功
1.6 安装 Hadoop 环境
1)进入到软件包的安装路径下:
[hadoop@hadoop01 /]$ cd /opt/soft/
对 hadoop 安装包进行解压
[hadoop@hadoop01 soft]$ sudo tar -zvxf hadoop-2.7.2.tar.gz
解压成功之后, hadoop 的安装目录结构如下:
bin:Hadoop 最基本的管理脚本和使用脚本所在目录, 这些脚本是 sbin 目录下管理脚本的基础实现, 用户可以直接使用这些脚本管理和使用 hadoop
etc:Hadoop 配置文件所在目录, 包括 core-site.xml, hdfs-site.xml, mapred-site.xml 等从 hadoop1.0 继承而来的配置文件和 yarn-site.xml 等 hadoop 2.0 新增的配置文件
include: 对外提供的编程酷头文件(具体动态库和静态库在 lib 目录中), 这些头文件均是用 c++ 定义的, 通常用于 c++ 程序访问 hdfs 或者编写 mapreduce 程序
lib: 该目录包含了 Hadoop 对外提供的的编程动态库和静态库, 与 include 目录中的头文件结合使用.
libexec: 各个服务对应的 shell 配置文件所在目录, 可用于配置日志输出目录, 启动参数 (比如 JVM 参数) 等基本信息.
sbin:Hadoop 管理脚本所在目录, 主要包含 HDFS 和 YARN 中各类服务的启动 / 关闭脚本
share:Hadoop 各个模块编译后的 jar 包所在目录
2) 配置 hadoop 环境
hadoop 需要我们配置的相关文件都存放在 $HADOOP_HOME/etc/hadoop 目录下面, 首先进入到该目录
[hadoop@hadoop01 hadoop]$ cd etc/hadoop/
进入到该目录之后使用 ls 命令查看该目录下的文件信息
- -rw-r--r--. 1 root root 4436 May 22 2017 capacity-scheduler.xml
- -rw-r--r--. 1 root root 1335 May 22 2017 configuration.xsl
- -rw-r--r--. 1 root root 318 May 22 2017 container-executor.cfg
- -rw-r--r--. 1 root root 774 May 22 2017 core-site.xml
- -rw-r--r--. 1 root root 3670 May 22 2017 hadoop-env.cmd
- -rw-r--r--. 1 root root 4224 May 22 2017 hadoop-env.sh
- -rw-r--r--. 1 root root 2598 May 22 2017 hadoop-metrics2.properties
- -rw-r--r--. 1 root root 2490 May 22 2017 hadoop-metrics.properties
- -rw-r--r--. 1 root root 9683 May 22 2017 hadoop-policy.xml
- -rw-r--r--. 1 root root 775 May 22 2017 hdfs-site.xml
- -rw-r--r--. 1 root root 1449 May 22 2017 httpfs-env.sh
- -rw-r--r--. 1 root root 1657 May 22 2017 httpfs-log4j.properties
- -rw-r--r--. 1 root root 21 May 22 2017 httpfs-signature.secret
- -rw-r--r--. 1 root root 620 May 22 2017 httpfs-site.xml
- -rw-r--r--. 1 root root 3518 May 22 2017 kms-acls.xml
- -rw-r--r--. 1 root root 1527 May 22 2017 kms-env.sh
- -rw-r--r--. 1 root root 1631 May 22 2017 kms-log4j.properties
- -rw-r--r--. 1 root root 5511 May 22 2017 kms-site.xml
- -rw-r--r--. 1 root root 11237 May 22 2017 log4j.properties
- -rw-r--r--. 1 root root 951 May 22 2017 mapred-env.cmd
- -rw-r--r--. 1 root root 1383 May 22 2017 mapred-env.sh
- -rw-r--r--. 1 root root 4113 May 22 2017 mapred-queues.xml.template
- -rw-r--r--. 1 root root 758 May 22 2017 mapred-site.xml.template
- -rw-r--r--. 1 root root 10 May 22 2017 slaves
- -rw-r--r--. 1 root root 2316 May 22 2017 ssl-client.xml.example
- -rw-r--r--. 1 root root 2268 May 22 2017 ssl-server.xml.example
- -rw-r--r--. 1 root root 2250 May 22 2017 yarn-env.cmd
- -rw-r--r--. 1 root root 4567 May 22 2017 yarn-env.sh
- -rw-r--r--. 1 root root 690 May 22 2017 yarn-site.xml
我们首先可以发现, 这些文件目前的权限都是基于 root 用户的, 但是我们现在使用的是 hadoop 用户, hadoop 用户并没有这些文件的权限, 所以首先需要修改权限
使用 chown 命令修改用户与用户组权限
sudo chown -R hadoop:hadoop /opt/soft/hadoop-2.7.2/
修改完成之后再次使用 ls 命令查看文件, 查看是否修改成功 [hadoop@hadoop01 hadoop]$ ll
- -rw-r--r--. 1 hadoop hadoop 4436 May 22 2017 capacity-scheduler.xml
- -rw-r--r--. 1 hadoop hadoop 1335 May 22 2017 configuration.xsl
- -rw-r--r--. 1 hadoop hadoop 318 May 22 2017 container-executor.cfg
- -rw-r--r--. 1 hadoop hadoop 774 May 22 2017 core-site.xml
- -rw-r--r--. 1 hadoop hadoop 3670 May 22 2017 hadoop-env.cmd
- -rw-r--r--. 1 hadoop hadoop 4224 May 22 2017 hadoop-env.sh
- -rw-r--r--. 1 hadoop hadoop 2598 May 22 2017 hadoop-metrics2.properties
- -rw-r--r--. 1 hadoop hadoop 2490 May 22 2017 hadoop-metrics.properties
- -rw-r--r--. 1 hadoop hadoop 9683 May 22 2017 hadoop-policy.xml
- -rw-r--r--. 1 hadoop hadoop 775 May 22 2017 hdfs-site.xml
- -rw-r--r--. 1 hadoop hadoop 1449 May 22 2017 httpfs-env.sh
- -rw-r--r--. 1 hadoop hadoop 1657 May 22 2017 httpfs-log4j.properties
- -rw-r--r--. 1 hadoop hadoop 21 May 22 2017 httpfs-signature.secret
- -rw-r--r--. 1 hadoop hadoop 620 May 22 2017 httpfs-site.xml
- -rw-r--r--. 1 hadoop hadoop 3518 May 22 2017 kms-acls.xml
- -rw-r--r--. 1 hadoop hadoop 1527 May 22 2017 kms-env.sh
- -rw-r--r--. 1 hadoop hadoop 1631 May 22 2017 kms-log4j.properties
- -rw-r--r--. 1 hadoop hadoop 5511 May 22 2017 kms-site.xml
- -rw-r--r--. 1 hadoop hadoop 11237 May 22 2017 log4j.properties
- -rw-r--r--. 1 hadoop hadoop 951 May 22 2017 mapred-env.cmd
- -rw-r--r--. 1 hadoop hadoop 1383 May 22 2017 mapred-env.sh
- -rw-r--r--. 1 hadoop hadoop 4113 May 22 2017 mapred-queues.xml.template
- -rw-r--r--. 1 hadoop hadoop 758 May 22 2017 mapred-site.xml.template
- -rw-r--r--. 1 hadoop hadoop 10 May 22 2017 slaves
- -rw-r--r--. 1 hadoop hadoop 2316 May 22 2017 ssl-client.xml.example
- -rw-r--r--. 1 hadoop hadoop 2268 May 22 2017 ssl-server.xml.example
- -rw-r--r--. 1 hadoop hadoop 2250 May 22 2017 yarn-env.cmd
- -rw-r--r--. 1 hadoop hadoop 4567 May 22 2017 yarn-env.sh
- -rw-r--r--. 1 hadoop hadoop 690 May 22 2017 yarn-site.xml
通过再次查看我们发现, 现在的权限已经全部修改为 hadoop , 这样我们就可以在 hadoop 用户下对这些文件进行操作了
完成了以上的配置之后, 我们接下来首先需要配置如下文件
hadoop-env.sh: 用于 hadoop 的环境变量配置文件
- #The java implementation to use.
- export JAVA_HOME=/opt/soft/jdk1.8.0_181
在该配置文件中, 找到如上内容, 并且修改 JAVA_HOME 为自己的 JDK 路径 配置完成之后, 可以在 hadoop 根路径下, 输入如下命令
- bin/hadoop
- Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
- CLASSNAME run the class named CLASSNAME
- or
- where COMMAND is one of:
- fs run a generic filesystem user client
- version print the version
- jar run a jar file
- note: please use "yarn jar" to launch
- YARN applications, not this command.
- checknative [-a|-h] check native hadoop and compression libraries availability
- distcp copy file or directories recursively
- archive -archiveName NAME -p * create a hadoop archive
- classpath prints the class path needed to get the
- credential interact with credential providers
- Hadoop jar and the required libraries
- daemonlog get/set the log level for each daemon
- trace view and modify Hadoop tracing settings
Most commands print help when invoked w/o parameters.
如果能看到如上的信息, 说明基本的运行环境已经搭建完成了
二, Hadoop 运行模式
Hadoop 的运行模式, 分为以下几种:
1) 本地模式(默认模式)
不需要启用单独进程, 直接可以运行, 测试和开发时使用.
2)伪分布模式
等同于完全分布式, 只有一个节点.
3)完全分布式模式
多个节点一起运行.
2.1 本地运行 Hadoop 官方案例 Grep
对于这个案例来说, 主要的作用就是, 在一堆文件中与规定的正则表达式进行匹配, 把匹配成功的单词出现的次数, 进行统计
- $ mkdir input
- $ cp etc/hadoop/*.xml input
- $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
- $ cat output/*
以上为官网上给出的案例代码
从以上的案例代码可以得出, 首先需要创建一个目录, 用于存放需要统计的文件, 而对于统计结果的保存目录则不用以前创建, 注意: Hadoop 中输出结果的目录是不能提前存在的
范例: 运行 grep 案例
1)在 hadoop 根目录下创建一个文件夹 input
[hadoop@hadoop01 hadoop-2.7.2]$ mkdir input
2) 将 hadoop 的 xml 配置文件复制到 input
[hadoop@hadoop01 hadoop-2.7.2]$ cp etc/hadoop/*.xml input/
3) 执行 share 目录下的 mapreduce 程序
[hadoop@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
4) 查看输出结果
- [hadoop@hadoop01 hadoop-2.7.2]$ cat output/*
- 1 dfsadmin
2.2 运行官方 wordcount 案例
1) 在 hadoop 根目录中创建用于保存统计文件的 wcinput 目录
[hadoop@hadoop01 hadoop-2.7.2]$ mkdir wcinput
2) 在 wcinput 文件下创建一个 wordcount.txt 文件
- [hadoop@hadoop01 wcinput]$ vi worldcount.txt
- hello java world input
- hadoop hive zookeeper java
- world input hello hadoop
- hbase zookeeper sqoop
3) 执行 wordcount 案例程序
[hadoop@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
4) 查看结果
- [hadoop@hadoop01 hadoop-2.7.2]$ cat wcoutput/part-r-00000
- hadoop 2
- hbase 1
- hello 2
- hive 1
- input 2
- java 2
- sqoop 1
- world 2
- zookeeper 2
通过以上的方式, 就可以完成 Hadoop 的最基本的环境搭建, 以及运行 Hadoop 的一些案例
来源: https://www.2cto.com/kf/201905/808187.html