由于 Hadoop 底层是用 Java 编写,因此还需要安装 JDK
下载 Hadoop 和 JDK 的源码包
新建普通用户,将源码包移动到普通用户下,并切换到普通用户
useradd dsd
mv jdk-8u181-linux-x64.tar.gz hadoop-3.2.1.tar.gz /home/dsd/
su - dsd
解压 JDK 源码包并做软链接
tar zxf jdk-8u181-linux-x64.tar.gz
ln -s jdk1.8.0_181/ jdk # 做软链接有利于后期更新,只需要将链接的指向修改即可
tar zxf hadoop-3.2.1.tar.gz
ln -s hadoop-3.2.1 hadoop
修改 hadoop 环境(将 JDK 的路径告知 hadoop )
vim /home/dsd/hadoop/etc/hadoop/hadoop-env.sh
###
export JAVA_HOME=/home/dsd/jdk
export HADOOP_HOME=/home/dsd/hadoop
###
vim .bash_profile
source .bash_profile #使其生效
hadoop # 运行
默认情况下,Hadoop 被配置为以非分布式模式作为单个 Java 进程运行
复制解压缩的conf目录以用作输入,然后查找并显示给定正则表达式的每个匹配项。输出被写入给定的输出目录
> mkdir input
> cp etc/hadoop/*.xml input
> hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
> 使用 grep 方法,从 input 中取出数据,输出的数据到 output 目录$\color{#FF0000}{(output运行前不能存在)}$ 'dfs[a-z.]+' 为过滤的关键字
> cat output/*
Hadoop 也可以以伪分布式模式在单节点上运行,其中每个 Hadoop 守护程序都在单独的 Java 进程中运行
设置组态
vim hadoop/etc/hadoop/core-site.xml # 设定hdfs
vim hadoop/etc/hadoop/hdfs-site.xml # 设置hadoop副本数,默认是3,但此时我们使用的是单台主机,因此设置为1即可,后续可根据需求更改
在 hadoop 中 works 相当于从机,查看 works 内容,为 localhost 。即此刻 master 和 slave 在一个主机上。
设置 ssh 免密
> ssh-keygen # 生成密钥
> cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 将公钥补充到 authorized_keys 中
> chmod 0600〜/ .ssh / authorized_keys # 修改权限
上面两条指令的结果等同于::
> ssh-copy-id localhost # 在同台主机可以使用上述方式来完成,而在跨主机时需要使用该命令来完成
执行
> hdfs namenode -format # namenode 类似于 master 节点,datanode 类似于 slave 节点
将 sbin 添加到系统环境变量中,方便直接运行里面的脚本
vim .bash_profile
###
:$HOME/hadoop/sbin/:$HOME/jdk/bin/
###
source .bash_profile # 使环境变量修改生效
start-dfs.sh # 启动程序
hadoop 守护程序日志输出到了 H A D O O P L O G D I R d i r e c t o r y 目 录 下 , 默 认 在 HADOOP_LOG_DIR directory目录下,默认在 HADOOPLOGDIRdirectory目录下,默认在HADOOP_HOME/logs
我 犯 了 一 个 很 傻 的 错 , 没 有 关 闭 防 火 墙 , 导 致 无 法 在 w e b 端 访 问 。 在 这 里 打 上 标 签 , 提 醒 自 己 以 后 一 定 要 细 心 \color{#FF0000}{我犯了一个很傻的错,没有关闭防火墙,导致无法在web端访问。在这里打上标签,提醒自己以后一定要细心} 我犯了一个很傻的错,没有关闭防火墙,导致无法在web端访问。在这里打上标签,提醒自己以后一定要细心
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/dsd
hdfs dfs -put input
先删除本地的input 和 output ,来比较和单机操作的速度区别
rm -fr input output
hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
就单论运行速度而言,会比单机操作慢一些,当然由于我们数据量小,不是很明显。但是可以想象到,当数据量达到一定值时,这个时差还是很可观的
hdfs dfs -get output output
cat output/*
查看分布式文件系统上的输出文件
8. 关闭守护程序
stop-dfs.sh
在单个节点上的YARN
通过设置一些参数并另外运行 ResourceManager 守护程序和 NodeManager 守护程序,以伪分布式模式在YARN上运行 MapReduce 作业
上述 1~4 操作做过后再执行下面的操作:
vim hadoop/etc/hadoop/mapred-site.xml
###
mapreduce.framework.name name>
yarn value>
property>
mapreduce.application.classpath name>
$ HADOOP_MAPRED_HOME / share / hadoop / mapreduce / *:$ HADOOP_MAPRED_HOME / share / hadoop / mapreduce / lib / * value>
property>
configuration>
###
vim hadoop/etc/hadoop/yarn-site.xml
###
yarn.nodemanager.aux-services name>
mapreduce_shuffle value>
property>
yarn.nodemanager.env-whitelist name>
<值> JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME value>
property>
configuration>
###
start-yarn.sh
http://localhost:8088/
stop-yarn.sh