Ubuntu安装Hadoop,并使用Python3调用
前言使用各类包版本:包名版本Ubuntu20.04.3-adm64Hadoop3.3.1JAVAopenjdk-16-headlessPython3.9.5(miniconda 4.11.0)ViirtualBox(虚拟机)6.1.30 r148432 (Qt 5.6.2)1. Ubuntu下载来源网站兰州大学开源社区下载地址https://mirror.lzu.edu.cn/ubuntu-rel
前言
使用各类包版本:
包名 | 版本 |
---|---|
Ubuntu | 20.04.3-adm64 |
Hadoop | 3.3.1 |
JAVA | openjdk-16-headless |
Python | 3.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上去
其它一些命令参见此篇博客
更多推荐
所有评论(0)