近期要使用Hadoop这一套大数据工具,包括Hadoop、Hive 、Hbase 、 Spark 、 Flume 、 Sqoop、 Kafka、Zookeeper、impala、presto等在数据中台各层级会用到的工具。
在接下来的一段时间里,作者将在此专栏分享以下内容,敬请关注:
- 笔者将整理这一套工具的的从零开始安装和使用;
- MR、DAG、HDFS、GFS等底层概念整理;
- 数据ETL相关内容:数据质量、数据同步、数据血缘、数据治理以及数据库建模;
- 基于PYTHON/R 的数据分析案例分享以及相关工具安装教程;
- 基于阿里云的系列工具使用文档总结及案例分享。
安装环境:
1. Centos7.6
2. Centos8
linux中准备临时安装包存放位置
mkdir /setups
1 Java环境安装
1.1 Java 版本支持
- Apache Hadoop 3.x 版本 现在只支 持 Java 8
- Apache Hadoop 从2.7.x 到 2.x 版本支持Java 7 and 8
- Apache Hadoop 最新更新的2.7版本需要Java 7. 它在 OpenJDK 和Oracle (HotSpot)'s JDK/JRE下都已经通过编译和检测,早期的版本 (2.6 或更早版本) 则支持Java 6.
- Java 11 现阶段部分支持:
- trunk (3.3.0-SNAPSHOT) 支持 Java 11 运行时: HADOOP-15338 - Java 11 运行时支持RESOLVED
- Hadoop在使用 Java 11编译时不支持: HADOOP-16795 - Java 11 编译时支持 OPEN
1.2 jdk8安装
未下载安装包的可以前往JDK SE下载地址,笔者这里选择的是jdk-8u271-linux-x64.tar.gz版本。
在usr目录下创建java目录:
mkdir /usr/java
将jdk-8u271-linux-x64.tar.gz
解压至/usr/java
:
tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/java
编辑 /etc/profile
,配置java环境变量:
vim /etc/profile
在末尾增加:
# java 8 environment settings
JAVA_HOME=/usr/java/jdk1.8.0_271
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
使配置生效:
source /etc/profile
验证是否配置成功:
[root@localhost ~]# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
2 Hadoop 安装
hadoop安装使用时有三种模式,分别是:
- 独立模式 : 所有节点都在同一个机器上 ( 没有人用 )
- 伪分布式 : NameNode 与 ResourceManager 单节点架构模型 ( 学习使用 )
- 完全分布式 : 高可用
2.1 解压安装hadoop3.3.0
未下载hadoop压缩包的自行前往hadoop下载地址,由于是从零开始学习,不考虑现有项目的情况下,笔者选择的是hadoop3.3.0。
创建hadoop目录:
mkdir /usr/hadoop
将hadoop文件解压至该目录:
tar -zxvf hadoop-3.3.0.tar.gz -C /usr/hadoop/
进入/usr/hadoop/hadoop-3.3.0
目录,查看hadoop 版本:
[root@localhost ~]# ./bin/hadoop version
Hadoop 3.3.0
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
Compiled by brahma on 2020-07-06T18:44Z
Compiled with protoc 3.7.1
From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
This command was run using /usr/hadoop/hadoop-3.3.0/share/hadoop/common/hadoop-common-3.3.0.jar
在/usr/hadoop
目录下,创建以下几个目录:
mkdir tmp
mkdir hdfs
mkdir hdfs/data
mkdur hdfs/name
编辑/etc/profile
,设置hadoop环境变量:
# java 8 environment settings
JAVA_HOME=/usr/java/jdk1.8.0_271
CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
# hadoop 3.3.0 environment settings
export HADOOP_HOME=/usr/hadoop/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使配置生效:
source /etc/profile
2.2 配置伪分布式集群
进入/usr/hadoop/hadoop-3.3.0/etc/hadoop
目录,修改以下五个hadoop配置文件:
- hadoop-env.sh
- hadoop/core-site.xml
- hadoop/hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
2.2.1 配置hadoop-env.sh
:
在注释的JAVA_HOME
下面新增一行之前java
的路径
# JAVA_HOME=/usr/java/testing hdfs dfs -ls
export JAVA_HOME=/usr/java/jdk1.8.0_271
2.2.2 配置core-site.xml
:
在<configuration></configuration>
中间添加以下代码:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
####注释 : HDFS的URI,文件系统://namenode标识:端口号
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
###注释: namenode上本地的hadoop临时文件夹
</property>
</configuration>
第一个property
是配置默认采用的文件系统,由于存储层和运算层松耦合,要为它们指定使用hadoop原生的分布式文件系统hdfs。
第二个property
是配置hadoop的公共目录,指定hadoop进程运行中产生的数据存放的工作目录,NameNode、DataNode等就在本地工作目录下建子目录存放数据。但事实上在生产系统里,NameNode、DataNode等进程都应单独配置目录,而且配置的应该是磁盘挂载点,以方便挂载更多的磁盘扩展容量(LVM磁盘挂载和扩容)。
2.2.3 配置hdfs-site.xml
:
dfs.replication
配置的是 HDFS存储时的备份数据(datanode的备份,hdfs的副本数)(客户端将文件存到hdfs的时候,会存放在多个副本。value一般指定3,但因为搭建的是伪分布式就只有一台机器,所以只能写1)
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
2.2.4 配置mapred-site.xml
:
指定MapReduce程序应该放在哪个资源调度集群上运行。若不指定为yarn,那么MapReduce程序就只会在本地运行而非在整个集群中运行。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2.2.5 配置yarn-site.xml
:
指定yarn集群中的老大(就是本机)
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
配置yarn集群中的重节点,指定map产生的中间结果传递给reduce采用的机制是shuffle
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
2.2.6 配置tart-dfs.sh和stop-dfs.sh文件
添加以下参数在开头位置:
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2.2.7 配置start-yarn.sh和stop-yarn.sh文件
添加以下参数在开头位置:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root
2.3 设置SSH免密登陆
此步骤是必须的,否则下面的启动步骤会出现 Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 的错误。
-
生成公钥/私钥:
ssh-keygen -t rsa
一直回车就行。
-
创建authorized_keys文件并修改权限为600:
cd /root/.ssh touch authorized_keys chmod 600 authorized_keys
-
将公钥追加到authorized_keys文件中去:
cat id_rsa.pub >> authorized_keys
-
测试是否能成功免密登录:
ssh localhost
因为是伪分布式集群,其实就是自己登录自己,这里的
localhost
也就是在[前章节2.2.2](#2.2.2 配置core-site.xml
)中配置的<value>hdfs://localhost:9000</value>
2.4 启动hadoop
-
初始化
hdfs namenode -format
-
启动
start-dfs.sh
start-yarn.sh
-
查看已启动的进程
jps
若包含NameNode等六个进程,则启动成功。
-
通过以下指令查看hadoop 指令
hdfs dfs —help
3 配置远程web ui 管理HDFS和YARN
3.1 HDFS web ui配置
-
进入
/usr/hadoop/hadoop-3.3.0/etc/hadoop
vim hdfs-site.xml
在
configuration
内添加以下配置:<property> <name>dfs.namenode.http-address</name> <value>0.0.0.0:50070</value> </property>
3.2 YARN web ui配置
-
进入
/usr/hadoop/hadoop-3.3.0/etc/hadoop
vim yarn-site.xml
在
configuration
内添加以下配置:<property> <name>yarn.resourcemanager.webapp.address</name> <value>0.0.0.0:8088</value> </property>
关于yarn-site.xml
的其他配置参数,详见yarn-site.xml配置参数
3.3 重启Hadoop
stop-all.sh
start-all.sh
3.4 使用客户端测试访问并管理
- hdfs web ui :
你的外网IP:50070
- yarn web ui :
你的外网IP:8088