Hadoop-2-安装
0、软件版本
本文基于 Apache Hadoop 2.9.2(2018 Nov 19)版本
JDK使用 jdk1.8.0_212 版本
Linxu选择 CentOS release 6.8 (Final)
1、配置Linux
1)配置静态IP
修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件
###首先修改这2项
#系统启动时激活网卡
ONBOOT=yes
#配置IP为静态类型,不要自动获取IP
BOOTPROTO=static
###再配置这3项
#手动指定IP
IPADDR=192.168.xxx.xxx
#指定网关
GATEWAY=192.168.xxx.xxx
#指定DNS域名解析,这个和上面的网关是一样的
DNS1=192.168.xxx.xxx
修改好后,使用service network restart
命令,重启网络服务,并使用ping
命令,查看是否配置正确
如果网络服务重启失败,则重新启动系统
如果使用的是克隆的虚拟机,则需要修改mac地址
将 /etc/udev/rules.d/70-persistent-net.rules 文件里的最下面的 NAME=“eth1” 的 ATTR{address} 的值拷贝到 /etc/sysconfig/network-scripts/ifcfg-eth0 文件里的 HWADDR属性中,同时修改eth1为eth0,并删除上面的eth0
#/etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{
address}=="???", ATTR{
type}=="1", KERNEL=="eth*", NAME="eth1"
#/etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=???
2)修改主机名称
修改 /etc/sysconfig/network 文件
HOSTNAME=???
修改完成后,重新启动系统
3)添加host
将上面配置的 静态IP 和 主机名称 都添加到 /etc/hosts 文件中
2、本地(独立)模式
1)安装JDK
从Oracle官网下载JDK 8,并配置好环境变量
export JAVA_HOME=/???/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
2)安装Hadoop
从Hadoop官网下载,并解压缩
3)新建用户
使用 useradd
命令,新建一个用户
4)分配Hadoop目录权限
使用chown -R 用户名:组名 Hadoop目录
将刚才解压好的Hadoop目录赋予权限给新创建的用户
5)切换至新用户
使用su 用户名
命令
6)测试
【1】grep
-
首先进入Hadoop目录当中,新建一个目录,例如
input
-
复制Hadoop目录下的 etc/hadoop 里的所有XML文件到 input 目录中,
cp -v etc/hadoop/*.xml input
-
执行Hadoop命令
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
这个命令表示的是,执行官方提供的样例jar里的grep程序,输入目录是input,输出目录是output,引号里的内容是过滤规则(正则表达式)
-
查看Hadoop目录,可以看到多了一个名为output的目录,里面有2个文件,一个名为
part-r-00000
,是输出结果;另外一个名为_SUCCESS
,它的大小为0,仅仅表示执行成功 -
使用
cat
命令查看 part-r-00000 文件的内容,结果显示1 dfsadmin
注意事项:
- 输出目录不能存在,否则会报错 org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/??? already exists
- 一定要将主机名称配置到host中,否则会报错 java.net.UnknownHostException: ???: ???: 未知的名称或服务
【2】wordcount
-
首先进入Hadoop目录当中,新建一个目录,例如
wcinput
-
进入新创建的目录,新建一个文件,名称随意,例如
wc.input
,并在文件中输入一些字符,每个字符之间使用空格或Tab隔开 -
执行Hadoop命令
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount wcinput wcoutput
这个命令表示的是,执行官方提供的样例jar里的wordcount程序,输入目录是wcinput,输出目录是wcoutput
-
查看Hadoop目录,可以看到多了一个名为wcoutput的目录,里面有2个文件,一个名为
part-r-00000
,是输出结果;另外一个名为_SUCCESS
,它的大小为0,仅仅表示程序执行成功 -
使用
cat
命令查看 part-r-00000 文件的内容,它是以每个字符为一行,每行以字符开头,并以字符出现的次数结尾
3、伪分布式模式【在单节点上运行Hadoop】
1) 在HDFS上运行Hadoop
【1】修改配置文件
① etc/hadoop/core-site.xml 默认配置参数
<configuration>
<!-- 修改NameNode的服务器的IP和端口号,默认端口号为9000 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://本机IP:端口号</value>
</property>
<!-- 修改临时文件目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/指定路径</value>
</property>
</configuration>
② etc/hadoop/hdfs-site.xml 默认配置参数
<configuration>
<!-- 修改副本数 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
【2】格式化文件系统,并启动HDFS
① 执行格式化命令(仅初次启动时需要格式化) bin/hdfs namenode -format
② 启动HDFS(以后台运行的方式)
NameNode sbin/hadoop-daemon.sh start namenode
DataNode sbin/hadoop-daemon.sh start datanode
启动完成后,可以使用 jps
来验证是否启动成功,出现进程号即可
【3】使用管理页面查看NameNode状态
链接是 http://文件系统主机IP:50070/
【4】在HDFS上创建目录,并上传文件
① 创建目录 bin/hdfs dfs -mkdir -p /父路径/子路径
② 上传文件 bin/hdfs dfs -put /文件系统主机目标文件 /HDFS目标路径
③ 查看目录 bin/hdfs dfs -ls /HDFS路径
④ 查看文件 bin/hdfs dfs -cat /HDFS目标文件
【5】执行MapReduce程序,并查看结果
① 执行程序 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar MapReduce程序 /HDFS输入路径 /HDFS输出路径
② 查看结果 bin/hdfs dfs -cat /HDFS输出路径/*
*代表路径下的所有文件
【6】下载文件
① 使用NameNode的管理页面下载,Utilities --> Browse the file system,再找到对应的文件,点击Download,注意端口号是50075,另外浏览器客户端还需要配置文件系统主机IP到host文件中
② 使用Hadoop命令 bin/hadoop fs -get /HDFS目标文件 /文件系统主机目标路径
【7】查看和删除目录
① 查看 bin/hadoop fs -ls -R /HDFS目录
② 删除 bin/hadoop fs -rm -r /HDFS目录
【8】关闭HDFS
执行命令sbin/hadoop-daemon.sh stop namenode
和 sbin/hadoop-daemon.sh stop datanode
2)在YARN上运行Hadoop
【1】修改配置文件
① 复制etc/hadoop/mapred-site.xml.template到etc/hadoop/mapred-site.xml,再修改其内容 默认配置参数
<configuration>
<!-- 修改执行MapReduce作业时的框架名称 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
② etc/hadoop/yarn-site.xml 默认配置参数
<configuration>
<!-- 修改服务器列表 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 修改ResourceManager的主机地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>YARN的ResourceManager的主机IP</value>
</property>
</configuration>
【2】启动YARN
注意在启动YARN之前,需要确保HDFS已经启动
① 启动ResourceManager sbin/yarn-daemon.sh start resourcemanager
② 启动NodeManager sbin/yarn-daemon.sh start nodemanager
注意使用jps
查看相应的启动进程
【3】使用管理页面查看ResourceManager状态
链接是 http://文件系统主机IP:8088/
【4】运行一个MapReduce job
使用命令 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar MapReduce程序 /HDFS输入路径 /HDFS输出路径
任务执行后,可以看到如下日志
19/08/11 19:20:20 INFO mapreduce.Job: Running job: job_1565522114534_0001
19/08/11 19:20:29 INFO mapreduce.Job: Job job_1565522114534_0001 running in uber mode : false
19/08/11 19:20:29 INFO mapreduce.Job: map 0% reduce 0%
19/08/11 19:20:36 INFO mapreduce.Job: map 100% reduce 0%
19/08/11 19:20:42 INFO mapreduce.Job: map 100% reduce 100%
19/08/11 19:20:43 INFO mapreduce.Job: Job job_1565522114534_0001 completed successfully
【5】关闭YARN
① 关闭ResourceManager sbin/yarn-daemon.sh stop resourcemanager
② 关闭NodeManager sbin/yarn-daemon.sh stop nodemanager