2024-03-28
hadoop学习笔记
00
请注意,本文编写于 343 天前,最后修改于 341 天前,其中某些信息可能已经过时。

目录

Hadoop伪分布式搭建
一、环境准备
1. 能够ping通外网
2. 安装epel-release
3. 如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作
4. 关闭防火墙和防火墙开机自启动
5.创建Hadoop用户
6.配置hadoop用户具有root权限,方便后期加sudo执行root权限的命令
7.在/opt目录下创建文件夹,并修改所属主和所属组
二、配置网络环境
1. 修改虚拟机的静态IP
2. 查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
3. 查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
4. 保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
三、修改主机名
1. 修改主机名称
2. 配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts
四、安装JDK
1. 卸载自带的JDK
2. 用XShell传输工具将JDK导入到opt目录下面的software文件夹下面
3. 在Linux系统下的opt目录中查看软件包是否导入成功
4. 解压JDK到/opt/module目录下
5. 配置JDK环境变量
1) 新建/etc/profile.d/my_env.sh文件
2) 保存退出
3) source一下/etc/profile文件,让新的环境变量PATH生效
6. 测试JDK是否安装成功
五、安装Hadoop
1. 用XShell文件传输工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面
2. 进入到Hadoop安装包路径下
3. 解压安装文件到/opt/module下面
4. 查看是否解压成功
5. 将Hadoop添加到环境变量
1) 获取Hadoop安装路径
2) 打开/etc/profile.d/my_env.sh文件
3) 让修改后的文件生效
4. 测试是否安装成功
六. Hadoop目录结构
1. 查看Hadoop目录结构
2. 重要目录
七、设置免密登录
1. 生成公钥和私钥
2. 将公钥拷贝到要免密登录的目标机器上
八、搭建伪分布式
1. 配置集群
1) 核心配置文件
2) HDFS配置文件
3) YARN配置文件
4) MapReduce配置文件
2. 启动集群
1) 第一次启动 需要格式化NameNode
2) 启动HDFS 和 YARN
3) 执行命令jps能看到6个Java程序
4) 能看到一个存放日志的目录$HADOOP_HOME/logs
5) 并能看到一个存放索引和数据的目录$HADOOP_HOME/data
3. 测试
1) 上传文件到集群

Hadoop的伪分布式搭建,主要是方便自己👀

Hadoop伪分布式搭建

一、环境准备

  1. 安装虚拟机
  2. IP地址
  3. 主机名称
  4. 内存2G
  5. 硬盘20G

以上配置可根据自己电脑配置进行修改
虚拟机配置要求如下(本文Linux系统全部以CentOS-7.5-x86-1804为例)

1. 能够ping通外网

shell
[root@hadoop ~]# ping www.baidu.com PING www.baidu.com (14.215.177.39) 56(84) bytes of data. 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=128 time=8.60 ms 64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=128 time=7.72 ms

2. 安装epel-release

相关信息

注:Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)

shell
yum install -y epel-release

3. 如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作

shell
#net-tool:工具包集合,包含ifconfig等命令 yum install -y net-tools #vim:编辑器 yum install -y vim

4. 关闭防火墙和防火墙开机自启动

shell
systemctl stop firewalld #关闭防火墙 systemctl disable firewalld.service #禁止开机自启动

5.创建Hadoop用户

shell
#以下命令均用root用户操作 useradd hadoop #创建hadoop用户 passwd hadoop #设置hadoop用户密码

6.配置hadoop用户具有root权限,方便后期加sudo执行root权限的命令

shell
[root@hadoop ~]# vim /etc/sudoers #修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示: ## Allow root to run any commands anywhere root ALL=(ALL) ALL ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL #这一行下面添加 hadoop ALL=(ALL) NOPASSWD:ALL

注意

注意:hadoop这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了hadoop具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以hadoop要放到%wheel这行下面。

7.在/opt目录下创建文件夹,并修改所属主和所属组

  1. 在/opt目录下创建module、software文件夹
