Ubuntu搭建Hadoop环境-创新互联

本文是在一个全新的Ubuntu 22.04 虚拟机上安装Hadoop 3.3.4。

成都创新互联专注于网站建设,为客户提供成都网站设计、网站制作、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站制作,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。环境
  • Ubuntu 22.04
  • JDK 11
  • Hadoop 3.3.4
安装Hadoop

首先安装JDK:

# apt install openjdk-11-jdk-headless

安装好以后查看:

# java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

注意:Hadoop 3.3.4貌似不支持JDK 17,会报一个类似java.lang.IllegalStateException: Unable to load cache item的错误,换成JDK 11就好了。参见https://blog.csdn.net/duke_ding2/article/details/123932532

然后要求在localhost上ssh免密登录,效果如下:

# ssh localhost
Ubuntu 22.04.1 LTS
Last login: Wed Nov 30 18:29:00 2022 from 9.200.47.148

如果需要配置ssh免密登录,只需在客户端机器生成一对public/private key,把public key复制到服务器端机器(本例就是本机)的~/.ssh/authorized_keys里面即可,具体做法不再赘述,可以网上搜一下。

访问https://hadoop.apache.org/,下载Hadoop的压缩文件。我下载的文件是hadoop-3.3.4.tar.gz

# wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz

解压缩:

# tar -zxvf hadoop-3.3.4.tar.gz

编辑etc/hadoop/hadoop-env.sh文件,添加:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

注:我是用which javall命令来查看java所在目录的。

验证Hadoop

有3种模式:

  • Local (Standalone) Mode
  • Pseudo-Distributed Mode
  • Fully-Distributed Mode
Local (Standalone) Mode

Hadoop的默认配置就支持非分布式模式。所以现在就可以试一下。比如,复制一些文件到input目录,然后统计里面的一些特定文本信息。

# mkdir input
# cp etc/hadoop/*.xml input
# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output 'dfs[a-z.]+'
# cat output/*
1	dfsadmin

查看output目录:

# ll output/
total 16
drwxr-xr-x  2 root root   88 Nov 30 18:39 ./
drwxr-xr-x 13 1024 1024 4096 Nov 30 18:42 ../
-rw-r--r--  1 root root    8 Nov 30 18:39 ._SUCCESS.crc
-rw-r--r--  1 root root   12 Nov 30 18:39 .part-r-00000.crc
-rw-r--r--  1 root root    0 Nov 30 18:39 _SUCCESS
-rw-r--r--  1 root root   11 Nov 30 18:39 part-r-00000
# cat output/part-r-00000
1	dfsadmin
Pseudo-Distributed Mode

修改etc/hadoop/core-site.xml文件,添加如下配置:

fs.defaultFShdfs://localhost:9000

修改etc/hadoop/hdfs-site.xml文件,添加如下配置:

dfs.replication1

注意确认一下ssh localhost可以免密登录。

格式化HDFS:

# bin/hdfs namenode -format

启动HDFS,报错如下:

# sbin/start-dfs.sh
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [schlepps1.fyre.ibm.com]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

在网上搜了一下,解决方法是,在etc/hadoop/hadoop-env.sh里添加以下几行内容:

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

参考:https://stackoverflow.com/questions/48129029/hdfs-namenode-user-hdfs-datanode-user-hdfs-secondarynamenode-user-not-defined

现在,就可以用sbin/start-dfs.sh命令启动HDFS了。

同理,也可以用sbin/stop-dfs.sh命令停止HDFS。

启动HDFS后,可以通过浏览器访问http://:9870/

在这里插入图片描述

在HDFS里初始化root的根目录:

# bin/hdfs dfs -mkdir /user
# bin/hdfs dfs -mkdir /user/root

此时,目录是空的:

# bin/hdfs dfs -ls

我们来创建一个input目录:

# bin/hdfs dfs -mkdir input

再来查看一下:

# bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x   - root supergroup          0 2022-11-30 19:51 input

接下来,复制一些文件到HDFS。例如,input2是一个本地目录,里面有aaa.txtbbb.txt两个文本文件。把这两个文件复制到HDFS:

# bin/hdfs dfs -put /root/Downloads/hadoop-3.3.4/input2/* input

查看文件内容:

# bin/hdfs dfs -cat input/aaa.txt
abcdef
hi
haha
hello
world
hhii
# bin/hdfs dfs -cat input/bbb.txt
hhh
hihihi
aaabbb
cccddd
high
12345

统计hi出现的次数:

# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output 'hi'

运行完之后,会自动生成output目录。把output目录复制出来:

# bin/hdfs dfs -get output output

注:我先把已存在的本地output目录删掉了。

# ll output
total 8
drwxr-xr-x  2 root root   42 Nov 30 19:55 ./
drwxr-xr-x 14 1024 1024 4096 Nov 30 19:55 ../
-rw-r--r--  1 root root    5 Nov 30 19:55 part-r-00000
-rw-r--r--  1 root root    0 Nov 30 19:55 _SUCCESS
# cat output/part-r-00000
6	hi
Fully-Distributed Mode

参考
  • https://hadoop.apache.org
  • https://yanglinwei.blog.csdn.net/article/details/125170230
  • https://stackoverflow.com/questions/48129029/hdfs-namenode-user-hdfs-datanode-user-hdfs-secondarynamenode-user-not-defined

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章题目:Ubuntu搭建Hadoop环境-创新互联
分享地址:http://pwwzsj.com/article/iojdi.html