前言

使用各类包版本:

包名版本
Ubuntu20.04.3-adm64
Hadoop3.3.1
JAVAopenjdk-16-headless
Python3.9.5(miniconda 4.11.0)
ViirtualBox(虚拟机)6.1.30 r148432 (Qt 5.6.2)

1. Ubuntu下载

来源网站
兰州大学开源社区
下载地址
https://mirror.lzu.edu.cn/ubuntu-releases/20.04.3/ubuntu-20.04.3-desktop-amd64.iso

2. 虚拟机下载

来源网站
virtualBox官网
下载地址
适用于Windows平台安装的virtualBox6.1

3. 安装虚拟机

安装三台及以上Ubuntu虚拟机,确保在电脑能承受的极限下,分配的内存和硬盘尽可能大。当虚拟机台数较多时,将虚拟硬盘分配于固态硬盘可提升其性能,因为此时虚拟机瓶颈受到磁盘IO速度限制。
注意,主机的各个用户名必须都相同,这样后续SSH登录比较方便。

4. 配置网络

使用桥接模式,记录各台主机IP,并确保各台主机之间能相互ping通。

sudo apt install net-tools  # 安装网络工具
ifconfig  # 查询本机网络信息
ping IP  # ping一下IP地址看看能否ping通
sudo apt install vim  # 安装vim文本编辑器
sudo vim /etc/hosts  # 使用vim编辑网络配置表

在配置表中添加:

第一台虚拟机的IP地址  namenode
第二台虚拟机的IP地址  datanode1
第三台虚拟机的IP地址  datanode2
......

空格后的名称为此IP对应的虚拟机别名,保存后ping一下这个别名,看是否配置成功。

5. 安装JDK

一开始安装了JDK版本比较高,导致部分功能无法运行。
经过查找资料,在此处改成安装 jdk 8 版本。
清华大学镜像

# wget 命令下载
wget -c https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz
# 解压缩
tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz
# 移动到合适的目录下
sudo mv jdk8u312-b07 /usr/local/jdk8
# 修改环境变量
sudo vim /etc/profile

在环境变量文件末尾添加:

export JAVA_HOME=/usr/local/jdk8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
source /etc/profile  # 使配置立即生效
java -version  # 验证安装

openjdk 代表开源JDK,缺少商用插件,其它开源插件需要自己安装
headless 代表缺少显示用的插件,适用于服务器

6. 安装SSH

sudo apt-get update  # 更新升级 apt-get
sudo apt-get install openssh-server  # 安装ssh
ssh localhost  # 登录本地,设置密码
exit  # 每次ssh登录完毕后,都需要退出登录
cd ~/.ssh/  # 进入ssh目录
ssh-keygen -t rsa  # 生成rsa秘钥
cat ./id_rsa.pub >> ./authorized_keys  # 放入指定目录下,实现免密登录
ssh localhost  # 验证免密登录
exit 

如果此处仍然无法免密登录,需要分别修改.ssh目录的权限以及authorized_keys 的权限,如下:

chmod 644 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

7. 安装Hadoop

Hadoop安装包镜像
选择好安装包后使用wget下载并解压安装

wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar -zxvf hadoop-3.3.1.tar.gz  # 解压缩
sudo mv hadoop-3.3.1 /usr/local/hadoop  # 移动到local目录下,注意所有虚拟机hadoop路径要一致

8. 配置Hadoop

1)配置环境变量

vim ~/.profile  # 编辑profile文件

添加Hadoop环境变量

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin 
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

保存后执行:

source .profile  # 刷新配置使其立即生效

执行以下命令验证配置成功:

hadoop version

2) 修改Hadoop配置文件

cd /usr/local/hadoop/etc/hadoop  # 切换至hadoop安装目录下的etc/hadoop

修改此目录下的以下六个文件(修改方法参考自此篇博客

A. core-site.xml:配置通用属性,例如HDFS和MapReduce常用的I/O设置等
B. hdfs-site.xml:Hadoop守护进程配置,包括namenode、辅助namenode和datanode等
C. mapred-site.xml:MapReduce守护进程配置
D. yarn-site.xml:资源调度相关配置
E. workers:有几个datanode工作节点,及每个节点的名称
F. hadoop-env.sh:添加JAVA安装位置

使用 vim 编辑 core-site.xml:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://namenode:9000</value>
    </property>
</configuration>

编辑 hdfs-site.xml(其中的数字3,代表数据副本数,默认为3):

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/usr/local/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/usr/local/hadoop/hdfs/data</value>
    </property>
</configuration>

编辑 mapred-site.xml:

<configuration>
  <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.application.classpath</name>
    <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
  </property>
</configuration>

编辑 yarn-site.xml:

<configuration>
<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>namenode</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_HOME</value>
    </property>
</configuration>

编辑 workers(有几个datanode就写几个):

datanode1
datanode2

编辑 hadoop-env.sh 添加(JAVA安装位置的绝对路径):

export JAVA_HOME=/usr/local/jdk8

3) 启动hadoop

cd /usr/local/hadoop  # 切换至安装目录

格式化namenode,第一次启动服务前执行的操作,以后不需要执行。

bin/hadoop namenode -format

配置以下ssh,下述几条命令只需要在namenode上执行即可,其中关于datanode的那条,有几个datanode就分发几次,分发给所有的datanode主机。

echo "ssh" > /etc/pdsh/rcmd_default # 此处若不存在此文件,执行 sudo apt-get install pdsh 安装pdsh
scp /home/username/.ssh/authorized_keys  username@datanode1:~/.ssh/  # 分发秘钥给datanode1
scp /home/username/.ssh/authorized_keys  username@datanode2:~/.ssh/  # 分发秘钥给datanode2

注意其中的 username 需要修改为自定义的主机用户名,前述说了所有主机名需要保持一致,具体原因参考此篇博客,如果用户名不一致似乎也有办法,请自行参见所链接博客评论区。

执行下述命令,启动hadoop

sbin/start-all.sh

用浏览器访问【namenode所在的IP地址+端口号9870】访问hadoop默认页面,可验证启动是否成功,或者在 namenode 执行下述命令来查看简要信息。

hadoop dfsadmin -report

9. 安装Python miniconda环境

anaconda各版本下载地址
miniconda各版本下载地址

下载 miniconda

wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sudo chmod 777 Miniconda3-latest-Linux-x86_64.sh  # 赋予权限
sudo bash Miniconda3-latest-Linux-x86_64.sh  # 执行

安装结束后执行

vim /etc/profile  # 打开环境变量文件

在末尾追加:

export PATH="~/miniconda3/bin:$PATH"  # 到安装好的bin目录下

保存后执行:

source /etc/profile  # 立即生效

给 conda 添加清华大学镜像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/

验证 conda 安装成功,并查看 conda 版本

conda -V

10. 安装hdfs3包

conda install hdfs3 -c conda-forge

11.使用hdfs3进行调用测试

输入python命令进入环境

python

测试一下:

from hdfs3 import HDFileSystem  # 引用 hdfs3 包
hdfs = HDFileSystem(host='192.168.7.20', port=8020)  # 链接 hadoop 8020 端口
# 此处 192.168.7.20 是我 Namenode 的 IP 地址
hdfs.ls('/')  # 看一下根目录下有什么
hdfs.mkdir('/mytestPath')  # 创建一个文件夹
hdfs.put('~/Desktop/001.txt','/mytestPath/001.txt')  # 从本地传一个文件txt上去

其它一些命令参见此篇博客

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