shell
[root@hadoop ~]# mkdir /opt/module [root@hadoop ~]# mkdir /opt/software
  1. 修改module、software文件夹的所有者和所属组均为hadoop用户
shell
[root@hadoop ~]# chown hadoop:hadoop /opt/module [root@hadoop ~]# chown hadoop:hadoop /opt/software
  1. 查看module、software文件夹的所有者和所属组
shell
[root@hadoop ~]# ll /opt
  1. 卸载虚拟机自带的JDK
shell
#注意:如果你的虚拟机是最小化安装不需要执行这一步。 [root@hadoop ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

相关信息

相关信息
rpm -qa:查询所安装的所有rpm软件包
grep -i:忽略大小写
xargs -n1:表示每次只传递一个参数
rpm -e –nodeps:强制卸载软件

  1. 重启虚拟机
shell
[root@hadoop ~]# reboot

二、配置网络环境

1. 修改虚拟机的静态IP

shell
[root@hadoop ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 #改成 DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static #开启静态IP NAME="ens33" IPADDR=192.168.10.102 #IP地址 PREFIX=24 #子网掩码 GATEWAY=192.168.10.2 #网关 DNS1=192.168.10.2 #DNS

2. 查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8

image.png

image.png

3. 查看Windows系统适配器VMware Network Adapter VMnet8的IP地址

image.png

4. 保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。

三、修改主机名

1. 修改主机名称

shell
[root@hadoop100 ~]# vim /etc/hostname #删除原来的,添加hadoop hadoop

2. 配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts

shell
[root@hadoop ~]# vim /etc/hosts #添加以下内容 192.168.10.100 hadoop
  1. 重启虚拟机
shell
[root@hadoop ~]# reboot

四、安装JDK

1. 卸载自带的JDK

shell
[root@hadoop ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

注意

注意:安装JDK前,一定确保提前删除了虚拟机自带的JDK

2. 用XShell传输工具将JDK导入到opt目录下面的software文件夹下面

image.png

3. 在Linux系统下的opt目录中查看软件包是否导入成功

shell
[hadoop@hadoop ~]$ ls /opt/software/

看到如下结果: jdk-8u212-linux-x64.tar.gz

4. 解压JDK到/opt/module目录下

shell
[hadoop@hadoop software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

5. 配置JDK环境变量

1) 新建/etc/profile.d/my_env.sh文件
shell
[hadoop@hadoop ~]$ sudo vim /etc/profile.d/my_env.sh #添加如下内容 #JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
2) 保存退出

Esc键 :wq

相关信息

相关信息:profile文件在运行时会加载profile.d目录下的所有 *.sh文件

3) source一下/etc/profile文件,让新的环境变量PATH生效
shell
[hadoop@hadoop ~]$ source /etc/profile

6. 测试JDK是否安装成功

shell
[hadoop@hadoop ~]$ java -version 如果能看到以下结果,则代表Java安装成功。 java version "1.8.0_212"

注意

注意:重启(如果java -version可以用就不用重启)
[hadoop@hadoop ~]$ sudo reboot

五、安装Hadoop

官网下载Hadopphttps://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/

1. 用XShell文件传输工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面

image.png

2. 进入到Hadoop安装包路径下

shell
[hadoop@hadoop ~]$ cd /opt/software/

3. 解压安装文件到/opt/module下面

shell
[hadoop@hadoop software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

4. 查看是否解压成功

shell
[hadoop@hadoop software]$ ls /opt/module/ hadoop-3.1.3

5. 将Hadoop添加到环境变量

1) 获取Hadoop安装路径
shell
[hadoop@hadoop hadoop-3.1.3]$ pwd /opt/module/hadoop-3.1.3
2) 打开/etc/profile.d/my_env.sh文件
shell
[hadoop@hadoop hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh #添加以下内容 #HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin #保存并退出: :wq
3) 让修改后的文件生效
shell
[hadoop@hadoop hadoop-3.1.3]$ source /etc/profile

