@
目录
官方镜像下载地址: Centos,hadoop,Java
Centos为CentOS-7-x86_64-DVD-2009
Hadoop为hadoop-3.3.1.tar.gz
Java为jdk-8u301-linux-x64.tar.gz
PS:Hadoop3.X Java最低版本为1.8
纯原生态安装,非CDH和HDP,或是Ambari
修改 /etc/sysconfig/network中的hostname
vi /etc/sysconfig/network中的hostname
或者这样
hostnamectl set-hostname Hadoop
#secureCRT 中ctrl+D
修改/etc/hosts文件
vi /etc/hosts
vi /etc/hosts
# 这里我除了修改127.0.0.1里的localhost.localdomain,还把其它服务器的ip和对应名称添加进来
127.0.0.1 localhost hadoop1 localhost4 localhost4.localdomain4
::1 localhost hadoop1 localhost6 localhost6.localdomain6
192.168.100.10 hadoop1
192.168.100.20 hadoop2
192.168.100.30 hadoop3
重启服务器
# 关闭
systemctl stop firewalld
# 禁止开机自启
systemctl disable firewalld
# 创建用户并使用 /bin/bash 作为shell
$ useradd -m hadoop -s /bin/bash
# 给hadoop用户设置密码,若提示密码无效,不用管,接着输入一次即可
$ passwd hadoop
# 给hadoop增加执行权限
$ visudo
#98行 输入 :98 跳转至98行,增加一行 hadoop ALL=(ALL) ALL
$ root ALL=(ALL) ALL
$ hadoop ALL=(ALL) ALL
检查是否安装SSH
systemctl status sshd
已安装会显示ssh服务的状态(actving),否则,执行下面命令安装
# -y表示全部同意,不用每次都按y
yum install openssh-clients -y
yum install openssh-server -y
测试是否可用
#按提示确认连接后,输入当前用户密码即可,初始没有密码会提示创建密码
ssh localhost
设置无密码登录
#~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限
此时再用 ssh localhost 命令,无需输入密码就可登陆
查找当前是否有java安装目录
如果有则卸除自带的Java环境
[root@localhost ~]# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Aug 6 2020 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Aug 6 2020 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java
额外知识
安装目录在 /usr/lib/jvm
1.通过rpm等方式安装的jdk,我们在 profile 文件里是没有看到环境变量配置的。我们调用java命令时可以正常执行,是他们是严格安装linux对环境变量的路径要求进行安装,并将相关命令链接到 /usr/bin 目录下,当我们在任意位置执行时,系统都会到 /usr/bin 下来执行。
/usr/bin 可执行的命令安装目录
/usr/lib 程序所使用的库函数保存位置
/usr/share/doc 基本的软件使用手册保存位置
/usr/share/man 帮助文件保存位置
使用 yum install java-1.8.0-openjdkl.x86_64 默认是只有jre的,jps,jstat等命令是不存在的,这个时候还需要安装开发包,找到后缀是devel的,执行 yum install java-1.8.0-openjdk-devel.x86_64 即可。
再加个 卸载java
rpm -qa | grep jdk
# 会出来一个类似下面这个的
copy-jdk-configs-3.3-10.el7_5.noarch
# 执行卸载
yum -y remove copy-jdk-configs-3.3-10.el7_5.noarch
如果没有Java环境,则
一种是全局,修改 /etc/profile 文件,
一种是当前角色,修改 ~/.bash_profile 文件。
在文件中增加下面内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存退出后,执行 source /etc/profile(如果是当前角色,刷新对应的bash_profile) 刷新环境变量
上传至服务器,或者从服务器中下载
找个目录解压,比如/opt下
# -C 是指定解压目录
tar -zxvf hadoop-3.3.0.tar.gz -C /opt
解压完检查hadoop是否可用
#切换到hadoop的安装目录执行, 成功则显示版本信息
$ cd /opt/hadoop-3.3.0
$ ./bin/hadoop version
这里我们可以将hadoop也加入环境变量,就不需要每次到bin目录下执行
# 编辑profile文件
vi /etc/profile
# 增加hadoop环境变量
export HADOOP_HOME=/opt/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 保存后刷新下环境变量
source /etc/profile
主要用来调试时使用。
Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
这里 我们试验的是 grep .
$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
$ cat ./output/*
Hadoop 的配置文件位于 安装目录下 /etc/hadoop/ 中
[root@hadoop1 hadoop]# pwd
/opt/hadoop-3.3.0/etc/hadoop
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
#修改配置文件hadoop-env.sh
# set to the root of your Java installation
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
#修改配置文件 core-site.xml
#修改配置文件 hdfs-site.xml,
#搭建集群后,hadoop本身自带了一个webUI访问页面
./bin/hdfs namenode -format
./sbin/start-dfs.sh
#启动完成后,可以通过命令 jps 来判断是否成功启动
[hadoop@localhost hadoop-3.3.0]$ jps
32081 NameNode
32561 Jps
32234 DataNode
#停止
./sbin/stop-dfs.sh
如果出现
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解决方法:
方法一、
在Hadoop安装目录下找到sbin文件夹
在里面修改四个文件
1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root2、对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root然后重新启动
建议第二种(推荐,实用)
cd /opt/hadoop-3.3.0/etc/hadoop
vim /hadoop-env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root日志文件输出在 安装目录下的logs文件夹中。
可以访问web页面,前面配置过的 http://localhost:9870/
./bin/hdfs dfs -mkdir -p /user/test/input
./bin/hdfs dfs -put input/core-site.xml /user/test/input/
./bin/hdfs dfs -ls /user/test/input/
./bin/hdfs dfs -cat /user/test/input/core-site.xml
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/test/input/core-site.xml /user/test/output/
./bin/hdfs dfs -cat /user/test/output/*
在浏览器中查看:
上述通过 ./sbin/start-dfs.sh 启动 Hadoop,是启动 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
#修改内容如下
PS:这里不需要配置resourceManagerName.hostname。
3. 启动 YARN
启动前必须保证NameNode和DataNode已经启动:
# 启动YARN
./sbin/start-yarn.sh
# 停止
./sbin/stop-yarn.sh
这里可以访问 ResourceManager – http://localhost:8088/
4. 开启历史服务器
在Web中查看任务运行情况 – http://localhost:19888/
mapred --daemon start historyserver
关闭
./sbin/stop-all.sh
# 历史进程要单独关闭
mapred --daemon stop historyserver
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/input
# 将配置文件作为输入文件
$ bin/hdfs dfs -put etc/hadoop/*.xml /user/input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/input/core-site.xml /user/output/
$ bin/hdfs dfs -cat /user/output/*
# Hadoop 运行程序时,输出目录不能存在
$ bin/hdfs dfs -rm -r /user/output
应用运行完成以后,将程序运行日志信息上传到HDFS系统上,方便的查看到程序运行详情,方便开发调试。
修改配置文件 yarn-site.xml
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
重新执行上面的wordcount,然后在JobHistory里面可以找到相应的日志。
http:localhost:8088
准备好三台服务器,按照前面的前置操作(注意SSH免密要配置好),下载安装的步骤准备好。(如果是Vmware则关机克隆)
注意!!!三台均要配置SSH免密
此处使用ssh-copy-id命令,可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.20
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.30
#另外同理
Linux手册——ssh-copy-id
hadoop1 | hadoop2 | hadoop3 | |
---|---|---|---|
HDFS | NameNode | SecondaryNameNode | |
DataNode | DataNode | DataNode | |
YARN | ResourceManager | ||
NodeManager | NodeManager | NodeManager | |
#### 集群:修改主机名 |
[root@192.168.100.10 ~] hostnamectl set-hostname hadoop1
[root@192.168.100.20 ~] hostnamectl set-hostname hadoop2
[root@192.168.100.30 ~] hostnamectl set-hostname hadoop3
如果在SecureCRT中,可以用Ctrl+D重新登陆就可显示为hadoop主机名
hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers
位置在hadoop文件路径/etc/hadoop
定位52行,配置自己的jdk路径即可
cd /opt/{hadoop}/etc/hadoop
# 指定jdk路径
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
hadoop1
hadoop2
hadoop3
在hadoop3.2之前workers还是为slaves
主节点修改【Hadoop1】传送给其他两个节点
先格式化NameNode,在hadoop1上执行
hdfs namenode -format
注意,尽量少格式化NameNode
在master节点启动start.sh
sh /export/servers/hadoop-3.3.1/sbin/start-all.sh
#或者进入sbin路径
./start-all.sh
Starting namenodes on [hadoop1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop3]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
vi /etc/profile
#输入如下命令,在环境变量中添加下面的配置
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
生效
source /etc/profile
将start-dfs.sh,stop-dfs.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
将start-yarn.sh,stop-yarn.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
# hadoop1
bin/hdfs --daemon start namenode
bin/hdfs --daemon start datanode
bin/yarn --daemon start nodemanager
如果dataNode节点未启动成功或者是启动自动宕掉
一、清理hadoop数据temp文件
二、重新把初次得namenode clusterID
通过日志查看,得到/var/data/hadoop/dfs/data/current
# hadoop2
bin/hdfs --daemon start datanode
bin/yarn --daemon start resourcemanager
bin/yarn --daemon start nodemanager
# hadoop3
bin/hdfs --daemon start datanode
bin/hdfs --daemon start secondarynamenode
bin/yarn --daemon start nodemanager
这里要把/etc/hosts里面的127.0.01的映射注释掉,在没有注释掉的时候启动时节点之间不能连接。
直接在NameNode节点执行 sbin/start-dfs.sh
# hadoop1
sbin/start-dfs.sh
# hadoop2,hadoop3 这里单独去启动了dataNode
bin/hdfs --daemon start datanode
# hadoop2
sbin/start-yarn.sh
# hadoop1,hadoop3
bin/yarn --daemon start nodemanager
找到对应的data/logs。不存在则提前创建
该目录下创建upload2HDFS.sh 脚(jio)本文件。写入java环境变量,主要是为了提高系统的可靠性,哪怕没有配置环境变量也能运行
vi upload2HDFS.sh
输入命令
export JAVA_HOME = "你的jdk安装路径"
export JRE_HOME = ${JAVA_HOME}/jre
export CLASSPATH = .:{JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH = ${JAVA_HOME}/bin:$PATH
export HADOOP_HOME = "你的Hadoop路径"
export PATH = ${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
##需要提前创建好文件目录
#日志存放的目录
log_src_dir = "自定义" #/export/data/logs/log
#待上传存放的目录
log_toupload_dir = "自定义/toupload" #/export/data/log/toupload
命名格式以时间结尾、并输出打印信息
#设置日期
date1=`date-d last-day + %Y_%m_%d`
#日志文件上传到hdfs的根目录
hdfs_root_dir=/data/clickLog/$date1/
#打印环境变量信息
echo "envs: hadoop_home: $AHDOOP_HOME"
#读取日志文件的目录,判断是否有需要上传的文件
echo "log_src_dir:"$log_src_dir
ls $log_src_dir | while read fileName
do
if [[ "$fileName"==access.log.* ]];then
date = `date + %Y%d_%H_%M_%S`
#将文件移动到待上传目录并重命名
echo "moving $log_src_dir$fileName to
$log_toupload_dir"xxxxx_click_log_$fileName"date"
mv $log_src_dir$fileName
$log_toupload_dir"xxxxx_click_log_$fileName"date
#将待上传的文件path写入一个列表文件willDoing,
echo $log_toupload_dir"xxxxx_click_log_$fileName"date >>
$log_toupload_dir"willDoing."date
fi
done
最后将文件从待上传目录传至HDFS中
#找到列表文件willDoing
ls $log_toupload_dir | grep will | grep -v "_COPY_" | grep -v "_HOME_" | while
read line
do
#打印信息
echo "toupload is in file:"$line
#将待上传文件列表willDoing改名为willDoing_COPY_
mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"
# 读列表文件willDoing_COPY_的内容(一个一个的待上传文件名)
# 此处的line就是列表中的一个待上传文件的path
cat $log_toupload_dir$line"_COPY_" | while read line
do
#打印信息
echo "puting...$line to hdfs path...$hdfs_root_dir"
hadoop fs -mkdir -p $hdfs_root_dir
hadoop fs -put $line $hdfs_root_dir
done
mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_"
done
现在每天12点执行一次,Linux crontab表达式执行定时任务
0 0 * * * /shell/upload2HDFS.sh
上述Crontab6个参数,分时日月周命令组成
sbin/start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager
sbin/stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager
sbin/start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode
sbin/stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode
sbin/start-yarn.sh 启动ResourceManager、NodeManager
sbin/stop-yarn.sh 停止ResourceManager、NodeManager
# 单独启动/停止的
bin/hdfs --daemon start namenode
bin/hdfs --daemon start datanode
bin/hdfs --daemon start secondarynamenode
bin/yarn --daemon start resourcemanager
bin/yarn --daemon start nodemanager
mapred --daemon start historyserver
mapred --daemon stop historyserver
--------------------------------------------------------------------------
# 旧版本的命令
sbin/hadoop-daemons.sh start namenode 单独启动NameNode守护进程
sbin/hadoop-daemons.sh stop namenode 单独停止NameNode守护进程
sbin/hadoop-daemons.sh start datanode 单独启动DataNode守护进程
sbin/hadoop-daemons.sh stop datanode 单独停止DataNode守护进程
sbin/hadoop-daemons.sh start secondarynamenode 单独启动SecondaryNameNode守护进程
sbin/hadoop-daemons.sh stop secondarynamenode 单独停止SecondaryNameNode守护进程
sbin/yarn-daemon.sh start resourcemanager 单独启动ResourceManager
sbin/yarn-daemons.sh start nodemanager 单独启动NodeManager
sbin/yarn-daemon.sh stop resourcemanager 单独停止ResourceManager
sbin/yarn-daemons.sh stopnodemanager 单独停止NodeManager
sbin/mr-jobhistory-daemon.sh start historyserver 手动启动jobhistory
sbin/mr-jobhistory-daemon.sh stop historyserver 手动停止jobhistory
云服务器
虚拟机和配置网卡 建议使用NAT模式
分类 | 应用 | Haddop 2.x port | Haddop 3 port |
---|---|---|---|
NNPorts | Namenode | 8020 | 9820 |
NNPorts | NN HTTP UI | 50070 | 9870 |
NNPorts | NN HTTPS UI | 50470 | 9871 |
SNN ports | SNN HTTP | 50091 | 9869 |
SNN ports | SNN HTTP UI | 50090 | 9868 |
DN ports | DN IPC | 50020 | 9867 |
DN ports | DN | 50010 | 9866 |
DN ports | DN HTTP UI | 50075 | 9864 |
DN ports | Namenode | 50475 | 9865 |
## Hadoop 3 新特征 |
参考:https://blog.csdn.net/qq_35975685/article/details/84311627