Hadoop 使用笔记
1、单机部署
环境准备
centos 7,作为系统环境
hadoop 版本使用hadoop-2.8.2
在安装 Hadoop 前还需要做一些必备工作
1、 创建hadoop用户
#这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。
sudo useradd -m hadoop -s /bin/bash
#使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码
sudo passwd hadoop
#hadoop 用户增加sudo权限
vim /etc/sudoers
## 找到 Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL #增加此条记录
2、java 环境安装
yum 安装
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
配置JAVA_HOME
[hadoop@aliyun-gitlab lib]$ which java
/usr/bin/java
[hadoop@aliyun-gitlab lib]$ ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 8 16:12 /usr/bin/java -> /etc/alternatives/java
[hadoop@aliyun-gitlab lib]$ ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Nov 8 16:12 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java
#通过上面命令查询到openjdk的安装路径后,编辑~/.bash_profile文件中配置JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#文件编辑完成后,执行该命令,使变量设置生效
source ~/.bash_profile
# 检验变量值
echo $JAVA_HOME
java -version
$JAVA_HOME/bin/java -version # 与直接执行 java -version 一样
安装 Hadoop 2
Hadoop 2 可以通过 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载,一般选择下载最新的稳定版本,即下载 “stable” 下的 hadoop-2.x.y.tar.gz 这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。
- 下载hadoop
wget http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.8.2.tar.gz
#解压
tar -zxf hadoop-2.8.2.tar.gz
mv hadoop-2.8.2 hadoop
- Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd hadoop
./bin/hadoop version
#成功后的输出
[hadoop@aliyun-gitlab hadoop]$ ./bin/hadoop version
Hadoop 2.8.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 66c47f2a01ad9637879e95f80c41f798373828fb
Compiled by jdu on 2017-10-19T20:39Z
Compiled with protoc 2.5.0
From source with checksum dce55e5afe30c210816b39b631a53b1d
This command was run using /home/hadoop/hadoop/share/hadoop/common/hadoop-common-2.8.2.jar
简单使用
Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
- 在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 wing[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
cd /home/hadoop/hadoop
mkdir input
#往input 文件写入测试文件(此处只简单举例,所以文件较为简单)
[hadoop@aliyun-gitlab input]$ cat input/test.txt
pfc
hgg
skkj
pfcaaa
pfchgy
pfchgy
wingaaa
wingpfc
winghaha
#运行计算
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'wing[a-z.]+'
#查看运行结果
[hadoop@aliyun-gitlab hadoop]$ cat output/*
1 wingpfc
1 winghaha
1 wingaaa
#注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。
2、分布式集群搭建
准备
三台服务器配置,系统:centos7.2
三台服务器分配的IP地址:192.168.0.71/72/73
规划:71用作主节点用作hadoop-master,其它三台为数据节点72、73用作hadoop-salve1~2
jdk和生成保持一致使用1.8版本
hadoop-2.8.2版本,下载地址:http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.8.2.tar.gz
host配置和主机名
修改三台服务器的hosts文件
sudo vim /etc/hosts
#添加以下三条记录
192.168.0.71 hadoop-master
192.168.0.72 hadoop-slave1
192.168.0.73 hadoop-slave2
检查防火墙配置,可先关掉。
查看防火墙状态
systemctl status iptables
#使用firewalld的则使用
systemctl status firewalld
关闭防火墙
systemctl stop iptables
#使用firewalld的则使用
systemctl stop firewalld
检查安全组端口是否开启
免密登陆配置
- 下面以配置hadoop-master本机无密码登录为例进行讲解,用户需参照下面步骤完成h-salve1~2两台子节点机器的本机无密码登录;
1)生产秘钥
ssh-keygen -t rsa -C 'hadoop-master'
2)将公钥追加到”authorized_keys”文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3)验证本机能无密码访问
#ssh 不是默认22端口的需自行修改,如 ssh -p 12345 hadoop-master
ssh hadoop-master
最后,依次配置h-salve1~2无密码访问
hadoop-master本机无密码登录hadoop-slave1、hadoop-slave2无密码登录
配置hadoop-slave1~hadoop-slave2本机无密码登录hadoop-master
PS: 就是配置好各机器的互信关系而已,步骤基本差不多
配置hadoop-master的hadoop环境
1、hadoop-master上 解压缩安装包及创建基本目录
安装 Hadoop 2小节,把hadoop mv 到 /usr/local/hadoop下
2、 配置hadoop-master的hadoop环境变量
#配置环境变量,修改配置文件 vim ~/.bash_profile
export HADOOP_HOME=/usr/local/hadoop
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HADOOP_HOME/bin
使得hadoop命令在当前终端立即生效
source ~/.bash_profile
3、下面配置,文件都在:/usr/local/hadoop/etc/hadoop路径下
3.1、配置core-site.xml
修改Hadoop核心配置文件/usr/local/hadoop/etc/hadoop/core-site.xml,通过fs.default.name指定NameNode的IP地址和端口号,通过hadoop.tmp.dir指定hadoop数据存储的临时文件夹。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>
特别注意: 如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删除,必须重新执行format才行,否则会出错。
3.2、配置hdfs-site.xml:
修改HDFS核心配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml,通过dfs.replication指定HDFS的备份因子为3,通过dfs.name.dir指定namenode节点的文件存储目录,通过dfs.data.dir指定datanode节点的文件存储目录。
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
3.3、配置mapred-site.xml
拷贝mapred-site.xml.template为mapred-site.xml,在进行修改
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://hadoop-master:9001</value>
</property>
</configuration>
3.4、配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
</configuration>
3.5、配置masters文件
修改/usr/local/hadoop/etc/hadoop/masters文件,该文件指定namenode节点所在的服务器机器。删除localhost,添加namenode节点的主机名hadoop-master;不建议使用IP地址,因为IP地址可能会变化,但是主机名一般不会变化。
vim /usr/local/hadoop/etc/hadoop/masters
## 内容
hadoop-master
3.6、配置slaves文件(Master主机特有)
修改/usr/local/hadoop/etc/hadoop/slaves文件,该文件指定哪些服务器节点是datanode节点。删除locahost,添加所有datanode节点的主机名,如下所示。
vim /usr/local/hadoop/etc/hadoop/slaves
## 内容
hadoop-slave1
hadoop-slave2
配置hadoop-slave的hadoop环境
下面以配置hadoop-slave1的hadoop为例进行演示,用户需参照以下步骤完成其他hadoop-slave2服务器的配置。
1、从hadoop-master复制hadoop目录的文件到hadoop-slave1节点
#此处的ssh端口若不是默认22,则需自行修改
scp -r /usr/local/hadoop hadoop-slave1:/usr/local/
登录hadoop-slave1服务器,删除slaves内容
rm -f /usr/local/hadoop/etc/hadoop/slaves
2、配置环境变量,此步骤跟hadoop-master一样
启动集群
1、格式化HDFS文件系统
进入master的~/hadoop目录,执行以下操作
bin/hadoop namenode -format
#格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
2、然后启动hadoop:
sbin/start-all.sh
成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
3、使用jps命令查看运行情况
#master 执行 jps查看运行情况
[hadoop@aliyun-gitlab hadoop]$ jps
9922 Jps
27658 NameNode
27933 SecondaryNameNode
28110 ResourceManager
#slave 执行 jps查看运行情况
[hadoop@wing-ecs hadoop]$ jps
12647 NodeManager
12540 DataNode
13150 Jps
4、命令查看Hadoop集群的状态
通过简单的jps命令虽然可以查看HDFS文件管理系统、MapReduce服务是否启动成功,但是无法查看到Hadoop整个集群的运行状态。我们可以通过 hadoop dfsadmin -report 进行查看。用该命令可以快速定位出哪些节点挂掉了,HDFS的容量以及使用了多少,以及每个节点的硬盘使用情况。
[hadoop@aliyun-gitlab hadoop]$ hadoop dfsadmin -report
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Configured Capacity: 147692552192 (137.55 GB)
Present Capacity: 91987980288 (85.67 GB)
DFS Remaining: 91987890176 (85.67 GB)
DFS Used: 90112 (88 KB)
DFS Used%: 0.00%
Under replicated blocks: 1
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (2):
Name: 120.25.85.120:50010 (hadoop-slave2)
Hostname: iZ94v1rbhw4Z
Decommission Status : Normal
Configured Capacity: 105553100800 (98.30 GB)
DFS Used: 45056 (44 KB)
Non DFS Used: 45131362304 (42.03 GB)
DFS Remaining: 55036317696 (51.26 GB)
DFS Used%: 0.00%
DFS Remaining%: 52.14%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Tue Nov 14 14:29:49 CST 2017
Name: 120.78.143.38:50010 (hadoop-slave1)
Hostname: wing-ecs
Decommission Status : Normal
Configured Capacity: 42139451392 (39.25 GB)
DFS Used: 45056 (44 KB)
Non DFS Used: 3023679488 (2.82 GB)
DFS Remaining: 36951572480 (34.41 GB)
DFS Used%: 0.00%
DFS Remaining%: 87.69%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Tue Nov 14 14:29:49 CST 2017
5、hadoop 重启
sbin/stop-all.sh
sbin/start-all.sh