4. 测试是否安装成功

shell
[hadoop@hadoop hadoop-3.1.3]$ hadoop version Hadoop 3.1.3

六. Hadoop目录结构

1. 查看Hadoop目录结构

shell
[hadoop@hadoop hadoop-3.1.3]$ ll 总用量 52 drwxr-xr-x. 2 hadoop hadoop 4096 5月 22 2017 bin drwxr-xr-x. 3 hadoop hadoop 4096 5月 22 2017 etc drwxr-xr-x. 2 hadoop hadoop 4096 5月 22 2017 include drwxr-xr-x. 3 hadoop hadoop 4096 5月 22 2017 lib drwxr-xr-x. 2 hadoop hadoop 4096 5月 22 2017 libexec -rw-r--r--. 1 hadoop hadoop 15429 5月 22 2017 LICENSE.txt -rw-r--r--. 1 hadoop hadoop 101 5月 22 2017 NOTICE.txt -rw-r--r--. 1 hadoop hadoop 1366 5月 22 2017 README.txt drwxr-xr-x. 2 hadoop hadoop 4096 5月 22 2017 sbin drwxr-xr-x. 4 hadoop hadoop 4096 5月 22 2017 share

2. 重要目录

  1. bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
  2. etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
  3. lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
  4. sbin目录:存放启动或停止Hadoop相关服务的脚本
  5. share目录:存放Hadoop的依赖jar包、文档、和官方案例

七、设置免密登录

1. 生成公钥和私钥

shell
[hadoop@hadoop .ssh]$ pwd /home/hadoop/.ssh [hadoop@hadoop .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

2. 将公钥拷贝到要免密登录的目标机器上

shell
[hadoop@hadoop .ssh]$ ssh-copy-id hadoop

八、搭建伪分布式

1. 配置集群

1) 核心配置文件
shell
#配置core-site.xml [hadoop@hadoop ~]$ cd $HADOOP_HOME/etc/hadoop [hadoop@hadoop hadoop]$ vim core-site.xml

修改内容如下

xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为hadoop --> <property> <name>hadoop.http.staticuser.user</name> <value>hadoop</value> </property> </configuration>

2) HDFS配置文件

shell
#配置hdfs-site.xml [hadoop@hadoop hadoop]$ vim hdfs-site.xml

文件内容如下

xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- nameNode web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop:9868</value> </property> <!-- 副本数量--> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

3) YARN配置文件

shell
#配置yarn-site.xml [hadoop@hadoop hadoop]$ vim yarn-site.xml

文件内容如下:

xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>

4) MapReduce配置文件

shell
#配置mapred-site.xml [hadoop@hadoop hadoop]$ vim mapred-site.xml

文件内容如下

xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

2. 启动集群

1) 第一次启动 需要格式化NameNode
shell
[hadoop@hadoop hadoop-3.1.3]$ hdfs namenode -format

注意

注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。

2) 启动HDFS 和 YARN
shell
[hadoop@hadoop hadoop-3.1.3]$ sbin/start-dfs.sh [hadoop@hadoop hadoop-3.1.3]$ sbin/start-yarn.sh
3) 执行命令jps能看到6个Java程序
txt
jps namenode secondarynamenode datanode resourcemanager nodemanager
4) 能看到一个存放日志的目录$HADOOP_HOME/logs
5) 并能看到一个存放索引和数据的目录$HADOOP_HOME/data

3. 测试

1) 上传文件到集群

上传小文件

shell
[hadoop@hadoop ~]$ hadoop fs -mkdir /input [hadoop@hadoop ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
shell
[hadoop@hadoop ~]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/word.txt /output

参考尚硅谷:【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】 https://www.bilibili.com/video/BV1Qp4y1n7EN/?p=57&share_source=copy_web&vd_source=89b9de79c8f374309c5791db6796b62f

本文作者:苏皓明

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!