尝试配置hadoop环境

系统环境

  • 操作系统:linux ubuntu 18.04 LTS
  • java: openjdk 11.0.8

安装hadoop

我的电脑上已经配置好了java环境,这里就不详细说了,官网上可以下载的java的jdk源码包,下载后配置环境变量即可,而ubuntu有自带的openjdk,可以用apt工具直接下载
apache hadoop官网上下载适合的版本,可以参考Hadoop2与Hadoop3的区别
在这里插入图片描述

这里选择最新的3.1.4
下载时间稍微有点长(可能是我网不好),下载后找个地方解压就好,很多教程里写的/usr/local/下,但个人因为权限的原因,不太喜欢存到这个目录下,自己找个地方存下了就是了,我存的地方是~/software
在这里插入图片描述
配置环境变量vim ~/.bashrc修改.bashrc,$HADOOP_HOME就是解压后的文件夹的路径

1
2
3
4
export HADOOP_HOME=~/software/hadoop-3.1.4/
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

再输入source ~/.bashrc更新配置,hadoop version查看是否安装成功
在这里插入图片描述

单机配置

参考:Ubuntu16.04下Hadoop的本地安装与配置

默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。这对调试非常有帮助。

下面的例子将已解压的$HADOOP_HOME/etc/hadoop/*.xml 作为输入(其它文本文件也行),查找并显示匹配给定正则表达式的条目。输出写入到指定的output目录。为了不污染源码,随便找个文件夹执行以下操作(大部分教程实在hadoop解压的文件夹下执行)

1
2
3
mkdir input
cp $HADOOP_HOME/etc/hadoop/*.xml ./input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'

注: 目录下不能有output文件夹,否则会报错
结果为:
在这里插入图片描述
配置成功!

伪分布配置

ssh配置:
如果ssh localhost能正常连接,如下图所示
在这里插入图片描述
则可继续后续的步骤,其中可能出现报错:connect to host localhost port 22: Connection refused,此时使用apt重新下载ssh即可sudo apt-get install openssh-server,可以参考文章Ubuntu 安装配置SSH(ssh: connect to host localhost port 22: Connection refused问题的解决)

修改hadoop配置文件:
配置文件在$HADOOPHOME/etc/hadoop文件夹下,要修改的是core-site.xml和hdfs-site.xml
配置文件具体参数的说明可以参考:修改core-site.xml配置文件修改hdfs-site.xml配置文件

core-site.xml:

1
2
3
4
5
6
7
8
9
10
11
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/tmp/hadoop</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

hdfs-site.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/tmp/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/tmp/hadoop/dfs/data</value>
</property>
</configuration>

修改之后执行hadoop namenode -format格式化一个新的分布式文件系统,$HADOOP_HOME/sbin/start-dfs.sh来开启namenode和datanode
执行时会发生报错:
在这里插入图片描述
这个是ssh秘钥出现了问题,参考普通用户ssh免密登陆完美解决(Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password))这篇文章,在~/.ssh目录下执行cat ./id_rsa.pub >> ./authorized_keys
再次执行$HADOOP_HOME/sbin/start-dfs.sh,仍然发生报错:
在这里插入图片描述
此时需要修改配置文件hadoop-env.sh,最后一行添加(如果已经export JAVA_HOME则需要修改):

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

JAVA_HOME即为环境变量中的JAVA_HOME,如果已经配置但忘记在哪儿了可以在终端执行echo $JAVA_HOME获取
再次执行$HADOOP_HOME/sbin/start-dfs.sh返回结果:
在这里插入图片描述
再输入jsp列出了namenode和datanode说明配置成功
在这里插入图片描述