Hadoop初探
[TOC]
系统环境
- Windows 10 企业版 1903 18362.592
- VMware® Workstation 15 Pro
- ubuntu-18.04.*-live-server-amd64
- Hadoop-3.1.3
- Ubuntu 操作系统的配置简要如下,使用
Hadoop 安装
用户准备
创建hadoop用户(此处按照要求使用hadoop511)
sudo useradd -m hadoop511 -s /bin/bash
设置新建用户密码
sudo passwd hadoop511
添加到sudo组
sudo adduser hadoop511 sudo
- 切换到新建用户
添加SSH密钥证书
ssh_keygen 步骤,如对安全性等无特殊要求,建议他询问你输入东西的时候,全部回车即可
cd ~/.ssh/ ssh-keygen -t rsa cat ./id_rsa.pub >> ./authorized_keys
配置Java环境
本处选择的是AdoptOpenJDK的OpenJDK8U-jdk_x64_linux_hotspot_8u242b08
由于实验时到Github下载服务器的网络不是太好,采取下载到本地再拉取到服务器的方式,因此wget地址为本地地址
创建JAVA下载目录
mkdir -p openjdk cd openjdk
下载JAVA文件
wget -c https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_*.tar.gz
解压缩并去除二级目录
tar zxf OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz mv jdk8u424-b08/* .
拷贝到系统目录
sudo cp -r ~/openjdk /usr/local/
修改系统环境变量
多个变量的分隔符为 冒号 :
cat >> ~/.bashrc <<'EOF' export JAVA_HOME=/usr/local/openjdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=$PATH:${JAVA_HOME}/bin EOF
刷新系统环境变量
source ~/.bashrc
测试JAVA配置
which java
配置Hadoop
创建Hadoop下载目录
mkdir -p ~/hadoop
下载Hadoop源文件
wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
解压缩后去除二级目录拷贝到目标位置
tar zxf hadoop-3.1.3.tar.gz mv hadoop-3.1.3 hadoop sudo cp -r ./hadoop /usr/local/
更改文件拥有者
cd /usr/local sudo chown -R hadoop511 ./hadoop
验证Hadoop可用
/usr/local/hadoop/bin/hadoop version
修改系统环境变量
cat >> ~/.bashrc <<'EOF' export PATH=$PATH:/usr/local/hadoop/bin EOF
刷新系统环境变量
source ~/.bashrc
Hadoop 非分布式单机配置
Hadoop 默认即为非分布式单机运行
查看Hadoop自带的样例程序
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
测试正则grep
2.1 将输入文件放入 input 文件夹
此处使用Hadoop配置文件进行测试
cd /usr/local/hadoop mkdir -p input cp -r ./etc/hadoop/*.xml ./input/
2.2 运行Hadoop测试
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output 'dfs[a-z.]+'
2.3 查看测试运行结果
cat ./output/*
Hadoop 伪分布式配置
这个伪分布式的意思就是其实还是在一台电脑上运行不同的节点,只不过看起来有好多节点,类似于Docker和k8s那种,或者理解成多个VM / WSL虚拟机也差不多感觉
Hadoop的配置文件位于
/usr/local/hadoop/etc/hadoop/
中,伪分布式需要修改的两个文件为core-site.xml
和hdfs-site.xml
修改 core-site.xml
cd /usr/local/hadoop cp etc/hadoop/core-site.xml etc/hadoop/core-site.xml.bak cat > etc/hadoop/core-site.xml <<EOF <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://localhost:9000</value> </property> </configuration> EOF
修改 hdfs-site.xml
cp etc/hadoop/hdfs-site.xml etc/hadoop/hdfs-site.xml.bak cat > etc/hadoop/hdfs-site.xml <<EOF <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> EOF
Namenode 初始化
hdfs namenode -format
开启 NameNode 和 DataNode 守护进程
./sbin/start-dfs.sh
如果说找不到JAVA_HOME但是自己又配置了,你可以执行下面的语句强行告诉Hadoop环境变量
cat >> /usr/local/hadoop/etc/hadoop/hadoop-env.sh <<'EOF' JAVA_HOME=/usr/local/openjdk EOF
查看启动情况
jps
- 网页管理监控
Web界面是运行于Hadoop服务器的,所以其IP地址为安装Hadoop的机器IP地址
可以在终端中使用ifconfig
查看
至于端口,我安装版本2的时候是50070,但是3的时候使用netstat
找了一下,发现同功能页面端口改成了9870
运行Hadooop伪分布式实例
在文件系统中创建输入文件夹
hdfs dfs -mkdir -p input
- 将测试文件放入文件系统
hdfs dfs -put ./etc/hadoop/*.xml ./input/
![dfs mkdir ls](https://go.fancyking.win/i/2020/02/11/ntjju9.png)
检查文件系统内部测试文件
hdfs dfs -ls input
从Web页面检查也可以
运行实例
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
查看一下输出结果
hdfs dfs -cat output/*
这个时候的所有文件操作都在文件系统中发生改写,本地当前目录并无更新,相当于Docker的卷映射
![volum docker](https://go.fancyking.win/i/2020/02/11/svmoe.png)
在web界面管理端也可以验证这一点
![web admin dfs](https://go.fancyking.win/i/2020/02/19/gz5mq4.png)
将文件系统文件取到当前目录
hdfs dfs -get output ./output cat ./output/*
关闭从节点
./sbin/stop-dfs.sh