搭建 Hadoop 3.3.6 伪分布式
- IP
192.168.157.132
初始化操作
更改yum源
# 1_1.安装Wget
yum install wget
# 1_2.备份CentOS-Base.repo文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
# 2.下载阿里yum源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 3.清除系统所有的yum缓存
yum clean all
# 4.重新缓存
yum makecache
# 5.更新yum源
yum update -y
# 6.安装基础工具
sudo yum install -y wget epel-release vim net-tools
设置开机时关闭GUI
# 用下面命令查看查看是哪个模式
systemctl get-default
# 命令模式(生产环境推荐)
systemctl set-default multi-user.target
# 图形模式
systemctl set-default graphical.target
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
创建专用账户
# 创建hadoop系统账户
sudo useradd -m hadoop -s /bin/bash
echo "hadoop:your_password" | sudo chpasswd # 设置密码
# 配置sudo权限
sudo echo "hadoop ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/hadoop
1. 进入命令行模式
按
Ctrl + Alt + T
进入终端。hadoop__69">2. 创建
hadoop
用户使用
useradd
命令创建hadoop
用户,并指定bash
作为默认 shell:sudo useradd -m hadoop -s /bin/bash
hadoop__77">3. 设置
hadoop
用户密码使用
chpasswd
命令设置密码(请替换your_password
为实际密码):echo "hadoop:your_password" | sudo chpasswd
4. 配置
sudo
权限hadoop__sudo__87">方法 1:赋予
hadoop
用户sudo
权限执行以下命令,将
hadoop
用户添加到sudo
组:sudo adduser hadoop sudo
方法 2:配置无密码
sudo
权限编辑
sudoers
文件,使hadoop
用户在执行sudo
命令时无需输入密码:echo "hadoop ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/hadoop
5. 说明
- 如果使用 CentOS 7 并已创建
hadoop
用户,则无需执行第 2 和第 4 步。- 方法 1 和方法 2 任选其一,推荐使用方法 1,避免安全风险。
初始化文件路径
# 软件安装路径
mkdir /home/dolphin/module
# 安装包存放路径
mkdir /home/dolphin/software
# 修改文件夹所有者(hadoop用户)
chown -R hadoop.hadoop /home/dolphin/module
chown -R hadoop.hadoop /home/dolphin/software
# 创建软链接
ln -s /home/dolphin/module /opt/module
ln -s /home/dolphin/software /opt/software
配置 hosts 列表
vim /etc/hosts
# 添加如下内容
-----------------------------------------------------Start
192.168.157.132 dolphin
-----------------------------------------------------End
修改主机名
hostnamectl set-hostname dolphin
hostnamectl set-hostname 主机名
配置ssh免密登录
ssh-keygen -t rsa
# ssh-copy-id 用户名@主机名
ssh-copy-id root@dolphin
# 或
ssh-copy-id dolphin
安装Java并配置环境变量
# 1.检测是否安装OpenJDK,存在则删除
rpm -qa | grep java
rpm -e --nodeps java-1.8.0-openjdk
rpm -e --nodeps java-1.8.0-openjdk-headless
rpm -e --nodeps java-1.7.0-openjdk
rpm -e --nodeps java-1.7.0-openjdk-headless
# 2.下载JDK二进制安装包
cd /opt/software
wget https://download.oracle.com/otn/java/jdk/8u221-b11/230deb18db3e4014bb8e3e8324f81b43/jdk-8u201-linux-x64.tar.gz
# 3.解压jdk
tar -zxf /opt/software/jdk-8u201-linux-x64.tar.gz -C /opt/module/
# 4.JDK环境变量配置
#==>修改环境变量
vim /etc/profile
#==>profile追加文件内容
-----------------------------------------------------Start
#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_201
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
-----------------------------------------------------End
#==>使配置文件生效
source /etc/profile
安装MySQL
1.下载二进制Linux版的文件
# 1.解压
tar -zxf /opt/software/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /opt/module
# 2.建立软链接
cd /opt/module
ln -s mysql-5.7.25-linux-glibc2.12-x86_64 mysql
# 3.配置环境变量
vim /etc/profile
#==>profile追加文件内容
-----------------------------------------------------Start
#MYSQL_HOME
MYSQL_HOME=/opt/module/mysql-5.7.25-linux-glibc2.12-x86_64
export PATH=$PATH:$MYSQL_HOME/bin
export PATH=$PATH:$MYSQL_HOME/support-files
-----------------------------------------------------End
#==>使配置文件生效
source /etc/profile
# 4.创建初始化目录
cd /opt/module/mysql-5.7.25-linux-glibc2.12-x86_64
mkdir ./{data,log,sock,pids}
mkdir ./{etc,run}
chown -R hadoop.hadoop *
chmod 755 {data,sock,pids}
# 5.配置my.cnf
sudo vim /etc/my.cnf
#==>my.cng文件内容
------------------------------------------------------Start
[mysqld]#服务端基本设置
basedir=/opt/module/mysql #使用该目录作为根目录(安装目录)
datadir=/opt/module/mysql/data #数据文件存放的目录
port=3306 #MySQL监听端口
socket=/opt/module/mysql/sock/mysql.sock #用于本地连接的socket套接字
bind-address = 0.0.0.0
server-id = 1
log-error=/opt/module/mysql/log/mysql.log
user=hadoop
#skip-grant-tables #mysql设置跳过密码登录
[mysqld_safe]
log-error=/opt/module/mysql/log/logger.log
pid-file=/opt/module/mysql/pids/mysqld.pid
[client]
default-character-set=utf8
socket=/opt/module/mysql/sock/mysql.sock #用于本地连接的socket套接字
[mysql]
default-character-set=utf8
socket=/opt/module/mysql/sock/mysql.sock #用于本地连接的socket套接字
[mysqld_safe]
!includedir /etc/my.cnf.d
------------------------------------------------------End
# 6.初始化数据库
mysqld --defaults-file=/etc/my.cnf --initialize #(必须在创建my.cnf之后)
# 7.生成ssl(非必须)
mysql_ssl_rsa_setup --basedir=/opt/module/mysql --datadir=/opt/module/mysql/data
# 8.1启动MySQL
mysql.server restart
或
./support-files/mysql.server restart
# 8.2查看mysql进程
ps -ef|grep mysql
# 9.查看密码
grep 'temporary password' /opt/module/mysql/log/logger.log
# 10.修改MySQL密码
use mysql;
update mysql.user set authentication_string=password('root') where User="root" and Host="localhost";
# 11.配置MySQL远程访问
alter user user() identified by "root";
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
# 12.开放3306端口
firewall-cmd --permanent --add-port=3306/tcp
***********************************************************
# 1.创建systemctl管理mysql的配置文件
vim /usr/lib/systemd/system/mysql.service
which mysqld # (查找mysqld路径)
#==>mysql.service文件内容
-----------------------------------------------------Start
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
# ExecStart=/opt/module/mysql-5.7.25-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my.cnf
#关键开头************
Type=forking
ExecStart=/bin/bash /opt/module/mysql-5.7.25-linux-glibc2.12-x86_64/support-files/mysql.server start
ExecStop=/bin/bash /opt/module/mysql-5.7.25-linux-glibc2.12-x86_64/support-files/mysql.server stop
ExecRestart=/bin/bash /opt/module/mysql-5.7.25-linux-glibc2.12-x86_64/support-files/mysql.server restart
#关键结尾************
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
-----------------------------------------------------End
# 2_1.重新载入systemd
systemctl daemon-reload
# 2_2.激活mysql.serivce配置文件(用于systemctl控制)
systemctl enable mysql.service
# 3.通过systemctl来启动mysql
systemctl start mysql
Hadoop 3.3.6 伪分布式配置部署
下载并解压 Hadoop
cd /opt/software
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
#解压Hadoop
tar -zxf /opt/software/hadoop-3.3.6.tar.gz -C /opt/module/
#初始化
cd /opt/module/hadoop-3.3.6
mkdir -p /opt/module/hadoop-3.3.6/hdfs/data /opt/module/hadoop-3.3.6/hdfs/name
配置 Hadoop 环境变量
#==>修改环境变量
vim /etc/profile
#==>profile追加文件内容
-----------------------------------------------------Start
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
-----------------------------------------------------End
source /etc/profile
配置 core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
# 修改内容如下:
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<!-- 注意: hadoop1.x时代默认端口是9000;hadoop2.x时代默认端口是8020;
hadoop3.x时代默认端口是9820 -->
<property>
<name>fs.defaultFS</name>
<description>配置hdfs NameNode的地址,9820是RPC通信的端口</description>
</property>
<!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/module/hadoop-3.3.6/tmp</value>
<description>hadoop的临时目录</description>
</property>
<!-- 设置 Web UI 为静态用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
配置 hdfs-site.xml
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
# 修改内容如下:
<configuration>
<!--指定HDFS储存数据的副本数目,默认情况下为3份-->
<property>
<name>dfs.replication</name>
<value>1</value>
<description>配置hdfs副本数量</description>
</property>
<!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>dolphin:9868</value>
<description>配置secondarynamenode守护进程的http地址</description>
</property>
<!-- namenode web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>dolphin:9870</value>
</property>
<!-- 表示本地磁盘目录,是存储 fs image 文件的地方 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/module/hadoop-3.3.6/hdfs/name</value>
</property>
<!-- 表示本地磁盘目录,HDSF数据存放block的的地方 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/module/hadoop-3.3.6/hdfs/data</value>
<description>配置datanode节点存储block的目录位置</description>
</property>
</configuration>
配置 mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 修改内容如下:
<configuration>
<!-- 指定MR运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!---指定MapReduce任务运行所需依赖jar -->
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*</value>
</property>
</configuration>
配置 yarn-site.xml
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
# 修改内容如下:
<configuration>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>dolphin</value>
</property>
<!-- 指定reduce获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定shuffle服务的类 -->
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
配置 workers
vim $HADOOP_HOME/etc/hadoop/workers
# 修改内容如下:(hosts中配置的dolphin名称)
dolphin
hadoopenvsh_510">配置 hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
# 修改内容如下:
# 配置 JAVA_HOME 和 HADOOP_HOME 环境变量
export JAVA_HOME=/opt/module/jdk1.8.0_201
export HADOOP_HOME=/opt/module/hadoop-3.3.6
# Hadoop3中,需要添加如下配置,设置启动集群⻆⾊的⽤户是哪个。
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
格式化 HDFS
hdfs namenode -format
注意:
- 在
core-site.xml
中配置的hadoop.tmp.dir
的路径,在集群格式化的时候,必须保证不存在! 如果之前存在数据,先将它删除,再进行格式化!
启动 Hadoop
start-dfs.sh
start-yarn.sh
# 或
start-all.sh
验证 Hadoop 是否运行
jps
Hadoop 进程包括:
- NameNode
- DataNode
- SecondaryNameNode
- ResourceManager
- NodeManager
Hadoop环境测试
参考Web UI
通过浏览器访问HDFS Web UI 界面
9870
端口和 YARN Web UI界面8088
端口
测试 HDFS 和 Mapper Reduce
创建测试文件 hello.txt
cat > hello.txt << 'EOF'
hello world
hadoop hdfs
张三 李四 王五
hello hadoop
hello yarn
hello hdfs
hello spark
EOF
chown dolphin:dolphin /root/hello.txt
测试MR
# HDFS 中创建 input 文件夹并上传 hello.txt 文件
hadoop fs -mkdir /input
hadoop fs -put /root/hello.txt /input
hadoop fs -ls /input
hadoop fs -mkdir /output
# 运行 wordcount 程序
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
解决Hadoop在浏览器中Browse Directory,无法下载文件的问题
解决办法
把你Linux中的hosts
文件中的映射数据,复制到Windows下的hosts
中